【问题标题】:Trouble understanding output from scikit random forest无法理解 scikit 随机森林的输出
【发布时间】:2012-12-21 20:36:39
【问题描述】:

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

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

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

【问题讨论】:

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


【解决方案1】:

除了迭戈的回答:

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

【讨论】:

  • 我现在在上班。稍后我会回复,但这里有一篇探索相同数据集的帖子:fastml.com/predicting-wine-quality
  • 我确实有一个错误,因此使用 rf.predict([test[-1]]) 现在输出 [6.] 的合理结果。关于这里的形状,它们是:np.asarray(target).shape -> (1597,), np.asarray(train).shape -> (1597, 11), np.asarray(test).shape -> (1599 , 11)。他们应该是吗?
  • 奇怪的是您没有收到有意义的错误消息。 predict 方法中的形状检查可能过于宽松。
  • 是的,这会很有帮助。感谢您的帮助!
【解决方案2】:

从文档中,predict_proba 返回:

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

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

【讨论】:

  • 嗨,评分从 3 到 8。所以据我了解,predict_proba 正在输出每个评分的概率列表,因此在给出的示例中 [ 0. 0.01666667 0.98333333 0. 0. 0 . ] 最有可能的评级是 5,概率为 0.983。现在更清楚了,谢谢:)
猜你喜欢
  • 2013-02-06
  • 2013-04-26
  • 2015-03-28
  • 2015-09-17
  • 2014-02-20
  • 2021-09-03
  • 2016-11-03
  • 2015-09-28
  • 2017-08-25
相关资源
最近更新 更多