Python机器学习--集成学习--XGBoost算法

XGBoost算法类型:

XGBoost算法:属于集成学习算法 ,与随机森林类似,也由多颗决策树组成
XGBoost算法既可以解决分类问题,也可以解决回归问题。
后一棵树是在前一个树的基础上生成的
后一棵树只需要拟合前K棵树和真实结果之间的误差
误差可以用负梯度表示;因此可叫 梯度提升树
XGboost是计算一阶导数和二阶导数,因此又称为 极端梯度提升树

集成学习算法

集成学习算法是通过训练多个学习器,然后把这些学习器组合起来,以达到更好的预测性能的目的。

集成学习算法的分类:

  1. Bagging:弱学习器的生成没有先后顺序,可以进行并行训练,如果是分类任务,则预测结果为多个弱学习器的预测结果取众数,如果是回归任务,则预测结果会取多个学习器的平均值。
  2. Boosting:弱学习器的生成有先后顺序,后一个弱学习器是之前学习器的基础上训练的,预测结果为多个弱学习器预测结果之和

极端梯度提升树

xgboost算法属于集成学习中的boosting类,又叫极端梯度提升树,是基于GBDT做的改进,但是基于的树模型都是回归树,因为回归树会计算出一个具体的值,这样才能比较真实结果和预测结果相差多少,在进行下一次的训练。

训练过程:一个模型一个模型串行训练
测试过程:一个样本输入,并行预测,预测结果相加,即可获得最终结果

XGBoost原理计算

如何构建每个棵树,从目标函数推导开始找到分裂标准

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_iris

plt.rcParams["font.sans-serif"] = "SimHei"  # 设置支持中文字体
# matplotlib本身支持负号显示的。增加了支持中文显示,负号不能正常显示
plt.rcParams['axes.unicode_minus'] = False

x, 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")

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

轻窕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值