XGBoost(eXtreme Gradient Boosting)是一种基于梯度提升框架的机器学习算法,专为高效、灵活和可扩展性设计。它通过集成多个弱学习器(通常是决策树)并优化损失函数来提升模型性能,广泛应用于分类、回归和排序任务。接下来我们用代码实操XGBoost:
1、导入数据
import numpy as np
import pandas as pd
data = pd.read_excel(r'训练数据.xlsx')
data=data.set_index(keys='id') #将数据框data中的'id'列设置为索引(index)
print(data.shape)
data.head()
data.describe()
对于数值型数据,describe() 默认返回以下统计信息:
count:非空值的数量
mean:平均值
std:标准差
min:最小值
25%:第一四分位数(25% 的数据小于等于该值)
50%:第二四分位数(中位数,50% 的数据小于等于该值)
75%:第三四分位数(75% 的数据小于等于该值)
max:最大值
如果数据包含对象(例如字符串)或分类数据,describe() 会返回不同的统计信息:
count:非空值的数量
unique:唯一值的数量
top:最常出现的值(众数)
freq:最常出现的值的频率
2、数据预处理
data.iloc[:,6:]=data.iloc[:,6:].replace(0,1)
iloc[:,6:] 表示选取所有行,以及从第6列(包括第6列,索引从0开始)到最后一列的所有列。调整系数为0可能表示无效值,用1替换(即无调整)可能是一种处理方式。
data=data.drop(data[data['E']==0].index) # 删了它
data=data.drop(data[(data['A']<0.7)|(data['A']>1.3)].index)
data=data.drop(data[(data['B']<0.7)|(data['B']>1.3)].index)
data=data.drop(data[(data['C']<0.7)|(data['C']>1.3)].index)
print(data.shape)
data.describe()
3、划分训练集
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler #用于将特征缩放到指定范围(通常为0-1)消除不同特征之间量纲和数值范围的差异。
scaler_x= MinMaxScaler(feature_range=(0,1))
# 划分训练集和测试集
X=data.iloc[:,:5]
y=data.iloc[:,5:]
print(X.shape)
print(y.shape)
.shape 是为了查看数据的维度信息
print("x 的列名:", X.columns.tolist())
print("y 的列名:", y.columns.tolist())
不算id列
X_train,X_test,y_train,y_test=train_test_split(X, y, test_size=0.2)
X_train=scaler_x.fit_transform(X_train)
X_test=scaler_x.transform(X_test)
训练集使用 fit_transform:从训练数据学习缩放参数
测试集使用 transform:使用训练集学到的参数进行转换
fit():计算数据的统计参数
对于 MinMaxScaler:计算每个特征的最小值和最大值
这些参数会保存在 scaler 对象中
transform():应用转换
使用 fit() 阶段计算出的参数,实际缩放数据
将数据转换到指定范围 [0, 1]
4、xgboost预测
import matplotlib.pyplot as plt #用于绘图
from matplotlib import rcParams #用于设置字体等图形参数。
from sklearn.metrics import mean_squared_error #均方误差
from sklearn.metrics import mean_absolute_error #平均绝对误差
from math import sqrt #用于计算平方根
from sklearn.multioutput import MultiOutputRegressor #多输出回归器
import xgboost as xgb
other_params = {'learning_rate': 0.1,
'n_estimators': 300,
'max_depth': 11,
'min_child_weight': 1,
'seed': 0,
'subsample': 1,
'colsample_bytree': 0.8,
'gamma': 0,
'reg_alpha': 0,
'reg_lambda': 1}
model =MultiOutputRegressor(xgb.XGBRegressor(objective='reg:squarederror',**other_params)).fit(X_train, y_train)
model.fit(X_train, y_train)
y_pred= model.predict(X_test)
y_pred=np.array(y_pred)
y_test=np.array(y_test)
#将预测值和测试集真实值转换为numpy数组
wucha_1=y_pred-y_test
常用代码需要在XGBClassifier中调参:
XGBoost是一个强大的机器学习库,尤其适用于表格数据。默认参数通常可以工作,但为了获得更好的性能,我们通常需要通过交叉验证来调整超参数。
#部分参数解释:
n_estimators基学习器(树)的数量,即模型要构建多少棵决策树。
作用: 控制模型复杂度:树越多,模型越复杂,学习能力越强
影响性能:值太小:模型可能欠拟合,学习不充分
值太大:可能过拟合,训练时间变长
通常与 learning_rate 配合调整: 小学习率 + 多树;大学习率 + 少树
booster='gbtree'(常用)
含义:指定使用的基学习器类型。XGBoost提供了三种基学习器:gbtree(树模型)、gblinear(线性模型)和dart(带Dropout的树模型)。
作用:这里选择gbtree的是基于树的模型,也就是我们通常使用的决策树作为基学习器。树模型可以处理非线性关系,并且对特征缩放不敏感。
如果选择gblinear,则使用线性模型,适用于线性关系的数据。dart则是树模型的一种变体,它引入了Dropout来防止过拟合。
objective='binary:logistic', # 对于二分类问题,多分类使用'multi:softmax' 或'multi:softprob'
二分类是是否问题,只有两个结果
多分类的特征:目标变量有3个或更多不同的值,预测结果在多个类别中选择
y = ['AD', 'CN', 'EMCI', 'LMCI', 'SMC'] → 5分类问题
使用 'multi:softmax',模型会直接输出类别标签(需要设置num_class参数)这里num_class=5
使用'multi:softprob' 则会输出每个类别的概率
5、评价预测系数
# 计算MSE
mse = mean_squared_error(y_test[:,0], y_pred[:,0])
print('mse',mse)
#计算RMSE均方根误差
rmse = sqrt(mean_squared_error(y_test[:,0], y_pred[:,0]))
print('rmse',rmse)
#计算MAE平均绝对误差
mae=mean_absolute_error(y_test[:,0], y_pred[:,0])
print('mae',mae)
def mape(y_true, y_pred):
return np.mean(np.abs((y_pred - y_true) / y_true)) * 100
mape=mape(y_test[:,0],y_pred[:,0])
print('mape',mape)
#画出真实值和预测值对比图
plt.figure(figsize=(20,6))
rcParams['font.sans-serif'] = 'SimHei'
plt.plot(np.array(y_test[:,0]),color="blue", linewidth=1, linestyle="-")
plt.plot(np.array(y_pred[:,0]),color="red", linewidth=1, linestyle="-.")
plt.legend(['真实值','预测值'])
plt.show()
plt.figure(figsize=(20,6))
rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
plt.hist(wucha_1[:,0],30)
plt.show()
本文介绍了XGBoost算法及的应用。通过Python代码演示了完整流程:1)数据导入与预处理;2)异常值处理;3)特征标准化;4)构建XGBoost多输出回归模型;5)模型评估。重点分析了XGBoost参数调优方法,并展示了预测结果的可视化对比。


2万+

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



