5

假设我有一个这样的数据集:

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.]

它打印的东西更像你所期望的——至少它看起来像评级——但我仍然不明白为什么每个特征都有一个预测,而不是考虑到所有特征的单一预测?

4

2 回答 2

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
于 2013-01-08T10:07:22.833 回答
3

从文档中,predict_proba返回:

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

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

于 2013-01-08T02:51:04.877 回答