Python代码实现xgboost进行多输出回归预测

1、导入库

from sklearn.multioutput import MultiOutputRegressor #多输出预测

import xgboost  as xgb

import  pandas  as  pd

from sklearn.metrics import r2_score #R²分数是回归模型评估中常用的指标,用于衡量模型对数据的拟合优度

from sklearn.model_selection import train_test_split #训练集和测试集划分

2、获取数据

df=pd.read_csv('XXX.txt',sep='\t')

X=df.drop(['user_id','y1','y2'],axis=1)#从数据框中删除'user_id','y1','y2'列,剩下的作为特征。

y=df[['y1','y2']]

train_X,test_X,train_y,test_y = train_test_split(X,y,test_size=0.3, random_state=4)

axis=0和axis=1

axis=0:沿着行的方向,将行与行拼接,或者计算每一列的平均值(跨行计算)。

axis=1:沿着列的方向,将列与列拼接,或者计算每一行的平均值(跨列计算)。

3、准备参数

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,            # L1正则化

    'reg_lambda': 1            # L2正则化

}

reg_alpha和reg_lambda

正则化参数,用于控制模型的复杂度,防止过拟合

reg_alpha:L1正则化项(也称为Lasso正则化)的权重。L1正则化可以将特征的系数收缩为零,因此具有特征选择的作用。如果某个特征不重要,L1正则化可能会将其系数设为0,从而在模型中被忽略。值为0表示不使用L1正则化。

reg_lambda:L2正则化项(也称为Ridge正则化)的权重。L2正则化会收缩特征的系数,但不会将其完全变为0,只是使得系数较小。这可以防止模型过于依赖任何单个特征,从而提高模型的泛化能力。默认值为1,表示使用L2正则化。


4、进行预测

multioutputregressor = MultiOutputRegressor(xgb.XGBRegressor(objective='reg:squarederror',**other_params)).fit(train_X, train_y)

check=multioutputregressor.predict(test_X)    #对测试集进行预测。

print(check)

这里使用MultiOutputRegressor包装器,内部基回归器是xgb.XGBRegressor,目标函数为回归任务中的平方误差('reg:squarederror'),并使用other_params中的参数。        然后使用训练数据(train_X, train_y)进行拟合。

相当于自动创建两个模型:一个预测 y1,一个预测 y2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值