混淆矩阵缺少实例

时间:2017-04-04 19:42:01

标签: python pyspark confusion-matrix

我正在使用PySpark生成并验证预测。我有一个包含正确列的数据框,我将它传递给MulticlassMetrics以获取混淆矩阵。但是当我检查混淆矩阵时,它缺少大部分值(数据帧有超过120.000行,混淆矩阵只有8个左右的值)。为什么会失去其余的?

编辑:为了澄清,我不希望混淆矩阵与数据集具有相同的大小,我的数据中有两个类,我希望矩阵实例的总和与数字相同我的数据中的行数。问题是我的数据中有大约120,000行,混淆矩阵就像是 [[ 0, 3 ], [ 1, 0 ]]

代码:我不能在这里发布整个代码,但这是重要的部分

training_data = load_training_data() # Spark DataFrame
training_data, testing_data = training_data.randomSplit([0.7, 0.3])

asm = VectorAssembler(inputCols=selected_columns, outputCol='features')
final_training_data = asm.transform(training_data)

rf = RandomForestClassifier(labelCol="label", impurity="entropy")
rfModel = rf.fit(final_training_data)

test_predictions = rfModel.transform(testing_data)
predictionAndLabels = test_predictions.select(['prediction', 'label'])

tp = predictionAndLabels.rdd.map(tuple)
metrics = MulticlassMetrics(tp)

1 个答案:

答案 0 :(得分:1)

以下是如何使用MulticlassMetrics的一个很好的示例。在此示例中,数据包含150个观察结果,这些观察结果属于三个类别之一。结果,最终的混淆矩阵具有在单个维度中表示为DenseArray的形状3x3。如果您浏览链接中的示例并在到达metrics = MulticlassMetrics(predictionAndLabels)后停止,则可以执行以下操作来查看混淆矩阵。

In[6]: metrics = MulticlassMetrics(predictionAndLabels)
In[7]: confusion_mat = metrics.confusionMatrix()
In[8]: print(confusion_mat)
Out[8]: DenseMatrix(3, 3, [15.0, 0.0, 7.0, 0.0, 16.0, 0.0, 1.0, 0.0, 13.0], 0)
In[9]: print(confusion_mat.toArray())
Out[9]: array([[ 15.,   0.,   1.],
               [  0.,  16.,   0.],
               [ 7.,   0.,  13.]])

最终数组是您将解释为混淆矩阵的内容。查看维基百科的Confusion Matrix条目,了解更多信息以及多类矩阵的一个很好的例子。

如果没有关于您的数据的更多信息我无法确定,但听起来您有2x2或3x3混淆矩阵,您只需要调用toArray以更好地可视化它。

修改(感谢您添加代码。)

通常,当我运行RandomForestClassifier.transform(test)时,我最终会得到predictedLabel列,这是预测的实际类别。此外,我认为您不应该致电predictionAndLabels.rdd.map(tuple)。选择predictedLabel后,'标签'从test_predictions开始,您应该可以直接转到指标。总结一下尝试以下内容:

predictionAndLabels = test_predictions.select(['predictedLabel', 'label'])
metrics = MulticlassMetrics(predictionAndLabels)