嗨,我是机器学习和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
。所以结果看起来很矛盾。请提前指导谢谢。
答案 0 :(得分:1)
想象一下,你的117个Actionable行被粘贴到大约500个不可行的行上。现在,分类器可以将所有617移动到Actionable列并获得500个NonActionable错误,或者它可以将它们移动到NonActionable列并得到117错误。除非你告诉它117 Actionable错误比500 NonActionable更错误它会做到这一点。找出如何平衡问题(伪造更多可操作的项目,子样本不可行的项目,更重要的可操作项目等)和更多的功能,以削弱"胶水" (使Actionable和NonActionable看起来尽可能与分类器不同)