liblinear和nltk等机器学习包中的分类器提供了一种方法show_most_informative_features(),它对调试功能非常有用:
viagra = None ok : spam = 4.5 : 1.0
hello = True ok : spam = 4.5 : 1.0
hello = None spam : ok = 3.3 : 1.0
viagra = True spam : ok = 3.3 : 1.0
casino = True spam : ok = 2.0 : 1.0
casino = None ok : spam = 1.5 : 1.0
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果在scikit-learn中为分类器实现类似的东西.我搜索了文档,但找不到类似的东西.
如果还没有这样的功能,有人知道如何获得这些值吗?
非常感谢!
如何在不设置Hadoop或Spark等集群计算基础架构的情况下,将适当大小的Parquet数据集读入内存中的Pandas DataFrame?这只是我想在笔记本电脑上用简单的Python脚本在内存中读取的适量数据.数据不驻留在HDFS上.它可以在本地文件系统上,也可以在S3中.我不想启动并配置其他服务,如Hadoop,Hive或Spark.
我认为Blaze/Odo会使这成为可能:Odo文档提到了Parquet,但是这些示例似乎都要通过外部Hive运行时.
假设我有一个2d稀疏数组.在我的实际用例中,行数和列数都要大得多(比如20000和50000),因此在使用密集表示时它无法适应内存:
>>> import numpy as np
>>> import scipy.sparse as ssp
>>> a = ssp.lil_matrix((5, 3))
>>> a[1, 2] = -1
>>> a[4, 1] = 2
>>> a.todense()
matrix([[ 0., 0., 0.],
[ 0., 0., -1.],
[ 0., 0., 0.],
[ 0., 0., 0.],
[ 0., 2., 0.]])
Run Code Online (Sandbox Code Playgroud)
现在假设我有一个密集的1d数组,其中包含大小为3的所有非零组件(在我的实际案例中为50000):
>>> d = np.ones(3) * 3
>>> d
array([ 3., 3., 3.])
Run Code Online (Sandbox Code Playgroud)
我想使用numpy的常用广播语义来计算a和d的元素乘法.然而,scipy中的稀疏矩阵属于np.matrix:'*'运算符被重载使其行为类似于矩阵乘法而不是逐元乘法:
>>> a * d
array([ 0., -3., 0., 0., 6.])
Run Code Online (Sandbox Code Playgroud)
一种解决方案是将'a'切换到'*'运算符的数组语义,这将产生预期的结果:
>>> a.toarray() * d
array([[ 0., 0., …Run Code Online (Sandbox Code Playgroud) 我想将scikits.learn.hmm.GaussianHMM与不同长度的训练序列相匹配.然而,拟合方法通过这样做来防止使用不同长度的序列
obs = np.asanyarray(obs)
Run Code Online (Sandbox Code Playgroud)
它只适用于同样形状的数组列表.有人提示如何继续吗?
我能够得到使用ROC曲线scikit-learn有
fpr,tpr,thresholds = metrics.roc_curve(y_true,y_pred, pos_label=1),其中y_true基于价值观的名单上我的黄金标准(即0负和1为正的情况下),并且y_pred是分数(例如一个对应列表,0.053497243,0.008521122,0.022781548,0.101885263,0.012913795,0.0,0.042881547[...])
我试图弄清楚如何在该曲线上添加置信区间,但是没有找到任何简单的方法来使用sklearn.
我正在比较两个Naive Bayes分类器:一个来自NLTK,另一个来自scikit-learn.我正在处理一个多类分类问题(3个类:正(1),负(-1)和中性(0)).
在不执行任何特征选择的情况下(即,使用所有可用功能),并使用70,000个实例的训练数据集(噪声标记,实例分布为17%为正,4%为负,78%为中性),我训练了两个分类器,第一个是nltk.NaiveBayesClassifier,第二个是sklearn.naive_bayes.MultinomialNB(带fit_prior=True).
训练结束后,我在30,000个实例的测试集上评估了分类器,得到了以下结果:
**NLTK's NaiveBayes**
accuracy: 0.568740
class: 1
precision: 0.331229
recall: 0.331565
F-Measure: 0.331355
class: -1
precision: 0.079253
recall: 0.446331
F-Measure: 0.134596
class: 0
precision: 0.849842
recall: 0.628126
F-Measure: 0.722347
**Scikit's MultinomialNB (with fit_prior=True)**
accuracy: 0.834670
class: 1
precision: 0.400247
recall: 0.125359
F-Measure: 0.190917
class: -1
precision: 0.330836
recall: 0.012441
F-Measure: 0.023939
class: 0
precision: 0.852997
recall: 0.973406
F-Measure: 0.909191
**Scikit's MultinomialNB (with fit_prior=False)**
accuracy: 0.834680
class: 1
precision: 0.400380
recall: 0.125361 …Run Code Online (Sandbox Code Playgroud) 我在Python中使用scikits.learn训练了一堆RBF SVM,然后挑选了结果.这些用于图像处理任务,我想要进行测试的一件事是在一些测试图像的每个像素上运行每个分类器.也就是说,从以像素(i,j)为中心的窗口中提取特征向量,在该特征向量上运行每个分类器,然后继续前进到下一个像素并重复.这对于Python来说太慢了.
澄清:当我说"这太慢了......"我的意思是即使是scikits.learn使用的Libsvm底层代码太慢了.我实际上正在为GPU编写手动决策函数,因此每个像素的分类是并行发生的.
我是否可以使用Pickle加载分类器,然后获取描述如何从特征向量计算决策的某种属性,然后将该信息传递给我自己的C代码?在线性SVM的情况下,我可以提取权重向量和偏置向量,并将它们作为输入添加到C函数中.但是对于RBF分类器来说,相同的事情是什么,以及如何从scikits.learn对象获取该信息?
补充:首先尝试解决方案.
看起来分类器对象具有support_vectors_包含支持向量作为数组的每一行的属性.还有一个属性dual_coef_是1乘以len(support_vectors_)系数的数组.从非线性SVM的标准教程中可以看出,应该执行以下操作:
v待测数据点的特征向量.这将是一个与行的长度相同的向量support_vectors_.i中support_vectors_,计算平方欧几里德距离d[i]该支持向量和之间v.t[i]为gamma * exp{-d[i]}其中gamma是RBF参数.dual_coef_[i] * t[i]在所有i.intercept_将scikits.learn分类器的属性值添加到此总和.补充:在此文档链接的编号第9页上,它提到intercept_分类器的属性确实包含偏差项.我已更新上述步骤以反映这一点.
我想在即将推出的项目中使用scikit-learn,我绝对无法安装它.我可以通过从源代码构建它们或通过pip安装其他软件包而不会出现问题.对于scikit-learn,我尝试在GitHub上克隆项目并通过pip安装但没有成功.有人可以帮忙吗?这是我的一部分pip.log:
Downloading/unpacking scikit-learn
Running setup.py egg_info for package scikit-learn
Warning: Assuming default configuration (scikits/learn/{setup_scikits.learn,setup}.py was not found)Warning: Assuming default configuration (sklearn/svm/tests/{setup_tests,setup}.py was not found)Appending scikits.learn configuration to
Ignoring attempt to set 'name' (from '' to 'scikits.learn')
Appending sklearn.check_build configuration to sklearn
Ignoring attempt to set 'name' (from 'sklearn' to 'sklearn.check_build')
Appending sklearn.svm.tests configuration to sklearn.svm
Ignoring attempt to set 'name' (from 'sklearn.svm' to 'sklearn.svm.tests')
blas_opt_info:
FOUND:
extra_link_args = ['-Wl,-framework', '-Wl,Accelerate']
define_macros = [('NO_ATLAS_INFO', 3)]
extra_compile_args = …Run Code Online (Sandbox Code Playgroud) Run Code Online (Sandbox Code Playgroud)import scikits as sklearn from sklearn.linear_model import LogisticRegression lr = LogisticRegression(C=0.1, penalty='l1') model = lr.fit(training[:,0:-1], training[:,-1)
CV [:, - 1]
cv_predict = model.predict(cv [:,0:-1])
题
我想根据实际标签和预测标签计算精度和召回分数.是否有标准的方法来使用numpy/scipy/scikits?
谢谢
为什么会这样呢?
GradientBoostingClassifier(loss='ls')
Run Code Online (Sandbox Code Playgroud)
失败了:
raise ValueError("``n_classes`` must be 1 for regression")
ValueError: ``n_classes`` must be 1 for regression
Run Code Online (Sandbox Code Playgroud)
它与...完美配合loss='deviance'?
我在Ubuntu 64位中使用scikit-learn-0.11和scipy-0.11.0rc1这发生了对二进制类'YES''NO'的数据集进行分类.