使用 sklearn 同时预测字段

Simultaneously predict fields with sklearn

我想同时预测 class A、B、C、D 和 0 的总体积和体积。 是否可以使用以下代码执行此操作?我是否必须在数据集中添加一个包含我预测内容的字段?

import pandas as pd

dataset = pd.read_csv('dataAnalysis/data/featureEngineering/data.csv')

X = dataset.iloc[:, 0:20].values
y = dataset.iloc[:, 21:26].values
# 21 - 'VOLUME_CLASSE_A'
# 22 - 'VOLUME_CLASSE_B'
# 23 - 'VOLUME_CLASSE_C'
# 24 - 'VOLUME_CLASSE_D'
# 25 - 'VOLUME_CLASSE_0'
# 26 - 'TOTAL_VOLUME'

X_train, X_test, y_train, y_test = sklearn.model_selection.train_test_split(X, y, test_size = 0.2, random_state=1)

regressor = RandomForestRegressor(n_estimators = 10, random_state = 0)
regressor.fit(X_train, y_train)
test_predictions = regressor.predict(X_test)

是的,可以使用下面的代码执行此操作,因为 RandomForestRegressor 支持多输出。如果您想尝试不支持多输出的不同模型,您应该使用 sklearn multioutput 中的 MultiOutputRegressorRegressorChain

简而言之,MultiOutputRegressor 为每个输出变量拟合一个模型,RegressorChain 为每个输出变量拟合一个模型,但它也使用以前的模型输出作为输入,这就是为什么它被称为 。以下是关于如何使用这两种策略的快速演示:

from sklearn.datasets import load_linnerud
from sklearn.multioutput import MultiOutputRegressor, RegressorChain
from sklearn.linear_model import Ridge

X, y = load_linnerud(return_X_y=True)

# MultiOutputRegressor
multi= MultiOutputRegressor(Ridge(random_state=123))
multi.fit(X, y)

# RegressorChain
# Starting with the second output variable, then first then third
re = RegressorChain(base_estimator=Ridge(random_state=123), order=[1,0,2])
re.fit(X,y)

您可以找到支持多输出的型号列表和更多信息here