MultiOutputClassifier仅返回学习数据

2024-04-18 14:02:34 发布

您现在位置:Python中文网/ 问答频道 /正文

正如标题所说,我正在测试python MultiOutputClassifier,以解决一个需要确定坐标(x,y)作为输出的问题,给定3个输入,它只返回最接近的学习值,而不是“外推”值作为预测

我的示例代码如下:

import numpy as np
from sklearn.ensemble import RandomForestClassifier
from sklearn.multioutput import MultiOutputClassifier

train_data = np.array([
[-30,-60,-90,0,0],
[-50,-50,-50,10,0],
[-90,-60,-30,20,0],
[-50,-50,-95,0,10],
[-60,-30,-60,10,10],
[-95,-50,-50,20,10],
])
# These I just made up
test_data_x = np.array([
  [-35,-50,-90],
])

x = train_data[:, :3]
y = train_data[:, 3:]
forest = RandomForestClassifier(n_estimators=100, random_state=1)
classifier = MultiOutputClassifier(forest, n_jobs=-1)
classifier.fit(x,y)
print classifier.predict(test_data_x)

这返回0,10,但我希望对于给定的输入,输出应该是5,5;介于两个习得值之间

我发现有些事情我做错了,或者我误解了。在这个问题上有什么帮助吗?是不是多输出分类器不是正确的东西


1条回答
网友
1楼 · 发布于 2024-04-18 14:02:34

这里的问题是(随机森林)分类器不会外推。它只能输出已经看到的值。您可能需要使用回归器

将代码中的“分类器”替换为“回归器”将产生(0.8,5.8)作为输出,这似乎更接近您的预期

import numpy as np
from sklearn.ensemble import RandomForestRegressor
from sklearn.multioutput import MultiOutputRegressor

train_data = np.array([
    [-30,-60,-90,0,0],
    [-50,-50,-50,10,0],
    [-90,-60,-30,20,0],
    [-50,-50,-95,0,10],
    [-60,-30,-60,10,10],
    [-95,-50,-50,20,10],
])

test_data_x = np.array([
    [-35,-50,-90],
])

x = train_data[:, :3]
y = train_data[:, 3:]
forest = RandomForestRegressor(n_estimators=100, random_state=1)
classifier = MultiOutputRegressor(forest, n_jobs=-1)
classifier.fit(x,y)
print(classifier.predict(test_data_x))

相关问题 更多 >