xgboost进行多输出回归预测

如果我们需要用到多个维度的预测,也就是需要预测 很多个变量的时候

又不想训练很多次xg(假设有一个待预测标签就训练一次),因为 这样代码看起来也很繁琐

我们可以使用sklearn来 完成。

sklearn提供了一个包装类MultiOutputRegressor,这里我使用的xgboost进行预测。

思路很简单,其实就是根据标签依次进行预测。

代码如下:

from sklearn.multioutput import MultiOutputRegressor
import xgboost  as xgb
import  pandas  as  pd
from sklearn.metrics import r2_score
from sklearn.model_selection import train_test_split

#获取数据
df=pd.read_csv('XXX.txt',sep='\t')
X=df.drop(['user_id','y1','y2'],axis=1)
y=df[['y1','y2']]
train_X,test_X,train_y,test_y = train_test_split(X,y,test_size=0.3, random_state=4)
#准备参数
other_params = {'learning_rate': 0.1, 'n_estimators': 300, 'max_depth': 5, 'min_child_weight': 1, 'seed': 0, 'subsample': 0.8, 'colsample_bytree': 0.8, 'gamma': 0, 'reg_alpha': 0, 'reg_lambda': 1}
multioutputregressor = MultiOutputRegressor(xgb.XGBRegressor(objective='reg:squarederror',**other_params)).fit(train_X, train_y)
check=multioutputregressor.predict(test_X)
print(check)

可以看到,这里的代码仅仅使用两个y(y1,y2),要是根据我们不同的需求,我们可以使用很多个y就可以,比如(y1,y2,y3,...,yn)

你可能感兴趣的:(Python)