无法理解scikit随机森林的输出

时间:2013-01-08 02:39:17

标签: python machine-learning scikit-learn random-forest

假设我有这样的数据集:

5.9;0.645;0.12;2;0.075;32;44;0.99547;3.57;0.71;10.2;5
6;0.31;0.47;3.6;0.067;18;42;0.99549;3.39;0.66;11;6

其中前11列表示特征(酸度,氯化物等),最后一列表示给予项目的评级(例如5或6)

因此训练数据集:

target = [x[11] for x in dataset]
train = [x[0:11] for x in dataset]

rf = RandomForestClassifier(n_estimators=120, n_jobs=-1)
rf.fit(train, target)

predictions = rf.predict_proba(testdataset)
print predictions[0] 

打印类似

的内容
[ 0.          0.01666667  0.98333333  0.          0.          0.        ]

现在,为什么不输出单个分类,例如5或6等级?

文档说“输入样本的预测类概率被计算为森林中树木的平均预测类概率”,我无法理解。

如果您使用

print rf.predict(testdataset[-1])
[ 6.  6.  6.  6.  6.  6.  6.  6.  6.  6.  6.]

它打印的内容更像你期望的 - 至少它看起来像收视率 - 但我仍然不明白为什么每个功能有一个预测而不考虑所有功能的单个预测?

2 个答案:

答案 0 :(得分:9)

除了迭戈的回答:

RandomForestClassifier是一个分类器,用于预测离散数量的类的类分配,而无需在类标签之间进行排序。

如果要输出连续浮点评级,则应尝试使用回归模型,例如RandomForestRegressor

您可能必须将输出钳位到范围[0,6],因为没有保证模型不会输出预测,例如6.2

修改以回答第二点,predict方法需要一个样本列表。因此,您应该在案例中为其提供一个样本列表。尝试:

print rf.predict([testdataset[-1]])

或者:

print rf.predict(testdataset[-1:])

我想知道为什么在这种情况下你没有收到错误。

修改:输出没有意义:数据集的形状是什么?

>>> print np.asarray(train).shape

>>> print np.asarray(target).shape

>>> print np.asarray(testdataset).shape

答案 1 :(得分:3)

从文档中,predict_proba返回:

     p:shape数组= [n_samples,n_classes]或n_outputs列表      如果n_outputs>这样的数组1.输入样本的类概率。      类按照算术顺序排序。

这里的关键是最后一句“ 类按算术顺序排序 ”。 我的猜测是你的一些训练样本有一个小于5的类,predict_proba分配概率为零,而类5和6分别有概率0.01666667和0.98333333,而另外3个类,全部> 6,也有概率为零。