SparkMLlib MultiClassMetrics.confusionMatrix()和precision()似乎给出了相互矛盾的结果

时间:2015-06-10 13:04:24

标签: apache-spark apache-spark-mllib

嗨,我是机器学习和Spark MLlib的新手。我使用RandomForest.trainClassifier()创建了RandomForest分类器模型我的训练数据集本质上主要是分类的,并且响应/目标变量为Actionable / NoActionable。我使用测试数据和predictionAndLables创建了RDD model.predict()现在我正在尝试以下方法来验证模型的准确性。

MultiClassMetrics metrics = new MultiClassMetrics(predictionAndLables.rdd())
System.out.println(metrics.precision()); //prints 0.94334140435
System.out.println(metrics.confusionMatrix()); //prints like the following

1948.0     0.0
117.0      0.0

现在,如果您看到使用precision()方法打印的模型精确度似乎在94%周围非常好,但是如果您看到上面的混淆矩阵似乎有些错误我有1948 NonActionable目标变量和{{1测试数据集中可操作的目标变量。因此,根据混淆矩阵,它可以正确地预测NonActionable,并且无法预测所有可操作变量。请帮助我理解混淆矩阵以及为什么精度为117。所以结果看起来很矛盾。请提前指导谢谢。

1 个答案:

答案 0 :(得分:1)

想象一下,你的117个Actionable行被粘贴到大约500个不可行的行上。现在,分类器可以将所有617移动到Actionable列并获得500个NonActionable错误,或者它可以将它们移动到NonActionable列并得到117错误。除非你告诉它117 Actionable错误比500 NonActionable更错误它会做到这一点。找出如何平衡问题(伪造更多可操作的项目,子样本不可行的项目,更重要的可操作项目等)和更多的功能,以削弱"胶水" (使Actionable和NonActionable看起来尽可能与分类器不同)