Sof*_*fia 5 python machine-learning random-forest scikit-learn
假设我有这样的数据集:
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
Run Code Online (Sandbox Code Playgroud)
其中前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]
Run Code Online (Sandbox Code Playgroud)
打印出类似的东西
[ 0. 0.01666667 0.98333333 0. 0. 0. ]
Run Code Online (Sandbox Code Playgroud)
现在,为什么它不输出单个分类,例如5或6等级?
文档说"输入样本的预测类概率被计算为森林中树木的平均预测类概率",我很难理解.
如果你使用
print rf.predict(testdataset[-1])
[ 6. 6. 6. 6. 6. 6. 6. 6. 6. 6. 6.]
Run Code Online (Sandbox Code Playgroud)
它打印的内容更像你期望的 - 至少它看起来像收视率 - 但我仍然不明白为什么每个功能都有预测而不考虑所有功能的单一预测?
除了迭戈的回答:
RandomForestClassifier 是一个分类器,用于预测离散数量的类的类分配,而无需在类标签之间进行排序.
如果要输出连续浮点额定值,则应尝试使用回归模型,例如RandomForestRegressor.
您可能必须将输出钳位到范围[0,6],因为没有保证模型不会输出预测6.2,例如.
编辑以回答第二点,该predict方法需要一个样本列表.因此,您应该在案例中为其提供一个样本列表.尝试:
print rf.predict([testdataset[-1]])
Run Code Online (Sandbox Code Playgroud)
或者:
print rf.predict(testdataset[-1:])
Run Code Online (Sandbox Code Playgroud)
我想知道为什么你不会在这种情况下得到错误.
编辑:输出没有意义:数据集的形状是什么?
>>> print np.asarray(train).shape
>>> print np.asarray(target).shape
>>> print np.asarray(testdataset).shape
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4679 次 |
| 最近记录: |