我正在使用RandomForestClassifier
pyspark.ml.classification
我在二进制类数据集上运行模型并显示概率。
我在col概率中有以下内容:
+-----+----------+---------------------------------------+
|label|prediction|probability |
+-----+----------+---------------------------------------+
|0.0 |0.0 |[0.9005918461098429,0.0994081538901571]|
|1.0 |1.0 |[0.6051335859900139,0.3948664140099861]|
+-----+----------+---------------------------------------+
我有一个2个元素的列表,这些元素显然对应于预测类的概率。
我的问题 :概率[0总是对应于预测值,而在spark文档中则不清楚!
答案 0 :(得分:1)
我将你的问题解释为:在“预测”列下的数组中的第一个元素是否始终对应于“预测类”,您指的是随机森林分类器预测观察应该具有的标签。
如果我有正确的答案,那么答案是肯定的。
两个probability
行中数组中的项目可以读作模型告诉您:
['My confidence that the predicted label = the true label',
'My confidence that the label != the true label']
如果预测了多个标签,那么您可以让模型告诉您:
['My confidence that the label I predict = specific label 1',
'My confidence that the label I predict = specific label 2',
...'My confidence that the label I predict = specific label N']
这是由您尝试预测的N个标签编制索引的(这意味着您必须注意标签的结构方式)。
或许看看this answer会有所帮助。你可以这样做:
model = pipeline.fit(trainig_data)
predictions = model.transform(test_data)
print predictions.show(10)
(使用相关管道和示例中的数据。)
这将显示每个班级的概率。
答案 1 :(得分:0)
我在这里发布了几乎相同的问题,我认为答案可能会帮助您: Scala: how to know which probability correspond to which class?
答案在模型拟合之前。
要拟合模型,我们在目标上使用labelIndexer。该标签索引器通过降低频率将目标转换为索引。
ex:如果在我的目标中我有20%的“ aa”和80%的“ bb”,标签索引器将创建一个列“ label”,其列的值为“ bb”为0,“ aa”为1(因为我的“ bb”比“ aa”更常见)
当我们拟合随机森林时,概率与频率顺序相对应。
在二进制分类中: