使用 sklearn 的 LinearSVC 预测结果不一致,

替代

我正在使用 SKLearn 的 LinearSVC (LibLinear) 执行简单的分类。

我无法直接重现预测值并获得与“LinearSVC.predict”相同的准确度。

我究竟做错了什么?以下代码是独立的,并突出了我的问题。

import scipy as sc
import numpy as np
from sklearn.svm import LinearSVC #liblinear
N=6000
m=500

D = sc.sparse.random(N,m, random_state = 1)
D.data *= 2
D.data -= 1
X = sc.sparse.csr_matrix(D)
y = (X.sum(axis = 1) > .0)*2-1.0 

x_train = X[:5000,:]
y_train = y[:5000,:]
x_test  = X[5000:,:]
y_test  = y[5000:,:]

clf = LinearSVC(C=.1, fit_intercept = False, loss= 'hinge')
clf.fit(x_train,np.array(y_train))

print "Direct prediction accuracy:\t",100-100*np.mean((np.sign(x_test*clf.coef_.T)!=y_test)+0.0) ,"%"
print "CLF prediction accuracy:\t",  100*clf.score(x_test,y_test),"%"

输出:

Direct prediction accuracy:     90.8 %
CLF prediction accuracy:        91.3 %

谢谢你的帮助!

西多姆

不同之处在于您处理零的方式,当使用时np.sign,结果中有零未归类到任何有效类(1 或 -1,因为您有一个二元分类器);另一方面Classifier.predict严格输出两个类;您的预测方法从np.sign(x_test*clf.coef_.T)to 的微小变化(np.where(x_test * clf.coef_.T > 0, 1, -1)将提供与内置预测方法完全相同的准确度

​
print "Direct prediction accuracy:\t", 100-100*np.mean((np.where(x_test * clf.coef_.T > 0, 1, -1) != y_test)+0.0) ,"%"
print "CLF prediction accuracy:\t",  100*clf.score(x_test, y_test),"%"

# Direct prediction accuracy:   92.7 %
# CLF prediction accuracy:  92.7 %

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在sklearn中使用LinearSVC时如何处理收敛警告?

ValueError:在defaultdict上使用sklearn时样本数量不一致

sklearn LinearSVC是SVM还是SVC?

使用strptime / strftime的结果不一致

使用SimpleDateFormatter获得不一致的结果

使用golang频道的结果不一致

使用matplotlib结果不一致

使用echo >>会产生不一致的结果

为什么 PostgreSQL 查询会给出不一致的结果,除非使用 ORDER BY 强制执行可预测的结果排序

sklearn LabelEncoder中的标签不一致?

sklearn.ensemble.RandomForestClassifier 输出不一致

sklearn:LinearSVC和OneSVM的AUC分数

R使用lapply内部的Call导致不一致的结果

为什么在减法中使用不一致的结果会减少?

在Java中使用按位&运算符和+产生不一致的结果

使用 find 和 jq 进行就地编辑会产生不一致的结果

使用相同代码的2个测试之间的Rspec结果不一致

使用ZipOutputStream压缩文件会产生不一致的结果

使用尝试捕获:为什么每次查询结果集都不一致

在Apache Spark中使用ALS导致结果不一致

来自Plist的字典使用相同的键给出不一致的结果

结果不一致,使用子过程在管道输出上调用sed

使用sklean和seed时神经网络结果不一致

(C++) 在使用节点/链表时得到不一致的结果。

在if语句中的数组上使用indexOf的结果不一致

使用熊猫滚动相关时如何处理不一致的结果?

使用mapply时参数不一致

在python中使用地图的不一致

使用 strlen 时的不一致