我想同时预测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)
是的,使用下面的代码可以做到这一点,因为RandomForestProgsor支持多输出。如果你想尝试不支持多输出的不同型号,你应该使用sklearn multioutput中的MultiOutputRegressor
或RegressorChain
。
简而言之,MultiOutputRegressor
为每个输出变量拟合一个模型,RegressorChain
为每一个输出变量拟合模型,但它也使用以前的模型输出作为输入,这就是为什么它被称为Chain。以下是关于如何使用这两种策略的快速演示:
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)
您可以在这里找到支持多输出的型号列表和更多信息