目前,我正试图了解机器学习算法的工作方式,但有一件事我并没有真正理解,那就是预测标签的计算精度与视觉混淆矩阵之间的明显差异。我会尽量解释清楚。
这里是数据集的片段(在这里您可以看到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出于好奇心,我尝试了许多算法(线性,高斯,支持向量机(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连续算法取得了较好的效果。当我为Bayesian使用混淆矩阵(必须将浮点数转换为整数)以验证其结果时,我得到了以下结果:
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%的准确率是错误的。这怎么解释呢?这是因为浮点/int转换吗?
会感谢任何直接的回答/链接等。
发布于 2016-10-22 10:27:46
您在这里混合了两个非常不同的机器学习概念:回归和分类。回归通常处理连续值,例如温度或股票市值。另一方面,分类可以告诉你哪些鸟种在记录中--这正是你使用混淆矩阵的地方。它会告诉你算法正确预测标签的次数以及它在哪里出错。您正在使用的SciPy有两个单独的部分。
对于分类和回归问题,您可以使用不同的度量来对它们进行评分,所以永远不要假设它们是可比较的。正如@javad所指出的,“决定系数”与准确性有很大的不同。我还建议在查准率与召回上阅读。
在您的情况下,您显然存在分类问题,因此应该对其进行处理。另外,请注意,f6看起来像是有一组离散的值。
如果您想要快速地尝试不同的方法,我可以推荐H2O,它旁边有很好的用户界面,可以进行大规模的并行处理。XGBoost也是优秀的。
发布于 2016-10-21 15:03:10
请看一下文档这里。
如果在回归方法上调用score(),它们将返回“预测的决定系数R^2”,而不是精度。
发布于 2016-10-26 08:03:56
看看这。
使用"model.score(X_test,y_test)“。
https://stackoverflow.com/questions/40178202
复制相似问题