我使用SciPy和scikit-learn来训练和应用Multinomial朴素贝叶斯分类器进行二进制文本分类.准确地说,我使用该模块sklearn.feature_extraction.text.CountVectorizer创建稀疏矩阵,该稀疏矩阵保存来自文本的单词特征计数,模块sklearn.naive_bayes.MultinomialNB作为分类器实现,用于训练分类器对训练数据并将其应用于测试数据.
输入CountVectorizer是一个表示为unicode字符串的文本文档列表.训练数据远大于测试数据.我的代码看起来像这样(简化):
vectorizer = CountVectorizer(**kwargs)
# sparse matrix with training data
X_train = vectorizer.fit_transform(list_of_documents_for_training)
# vector holding target values (=classes, either -1 or 1) for training documents
# this vector has the same number of elements as the list of documents
y_train = numpy.array([1, 1, 1, -1, -1, 1, -1, -1, 1, 1, -1, -1, -1, ...])
# sparse matrix with test data
X_test = vectorizer.fit_transform(list_of_documents_for_testing)
# Training stage of …Run Code Online (Sandbox Code Playgroud) 我正在使用当前稳定版0.13的scikit-learn.我正在使用类将线性支持向量分类器应用于某些数据sklearn.svm.LinearSVC.
在关于 scikit-learn文档中的预处理的章节中,我已经阅读了以下内容:
在学习算法的目标函数中使用的许多元素(例如支持向量机的RBF内核或线性模型的l1和l2正则化器)假设所有特征都以零为中心并且具有相同顺序的方差.如果某个要素的方差比其他要大一个数量级,那么它可能会主导目标函数并使估算工具无法按预期正确地学习其他要素.
问题1:标准化对于SVM通常是否有用,对于那些具有线性内核函数的人来说也是如此?
问题2:据我所知,我必须计算训练数据的均值和标准差,并使用该类对测试数据应用相同的转换sklearn.preprocessing.StandardScaler.但是,我不明白的是,在将训练数据提供给SVM分类器之前,我是否还必须转换训练数据或仅转换测试数据.
也就是说,我必须这样做:
scaler = StandardScaler()
scaler.fit(X_train) # only compute mean and std here
X_test = scaler.transform(X_test) # perform standardization by centering and scaling
clf = LinearSVC()
clf.fit(X_train, y_train)
clf.predict(X_test)
Run Code Online (Sandbox Code Playgroud)
或者我必须这样做:
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train) # compute mean, std and transform training data as well
X_test = scaler.transform(X_test) # same as above
clf = LinearSVC()
clf.fit(X_train, y_train)
clf.predict(X_test)
Run Code Online (Sandbox Code Playgroud)
简而言之,我是否必须使用scaler.fit(X_train)或使用scaler.fit_transform(X_train)训练数据才能获得合理的结果 …
假设我有一个二维矩阵作为一个numpy数组.如果我想在这个矩阵中删除具有特定索引的行,我会使用numpy.delete().这是我的意思的一个例子:
In [1]: my_matrix = numpy.array([
...: [10, 20, 30, 40, 50],
...: [15, 25, 35, 45, 55],
...: [95, 96, 97, 98, 99]
...: ])
In [2]: numpy.delete(my_matrix, [0, 2], axis=0)
Out[2]: array([[15, 25, 35, 45, 55]])
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种方法来使用scipy.sparse包中的矩阵来完成上述操作.我知道可以通过将整个矩阵转换为numpy数组来实现这一点,但我不想这样做.还有其他办法吗?
非常感谢!
GitHub上有一个开源项目.它的原始仓库包含最新的主分支.现在有人(不是我)分配了这个仓库,从主分支创建了一个开发分支,并将东西添加到开发分支.我现在想要做的是将开发分支合并回主分支.不幸的是,分叉回购的主分支不是最新的.另请注意,我没有拥有两个相应的远程回购.
目前,我已将原始仓库和分叉仓库克隆到我的本地机器上git clone.如何将forked repo的开发分支合并到我本地计算机上的原始仓库的主分支中(即不在远程服务器上,这是不可能的)?
我正在使用matplotlib.pyplot.bar()和绘制几个条形图和饼图matplotlib.pyplot.pie().在这两个功能中,我可以更改条形和楔形的颜色.
但是,我需要以黑白打印这些图表.能够在条形和楔形上放置纹理会更有用,类似于Line2D可用于绘制线条的标记属性.我可以用一致的方式用这些标记填充条形和楔形吗?或者还有其他方法来实现这样的目标吗?
我正试图绕过django-haystack教程,以便为我的应用程序添加搜索功能.不幸的是,在构建搜索索引时,我不太了解一些关键部分.
在本教程中,以下django模型作为示例:
class Note(models.Model):
user = models.ForeignKey(User)
pub_date = models.DateTimeField()
title = models.CharField(max_length=200)
body = models.TextField()
Run Code Online (Sandbox Code Playgroud)
Note模型的相应索引类是:
class NoteIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
author = indexes.CharField(model_attr='user')
pub_date = indexes.DateTimeField(model_attr='pub_date')
def get_model(self):
return Note
Run Code Online (Sandbox Code Playgroud)
最后但同样重要的是,我被要求创建一个如下所示的数据模板:
{{ object.title }}
{{ object.user.get_full_name }}
{{ object.body }}
Run Code Online (Sandbox Code Playgroud)
阅读完整个教程之后,我仍然对现在索引的内容感到困惑.据我了解,该字段的内容author和pub_date将被用来创建索引.该字段text仅用于提供一些设置.并且数据模板指定稍后将如何显示搜索结果,即,用于在搜索结果中显示的模型的哪些字段.
这是正确的还是我完全错了?在我看来,教程和文档在很多方面都很模糊.非常感谢你提前.
我正在使用sbt 0.11.2进行混合Java/Scala项目.我已经意识到,当我doc从sbt中运行命令时,它不仅会为Scala源文件创建scaladocs src/main/scala,而且还会为Java源文件src/main/java创建scaladocs(sbt wiki声称src/main/scala仅为此创建它们似乎不是真的).
但是,这看起来不太好.例如,对于Foo使用静态方法命名的Java类,生成的scaladoc中有两个条目:Foo类和Foo对象.该类仅列出构造函数,对象列出静态方法.
有什么方法可以告诉sbt src/main/java从scaladoc生成中排除文件夹吗?我想为那些人创建javadoc.
我想根据德语编号约定格式化整数和浮点数.这可以使用格式语言和表示类型,n但在我的平台上失败.
(v2.7.3:70274d53c1dd, Apr 9 2012, 20:52:43) [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin例子:
1234 => 1.2341234.56 => 1.234,561000000 => 1.000.000到目前为止我尝试了什么:
设置德语区域设置
import locale
locale.setlocale(locale.LC_ALL, 'de_DE')
Run Code Online (Sandbox Code Playgroud)格式规范选项,仅识别英语格式.
'{:,}'.format(1234)
'1,234'
'{:,}'.format(1234.56)
'1,234.56'
'{:,}'.format(1000000)
'1,000,000'
Run Code Online (Sandbox Code Playgroud)根据Python文档,整数和浮动表示类型n应该做我想要的,但事实并非如此.
'{:n}'.format(1234)
'1234'
'{:n}'.format(1234.56)
'1234,56' # at least the comma was set correctly here
'{:n}'.format(1000000)
'1000000'
'{:n}'.format(12345769.56)
'1,23458e+07' # it's doing weird things …Run Code Online (Sandbox Code Playgroud)我希望能够从Django中运行Scrapy web爬行框架.Scrapy本身仅提供命令行工具scrapy来执行其命令,即该工具不是故意编写以从外部程序调用的.
用户Mikhail Korobov提出了一个很好的解决方案,即从Django自定义管理命令调用Scrapy.为方便起见,我在此重复他的解决方案:
# -*- coding: utf-8 -*-
# myapp/management/commands/scrapy.py
from __future__ import absolute_import
from django.core.management.base import BaseCommand
class Command(BaseCommand):
def run_from_argv(self, argv):
self._argv = argv
return super(Command, self).run_from_argv(argv)
def handle(self, *args, **options):
from scrapy.cmdline import execute
execute(self._argv[1:])
Run Code Online (Sandbox Code Playgroud)
而不是调用例如scrapy crawl domain.com我现在可以python manage.py scrapy crawl domain.com在Django项目中做.但是,Scrapy命令的选项根本不会被解析.如果我这样做python manage.py scrapy crawl domain.com -o scraped_data.json -t json,我只得到以下回复:
Usage: manage.py scrapy [options]
manage.py: error: no such option: -o
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,如何扩展自定义管理命令以采用Scrapy的命令行选项?
不幸的是,Django …
您有一个数字列表,并且您想要过滤掉那些包含唯一数字的数字,即每个数字只能在数字中出现一次.
积极的例子:
反面例子:
你会怎么做?我自己的想法是将每个数字转换为字符串,然后检查由字符串的字符组成的集合的大小是否等于字符串的长度.像这样的东西:
def uniques(numbers):
for number in numbers:
str_number = str(number)
if len(set(str_number)) == len(str_number):
yield number
for i in uniques(xrange(1000, 1050)):
print i
1023
1024
1025
1026
1027
1028
1029
1032
1034
1035
1036
1037
1038
1039
1042
1043
1045
1046
1047
1048
1049
Run Code Online (Sandbox Code Playgroud)
有没有办法在不首先将整数转换为字符串的情况下执行此操作?