【发布时间】:2017-03-03 20:33:58
【问题描述】:
目前我正在尝试了解机器学习算法的工作方式,但我并没有真正理解的一件事是预测标签的计算准确度与视觉混淆矩阵之间的明显差异。我会尽量解释清楚。
这里是数据集的sn-p(这里你可以看到9个样本(真实数据集中大约4k),6个特征和9个标签(代表的不是数字,而是一些含义和不能 比较像 7 > 4 > 1)):
f1 f2 f3 f4 f5 f6 label
89.18 0.412 9.1 24.17 2.4 1 1
90.1 0.519 14.3 16.555 3.2 1 2
83.42 0.537 13.3 14.93 3.4 1 3
64.82 0.68 9.1 8.97 4.5 2 4
34.53 0.703 4.9 8.22 3.5 2 5
87.19 1.045 4.7 5.32 5.4 2 6
43.23 0.699 14.9 12.375 4.0 2 7
43.29 0.702 7.3 6.705 4.0 2 8
20.498 1.505 1.321 6.4785 3.8 2 9
出于好奇,我尝试了多种算法(线性、高斯、SVM(SVC、SVR)、贝叶斯等)。据我了解手册,就我而言,最好使用分类器(离散),而不是回归(连续)。使用通用:
model.fit(X_train, y_train)
model.score(X_test, y_test)
我明白了:
Lin_Reg: 0.855793988736
Log_Reg: 0.463251670379
DTC: 0.400890868597
KNC: 0.41425389755
LDA: 0.550111358575
Gaus_NB: 0.391982182628
Bay_Rid: 0.855698151574
SVC: 0.483296213808
SVR: 0.647914795849
连续算法的效果更好。当我使用贝叶斯岭的混淆矩阵(必须将浮点数转换为整数)来验证其结果时,我得到了以下结果:
Pred l1 l2 l3 l4 l5 l6 l7 l8 l9
True
l1 23, 66, 0, 0, 0, 0, 0, 0, 0
l2 31, 57 1, 0, 0, 0, 0, 0, 0
l3 13, 85, 19 0, 0, 0, 0, 0, 0
l4 0, 0, 0, 0 1, 6, 0, 0, 0
l5 0, 0, 0, 4, 8 7, 0, 0, 0
l6 0, 0, 0, 1, 27, 36 7, 0, 0
l7 0, 0, 0, 0, 2, 15, 0 0, 0
l8 0, 0, 0, 1, 1, 30, 8, 0 0
l9 0, 0, 0, 1, 0, 9, 1, 0, 0
是什么让我明白 85% 的准确率是错误的。 这怎么解释?这是因为 float/int 转换吗?
感谢任何直接的回答/链接等。
【问题讨论】:
-
您是如何计算准确度的?
sklearn.metrics.accuracy_score(y_test, model.predict(X_test))之类的东西? -
如果你手动比较
model.predict()的结果和你的标签,通过计算有多少条目是相等的,你应该知道计算的准确性或混淆矩阵是否错误。 (或者如果两者都关闭)
标签: python algorithm pandas machine-learning scikit-learn