【问题标题】:SparkMLlib MultiClassMetrics.confusionMatrix() and precision() seems giving contradictory resultsSparkMLlib MultiClassMetrics.confusionMatrix() 和precision() 似乎给出了矛盾的结果
【发布时间】:2015-08-25 18:10:25
【问题描述】:

我是机器学习和 Spark MLlib 的新手。我使用RandomForest.trainClassifier() 创建了 RandomForest 分类器模型

我使用测试数据和model.predict() 创建了predictionAndLables RDD 现在我正在尝试以下方法来验证我的模型准确性。

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 目标变量和 117 Actionable 目标变量设置。

所以根据混淆矩阵它可以正确地预测 NonActionable 并且完全不能预测 Actionable 变量。我试图理解混淆矩阵以及为什么精度是94%。所以结果看起来矛盾。

【问题讨论】:

  • 准确率 = (正确分类的实例)/(总实例) = (1948+0)/(1948+0+117+0) = 0.9433

标签: apache-spark apache-spark-mllib


【解决方案1】:

想象一下,您的 117 个可操作行与大约 500 个不可操作行粘在一起。现在分类器可以将所有 617 移动到 Actionable 列并得到 500 个 NonActionable 错误,或者它可以将它们移动到 NonActionable 列并得到 117 错误。除非你告诉它 117 Actionable 错误比 500 NonActionable 更错误,否则它会这样做。弄清楚如何平衡问题(伪造更多可操作的项目,对非可操作的项目进行子采样,对可操作的项目进行更重的权重等)并处理更多功能以削弱“胶水”(使可操作和不可操作看起来与分类器)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-03
    • 2019-08-04
    相关资源
    最近更新 更多