Python机器学习基础与进阶|Python机器学习--集成学习算法--XGBoost算法

XGBoost算法 XGBoost算法类型:
XGBoost算法:属于集成学习算法 ,与随机森林类似,也由多颗决策树组成
XGBoost算法既可以解决分类问题,也可以解决回归问题。
后一棵树是在前一个树的基础上生成的
后一棵树只需要拟合前K棵树和真实结果之间的误差
误差可以用负梯度表示;因此可叫 梯度提升树
XGboost是计算一阶导数和二阶导数,因此又称为 极端梯度提升树
集成学习算法 集成学习算法是通过训练多个学习器,然后把这些学习器组合起来,以达到更好的预测性能的目的。
集成学习算法的分类:
Bagging:弱学习器的生成没有先后顺序,可以进行并行训练,如果是分类任务,则预测结果为多个弱学习器的预测结果取众数,如果是回归任务,则预测结果会取多个学习器的平均值。
Boosting:弱学习器的生成有先后顺序,后一个弱学习器是之前学习器的基础上训练的,预测结果为多个弱学习器预测结果之和。
极端梯度提升树 Python机器学习基础与进阶|Python机器学习--集成学习算法--XGBoost算法
文章图片

XGBoost原理
如何构建每个棵树,从目标函数推导开始找到分裂标准
Python机器学习基础与进阶|Python机器学习--集成学习算法--XGBoost算法
文章图片

Python机器学习基础与进阶|Python机器学习--集成学习算法--XGBoost算法
文章图片

XGBoost算法特点

  • 算法的性能好
  • 算法的时间慢
    【Python机器学习基础与进阶|Python机器学习--集成学习算法--XGBoost算法】以时间和空间 换 效果
XGBoost算法基于sklearn实现
# 安装 pip install xgboost from xgboost import XGBClassifier# 分类 from xgboost import XGBRegressor# 回归 import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split from xgboost import plot_tree from xgboost import to_graphviz# 导出dot文件from sklearn.datasets import load_irisplt.rcParams["font.sans-serif"] = "SimHei"# 设置支持中文字体 # matplotlib本身支持负号显示的。增加了支持中文显示,负号不能正常显示 plt.rcParams['axes.unicode_minus'] = Falsex, y = load_iris(return_X_y=True) out = load_iris() f_name = out.feature_names print("特征名称\n", f_name)X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.2, stratify=y, random_state=1 )# 实例化 xgb = XGBClassifier(use_label_encoder=False,eval_metric='mlogloss')xgb.fit(X_train, y_train)acc = xgb.score(X_test, y_test)print("准确率", acc) print("训练集准确率", xgb.score(X_train, y_train))# xgboost的自带的显示树不支持中文 # plot_tree(xgb, num_trees=0, fmap='iris2.fmap')# 第1棵树 # plt.show()# plt.scatter(x[:,-2], x[:,-1], c=y) # plt.show()# 如果要显示中文,先输出为dot文件 out = to_graphviz(xgb, fmap='iris2.fmap', num_trees=0) out.render("iris.dot")

    推荐阅读