首页 / 算法 / XGBoost算法分析与案例调参实例
XGBoost算法分析与案例调参实例
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了XGBoost算法分析与案例调参实例,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3517字,纯文字阅读大概需要6分钟。
内容图文
![XGBoost算法分析与案例调参实例](/upload/InfoBanner/zyjiaocheng/590/da1625bd2f4d4ecfbcffe230fcf3089a.jpg)
1 XGBoost原理
XGBoost是陈天奇等人开发的一个开源机器学习项目,高效地实现了GBDT算法并进行了算法和工程上的许多改进,被广泛应用在Kaggle竞赛及其他许多机器学习竞赛中并取得了不错的成绩。XGBoost本质上还是一个GBDT,但是力争把速度和效率发挥到极致,所以叫X(Extreme) GBoosted,包括前面说过,两者都是boosting方法。XGBoost是一个优化的分布式梯度增强库,旨在实现高效,灵活和便携。它在Gradient Boosting框架下实现机器学习算法。 XGBoost提供了并行树提升(也称为GBDT,GBM),可以快速准确地解决许多数据科学问题。 相同的代码在主要的分布式环境(Hadoop,SGE,MPI)上运行,并且可以解决超过数十亿个样例的问题。XGBoost利用了核外计算并且能够使数据科学家在一个主机上处理数亿的样本数据。最终,将这些技术进行结合来做一个端到端的系统以最少的集群系统来扩展到更大的数据集上。Xgboost以CART决策树为子模型,通过Gradient Tree Boosting实现多棵CART树的集成学习,得到最终模型。
2 XGBoost代码实现
import pandas as pd
import matplotlib.pyplot as plt
import xgboost as xgb
import numpy as np
from xgboost import plot_importance
data = pd.read_excel('./final_data_all.xlsx', index_col=u'年份')
# 对行业这一特征使用LabelEncoder编码
from sklearn.preprocessing import LabelEncoder
X_industy = data[['行业']]
le = LabelEncoder()
le = le.fit(X_industy)
label = le.transform(X_industy)
data[['行业']] = label
data = data[['利润总额_3', '利润总额_2', '利润总额_1', '销售净利率_3', '归属母公司股东的权益/负债合计_2', '销售净利率_2', '价值变动净收益/利润总额_1',
'扣除非经常损益后的净利润/净利润_3', '销售净利率_1', '价值变动净收益/利润总额_3', '总资产周转率_1', '总资产周转率_2', '权益乘数_3',
'价值变动净收益/利润总额_2', '总资产收益率ROA_3', '产权比率_2', '归属母公司股东的权益/负债合计_3', '经营活动净利润/利润总额_3', '资产负债率_1',
'营业外收支净额/利润总额_3', '扣除非经常损益后的净利润/净利润_1', '资产负债率_3', '净资产收益率ROE_2', '营业外收支净额/利润总额_2', '总资产收益率ROA_2',
'经营活动净利润/利润总额_2', '总资产周转率_3', '经营活动净利润/利润总额_1', '资产负债率_2', '权益乘数_2', '总资产收益率ROA_1', '经营活动产生的现金流量净额/负债合计_1',
'扣除非经常损益后的净利润/净利润_2', '净资产收益率ROE_3', '行业', '净资产收益率ROE_1', '经营活动产生的现金流量净额/负债合计_2', '营业外收支净额/利润总额_1', '产权比率_3',
'非流动负债/负债合计_1', '非流动资产/总资产_1', '应收账款周转率_3', '产权比率_1', '流动资产周转率_1', '经营活动产生的现金流量净额/负债合计_3', '应收账款周转率_1', '流动比率_2',
'非流动资产/总资产_3', '固定资产周转率_2', '流动资产周转率_3', '流动比率_3', '销售毛利率_3', '息税摊销前利润/负债合计_3', '非流动负债/负债合计_3', '销售毛利率_2', '固定资产周转率_1',
'已获利息倍数_3', '归属母公司股东的权益/负债合计_1', '流动负债/负债合计_1', '流动资产/总资产_1', '利润总额']]
data['利润总额'] = (data['利润总额']-data['利润总额'].mean())/(data['利润总额'].std())
from sklearn.preprocessing import MinMaxScaler
# 测试集与训练集的划分2014-2018年为训练集 2019年数据为训练集
split_date = 2016
# 训练集数据 12735条
# !!!注一个重要的点,最大最小化之后有明显变化
train_data = data.loc[data.index < split_date].copy()
X_train_data = train_data.drop(['利润总额'], axis=1)
y_train_data = train_data[['利润总额']]
print(X_train_data.shape)
# 测试集数据 2547条
test_data = data.loc[data.index == split_date].copy()
X_test_data = test_data.drop(['利润总额'], axis=1)
y_test_data = test_data[['利润总额']]
print(X_test_data.shape)
for i in range(0, 10):
averge_err = 0
# xgboost模型
xgb_reg = xgb.XGBRegressor()
xgb_reg.fit(X_train_data, y_train_data)
y_pred = xgb_reg.predict(X_test_data)
averge_err += abs(y_pred.sum() / y_test_data.sum() - 1)
print("相对误差: ", averge_err/10)
内容总结
以上是互联网集市为您收集整理的XGBoost算法分析与案例调参实例全部内容,希望文章能够帮你解决XGBoost算法分析与案例调参实例所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。