Python – 机器学习

目前我正在尝试理解机器学习算法的工作方式,其中有一点我不是很明白,那就是预测标签的计算准确性和视觉混淆矩阵之间的明显差异。我会尽可能清晰地解释这个问题。

以下是数据集的一个片段(你可以看到9个样本(实际数据集大约有4k),6个特征和9个标签(这些标签代表的不是数字,而是某些含义,且不能像7 > 4 > 1那样进行比较)):

f1      f2      f3      f4      f5    f6   label89.18   0.412   9.1     24.17   2.4   1    190.1    0.519   14.3    16.555  3.2   1    283.42   0.537   13.3    14.93   3.4   1    364.82   0.68    9.1     8.97    4.5   2    434.53   0.703   4.9     8.22    3.5   2    587.19   1.045   4.7     5.32    5.4   2    643.23   0.699   14.9    12.375  4.0   2    743.29   0.702   7.3     6.705   4.0   2    820.498  1.505   1.321   6.4785  3.8   2    9

出于好奇,我尝试了多种算法(线性、Gaussian、SVM(SVC、SVR)、贝叶斯等)。根据我的理解,在我的情况下,最好使用分类器(离散),而不是回归(连续)。使用常见的:

model.fit(X_train, y_train) model.score(X_test, y_test)

我得到了以下结果:

Lin_Reg: 0.855793988736Log_Reg: 0.463251670379DTC:     0.400890868597KNC:     0.41425389755LDA:     0.550111358575Gaus_NB: 0.391982182628Bay_Rid: 0.855698151574SVC:     0.483296213808SVR:     0.647914795849

连续算法的表现更好。当我使用混淆矩阵来验证贝叶斯岭回归的结果时(不得不将浮点数转换为整数),我得到了以下结果:

Pred  l1   l2   l3   l4   l5   l6   l7   l8   l9Truel1    23,  66,  0,   0,   0,   0,   0,   0,   0l2    31,  57   1,   0,   0,   0,   0,   0,   0l3    13,  85,  19   0,   0,   0,   0,   0,   0l4    0,   0,   0,   0    1,   6,   0,   0,   0l5    0,   0,   0,   4,   8    7,   0,   0,   0l6    0,   0,   0,   1,   27,  36   7,   0,   0l7    0,   0,   0,   0,   2,   15,  0    0,   0l8    0,   0,   0,   1,   1,   30,  8,   0    0l9    0,   0,   0,   1,   0,   9,   1,   0,   0

这让我明白85%的准确率是错误的。如何解释这一点?这是因为浮点数/整数转换的原因吗?

对任何直接的回答/链接等表示感谢。


回答:

你在这里混淆了机器学习中的两个非常不同的概念:回归和分类。回归通常处理连续值,例如温度或股票市场价值。另一方面,分类可以告诉你录音中的鸟类种类——这正是你会使用混淆矩阵的地方。它会告诉你算法正确预测标签的次数以及它犯错的地方。你使用的SciPy有专门针对这两者的部分。

对于分类和回归问题,你可以使用不同的指标来评分它们,所以永远不要假设它们是可比较的。正如@javad指出的,”决定系数”与准确率非常不同。我还建议阅读精确度和召回率的内容。

在你的案例中,你显然有一个分类问题,因此应该这样处理。此外,请注意f6看起来像是有一组离散的值。

如果你想快速尝试不同的方法,我可以推荐例如H2O,它除了有很好的API外,还有很好的用户界面,并且允许大规模并行处理。XGBoost也非常优秀。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注