无备案网站加速,吕梁市住房与城乡建设厅网站,公网信息发布渠道是什么,信息流广告投放摘要 XGBoost算法#xff08;eXtreme Gradient Boosting#xff09;在目前的Kaggle、数学建模和大数据应用等竞赛中非常流行。本文将会从XGBOOST算法原理、Python实现、敏感性分析和实际应用进行详细说明。
目录
0 绪论
一、材料准备
二、算法原理
三、算法Python实现 3…摘要 XGBoost算法eXtreme Gradient Boosting在目前的Kaggle、数学建模和大数据应用等竞赛中非常流行。本文将会从XGBOOST算法原理、Python实现、敏感性分析和实际应用进行详细说明。
目录
0 绪论
一、材料准备
二、算法原理
三、算法Python实现 3.1 数据加载 3.2 将目标变量的定类数据分类编码 3.3 将数据分为训练数据和测试数据 3.4训练XGBOOST模型 3.5 测试模型 3.6 输出模型的预测混淆矩阵结果矩阵 3.7 输出模型准确率 3.8 绘制混淆矩阵图 3.9 完整实现代码 3.10 结果输出示例
四、 XGBOOST算法的敏感性分析和实际应用 4.1 敏感性分析 4.2 算法应用
五、结论
六、备注 0 绪论 数据挖掘和数学建模等比赛中除了算法的实现还需要对数据进行较为合理的预处理包括缺失值处理、异常值处理、定类数据特征编码和冗余特征的删除等等本文默认读者的数据均已完成数据预处理如有需要后续会将数据预处理的方法也进行发布。
一、材料准备 Python编译器Pycharm社区版或个人版等 训练数据集此处使用2022年数维杯国际大学生数学建模竞赛C题的附件数据为例。 数据处理经过初步数据清洗和相关性分析等操作得到初步的特征并利用决策树进行特征重要性分析完成二次特征降维得到CDRSB_bl, PIB_bl, FBB_bl三个自变量特征DX_bl为分类特征。 二、算法原理 XGBOOST算法基于决策树的集成方法主要采用了Boosting的思想是Gradient Boosting算法的扩展并使用梯度提升技术来提高模型的准确性和泛化能力。 首先将基分类器层层叠加然后每一层在训练的时候对前一层基分类器分错的样本给予更高的权重XGBOOST的目标函数为 (1) 其中为损失函数为正则项用于控制树的复杂度为常数项为新树的预测值它是将树的个数的结果进行求和。
三、算法Python实现
3.1 数据加载 此处导入本文所需数据DataX为自变量数据DataY为目标变量数据DX_bl。
import pandas as pd
X pd.DataFrame(pd.read_excel(DataX.xlsx)).values # 输入特征
y pd.DataFrame(pd.read_excel(DataY.xlsx)).values # 目标变量 3.2 将目标变量的定类数据分类编码
此处仅用0-4来代替五类数据因为此处仅做预测并不涉及相关性分析等其他操作所以普通的分类编码就可以。如果需要用来做相关性分析或其他计算型操作建议使用独热编码OneHot- Encoding。
from sklearn.preprocessing import LabelEncoder
le LabelEncoder()
y le.fit_transform(y)
label_mapping {0: AD, 1: CN, 2: EMCI, 3: LMCI, 4: SMC}
#此处为了后续输出混淆矩阵时用原始数据输出 3.3 将数据分为训练数据和测试数据 本文将原始样本数据通过随机洗牌并将70%的样本数据作为训练数据30%的样本数据作为测试数据。这是一个较为常见的拆分方法读者可通过不同的拆分测试最佳准确率和F1-score。
from sklearn.model_selection import train_test_split
# 将数据分为训练数据和测试数据
X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.3, train_size0.7, random_state42) 3.4训练XGBOOST模型 基于70%的样本数据进行训练建模python有XGBOOST算法的库所以很方便就可以调用。
import xgboost as xgb
# 训练XGBoost分类器
model xgb.XGBClassifier()
model.fit(X_train, y_train)
#xgb.plot_tree(model) 3.5 测试模型 利用另外的30%样本数据进行测试模型准确率、精确率、召回率和F1度量值。
# 使用测试数据预测类别
y_pred model.predict(X_test) 3.6 输出模型的预测混淆矩阵结果矩阵 此处输出混淆矩阵的方法和之前的随机森林、KNN算法都有点不同因为随机森拉算法不需要将定类数据进行分类编码就可以直接调用随机森林算法模型。
from sklearn.metrics import confusion_matrix, classification_report, accuracy_score
cm confusion_matrix(y_test, y_pred)
# 输出混淆矩阵
for i, true_label in enumerate(label_mapping.values()):row for j, pred_label in enumerate(label_mapping.values()):row f{cm[i, j]} ({pred_label})\tprint(f{row} | {true_label})# 输出混淆矩阵
print(classification_report(y_test, y_pred,target_names[AD, CN, EMCI, LMCI, SMC])) # 输出混淆矩阵 3.7 输出模型准确率
#此处的导库在上一个代码段中已引入
print(Accuracy:)
print(accuracy_score(y_test, y_pred)) 3.8 绘制混淆矩阵图 将混淆矩阵结果图绘制并输出可以将这一结果图放在论文中提升论文美感和信服度。
import matplotlib.pyplot as plt
import numpy as np
label_names [AD, CN, EMCI, LMCI, SMC]
cm confusion_matrix(y_test, y_pred)# 绘制混淆矩阵图
fig, ax plt.subplots()
im ax.imshow(cm, interpolationnearest, cmapplt.cm.Blues)
ax.figure.colorbar(im, axax)
ax.set(xticksnp.arange(cm.shape[1]),yticksnp.arange(cm.shape[0]),xticklabelslabel_names, yticklabelslabel_names,titleConfusion matrix,ylabelTrue label,xlabelPredicted label)# 在矩阵图中显示数字标签
thresh cm.max() / 2.
for i in range(cm.shape[0]):for j in range(cm.shape[1]):ax.text(j, i, format(cm[i, j], d),hacenter, vacenter,colorwhite if cm[i, j] thresh else black)fig.tight_layout()
#plt.show()
plt.savefig(XGBoost_Conclusion.png, dpi300) 上面的代码首先计算混淆矩阵然后使用 matplotlib 库中的 imshow 函数将混淆矩阵可视化最后通过 text 函数在混淆矩阵上添加数字并使用 show/savefig 函数显示图像结果输出如图3.1所示。 图3.1 混淆矩阵结果图 3.9 完整实现代码
# 导入需要的库
from sklearn.preprocessing import LabelEncoder
import matplotlib.pyplot as plt
import pandas as pd
import xgboost as xgb
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix, classification_report, accuracy_score
import numpy as nple LabelEncoder()
label_mapping {0: AD, 1: CN, 2: EMCI, 3: LMCI, 4: SMC}
X pd.DataFrame(pd.read_excel(DataX.xlsx)).values # 输入特征
y pd.DataFrame(pd.read_excel(DataY.xlsx)).values # 目标变量
y le.fit_transform(y)
# 将数据分为训练数据和测试数据
X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.3, train_size0.7, random_state42)
# 训练XGBoost分类器
model xgb.XGBClassifier()
model.fit(X_train, y_train)
#xgb.plot_tree(model)
# 使用测试数据预测类别
y_pred model.predict(X_test)
cm confusion_matrix(y_test, y_pred)
# 输出混淆矩阵
for i, true_label in enumerate(label_mapping.values()):row for j, pred_label in enumerate(label_mapping.values()):row f{cm[i, j]} ({pred_label})\tprint(f{row} | {true_label})# 输出混淆矩阵
print(classification_report(y_test, y_pred,target_names[AD, CN, EMCI, LMCI, SMC])) # 输出混淆矩阵
print(Accuracy:)
print(accuracy_score(y_test, y_pred))# label_names 是分类变量的取值名称列表
label_names [AD, CN, EMCI, LMCI, SMC]
cm confusion_matrix(y_test, y_pred)# 绘制混淆矩阵图
fig, ax plt.subplots()
im ax.imshow(cm, interpolationnearest, cmapplt.cm.Blues)
ax.figure.colorbar(im, axax)
ax.set(xticksnp.arange(cm.shape[1]),yticksnp.arange(cm.shape[0]),xticklabelslabel_names, yticklabelslabel_names,titleConfusion matrix,ylabelTrue label,xlabelPredicted label)# 在矩阵图中显示数字标签
thresh cm.max() / 2.
for i in range(cm.shape[0]):for j in range(cm.shape[1]):ax.text(j, i, format(cm[i, j], d),hacenter, vacenter,colorwhite if cm[i, j] thresh else black)fig.tight_layout()
#plt.show()
plt.savefig(XGBoost_Conclusion.png, dpi300)
# 上面的代码首先计算混淆矩阵然后使用 matplotlib 库中的 imshow 函数将混淆矩阵可视化最后通过 text 函数在混淆矩阵上添加数字并使用 show/savefig 函数显示图像。 3.10 结果输出示例 图3.2 结果输出示例
四、 XGBOOST算法的敏感性分析和实际应用 4.1 敏感性分析 敏感性分析也叫做稳定性分析可以基于统计学思想通过百次测试记录其准确率、精确率、召回率和F1-Score的数据统计其中位数、平均值、最大值和最小值等数据从而进行对应的敏感性分析。结果表明符合原模型成立则通过了敏感性分析。前面的随机森林算法和KNN算法也是如此。 4.2 算法应用 XGBOOST算法可应用于大数据分析、预测等方面尤其是大数据竞赛Kaggle、阿里天池等竞赛中特别常用也是本人目前认为最好用的一个算法。
五、结论 本文基于XGBOOST算法从数据预处理、算法原理、算法实现、敏感性分析和算法应用都做了具体的分析可适用于大部分机器学习算法初学者。
六、备注 本文为原创文章禁止转载违者必究。如需原始数据可点赞收藏然后私聊作者或在评论区中留下你的邮箱即可获得训练数据一份。