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

1万+

被折叠的 条评论
为什么被折叠?



