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

XGBoost算法

XGBoost算法类型:

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

集成学习算法

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

集成学习算法的分类:
Bagging:弱学习器的生成没有先后顺序,可以进行并行训练,如果是分类任务,则预测结果为多个弱学习器的预测结果取众数,如果是回归任务,则预测结果会取多个学习器的平均值。

Boosting:弱学习器的生成有先后顺序,后一个弱学习器是之前学习器的基础上训练的,预测结果为多个弱学习器预测结果之和。

极端梯度提升树

在这里插入图片描述

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

猜你喜欢

转载自blog.csdn.net/qq_43944517/article/details/120025883