xgboost算法教程(两种使用方法)
标签: xgboost
作者:炼己者
欢迎大家访问我的简书以及我的博客
本博客所有内容以学习、研究和分享为主,如需转载,请联系本人,标明作者和出处,并且是非商业用途,谢谢!
大家如果感觉格式看着别扭的话,也可以去我的简书里看,这里面markdown的编辑效果不错
1.摘要
- xgboost 是个很棒的算法,基本上遇到分类问题,都会先拿xgboost跑一跑,因为它的效果是很好的。此算法源自陈天奇大佬,它的原理我就不多说了,可以去看大神的论文。
- 本文主要介绍xgboost算法的实现。xgboost算法有两种方法可以实现,第一种就是调用sklearn库,第二种就是网上下载的xgboost包。
2.操作思路
(1)调用sklearn库的xgboost算法来进行文本分类
- 第一步:把文本转为TFIDF向量
这里面就涉及到了文本的预处理了,有很多操作,套路是固定的。比如去停用词,去掉一些指定的奇怪符号,分词等操作。详情大家可以看这篇文章——中文文本的预处理 。对于怎么用sklearn库将文本转为TFIDF向量,大家可以看这篇文章——使用不同的方法计算TF-IDF值
- 第二步:调用sklearn的xgboost算法
from xgboost import XGBClassifier
xgbc = XGBClassifier()
xgbc.fit(X_train, y_train)
X_train, y_train数据格式符合sklearn的要求即可,这里不再赘述,其实直接调用sklearn计算tfidf的方法就可以了
(2)调用xgboost库来进行文本分类
首先下载xgboost算法包,从下面这个网址就可以找到windows版本的了
https://www.lfd.uci.edu/~gohlke/pythonlibs/
看了网上很多文章,好多都不直截了当地把数据给你看,竟说一些虚的。你不知道这个算法包所要求的数据格式,那该怎么操作。
所以我们首先看一下xgboost算法包所要求的数据格式
-1 3367:0.5103014996095588 58258:0.7395069334859974 2027:0.43900099637970286 100000:0
-1 4:1.0 100000:0
-1 415:0.6398192123775941 1519:0.4588776849973563 416:0.3584690940979446 1793:0.40344923876987276 181:0.2979786334564799 100000:0
-1 100000:0
-1 1198:0.40847247591945973 2696:0.3283454215475906 4177:0.44923012253203026 5138:0.5667874369451246 793:0.322578190068597 89:0.3134120772849428 100000:0
-1 5723:0.7442708333186842 11957:0.667877927971206 100000:0
-1 1242:0.291656345459087 1042:0.5230367071957044 867:0.201093108317622 4653:0.12886942653591874 1677:0.11557567851702705 401:0.09045277190046198 1418:0.37780570665526336 23187:0.17435885282574362 19413:0.18153924925026366 47353:0.21588503167788953 26486:0.1776484644780567 140:0.06556371798587017 3552:0.3134346764736389 9923:0.14897284990847234 4235:0.1400130703981178 10074:0.201093108317622 5003:0.1400130703981178 477:0.059368723610437456 3138:0.12432562118943459 18158:0.19244038783832423 11634:0.13464996157113307 100000:0
-1 4009:0.25082607952773406 2565:0.23419907434673645 1804:0.3433315414553655 17453:0.45143782878931465 5423:0.3564658009755151 19011:0.4717358825927435 3323:0.3780312936247865 4965:0.26087188739580747 100000:0
-1 22:0.1587631734435183 412:0.1300669379236184 413:0.22962362689914045 414:0.9071773544857186 181:0.15109135553114256 415:0.16221155015652758 416:0.1817633053585686 100000:0
-1 1384:0.7633678190724622 1:0.6459640646387018 100000:0
-1 2:0.6671390512446658 4915:0.7449332092908513 100000:0
每一行表示一个样本,我们用第一行举例,开头的“-1”是样本的类别(也就是标签)。剩下的数据比如这个,"3367:0.5103014996095588",左边的3367是指词的ID值,右边就是TFIDF值。是不是感觉很眼熟,没错,用gensim库计算的TFIDF值就可以得到这种格式。
还是看那篇文章——使用不同的方法计算TF-IDF值
给大家看一下用gensim得到TFIDF的格式
[[(0, 0.33699829595119235),
(1, 0.8119707171924228),
(2, 0.33699829595119235),
(4, 0.33699829595119235)],
[(0, 0.10212329019650272),
(2, 0.10212329019650272),
(4, 0.10212329019650272),
(5, 0.9842319344536239)],
[(6, 0.5773502691896258), (7, 0.5773502691896258), (8, 0.5773502691896258)],
[(0, 0.33699829595119235),
(1, 0.8119707171924228),
(2, 0.33699829595119235),
(4, 0.33699829595119235)]]
所以接下来把用gensim训练得到的TFIDF向量转为我们需要的数据格式即可
我在这里写个示例代码,大家仿照着做即可,至于标签的写入仿照着来就行
a = [[(0, 0.33699829595119235),
(1, 0.8119707171924228),
(2, 0.33699829595119235),
(4, 0.33699829595119235)],
[(0, 0.10212329019650272),
(2, 0.10212329019650272),
(4, 0.10212329019650272),
(5, 0.9842319344536239)],
[(6, 0.5773502691896258), (7, 0.5773502691896258), (8, 0.5773502691896258)],
[(0, 0.33699829595119235),
(1, 0.8119707171924228),
(2, 0.33699829595119235),
(4, 0.33699829595119235)]]
with open('test.txt','w',encoding='utf-8') as fw:
for i in range(len(a)):
for j in range(len(a[i])):
fw.write(str(a[i][j][0]) + ":" + str(a[i][j][1]) + '\n')
由上面代码可输出:
0:0.33699829595119235
1:0.8119707171924228
2:0.33699829595119235
4:0.33699829595119235
0:0.10212329019650272
2:0.10212329019650272
4:0.10212329019650272
5:0.9842319344536239
6:0.5773502691896258
7:0.5773502691896258
8:0.5773502691896258
0:0.33699829595119235
1:0.8119707171924228
2:0.33699829595119235
4:0.33699829595119235
数据转换好之后,我们可以正式操作了
A. 导入数据包
import xgboost as xgb
B. XGBoost自定义了一个数据矩阵类DMatrix,将我们的数据转为矩阵
- temp_train.txt 和 temp_test.txt就是我们的前面转换好的数据
dtrain = xgb.DMatrix('temp_train.txt')
dtest = xgb.DMatrix('temp_test.txt')
C. 训练并保存模型
- 模型参数
param = {'max_depth':2,'eta':1,'silent':0,'objective':'binary:logistic'}
num_round = 2
- 训练模型并保存模型
bst = xgb.train(param,dtrain,num_round)
bst.save_model('xgboost.model')
- 预测标签(xgboost得到的是预测标签的概率,所以我们要将其转为标签)
preds = bst.predict(dtest) # 得到的是第一类别的概率
p_label = [round(value) for value in preds] # 得到预测标签
3. 总结
xgboost是一个很好的算法,一般的分类比赛都会先用xgboost跑一遍看看效果,所以在这里分享给大家如何操作,希望会对大家有所帮助
xgboost算法教程(两种使用方法)的更多相关文章
- angular2系列教程(十)两种启动方法、两个路由服务、引用类型和单例模式的妙用
今天我们要讲的是ng2的路由系统. 例子
- Linux系统中存储设备的两种表示方法
转:https://blog.csdn.net/holybin/article/details/38637381 一.对于IDE接口的硬盘的两种表示方法: 1.IDE接口硬盘,对于整块硬盘的两种表示方 ...
- win7系统不能用telnet命令的两种解决方法
电脑专业人员对telnet命令都不陌生了,Telnet当成一种通信协议,在日常工作中,经常面对网络问题的人都会用到telnet命令,因为简单有效,可以帮助更快的找出问题.要是在使用过程中碰到win7纯 ...
- 两种js方法发起微信支付:WeixinJSBridge,wx.chooseWXPay区别
原文链接:https://www.2cto.com/weixin/201507/412752.html 1.为什么会有两种JS方法可以发起微信支付? 当你登陆微信公众号之后,左边有两个菜单栏,一个是微 ...
- keil结合st-link使用SWO的两种调试方法笔记
通过strongerHuang的教程,实现了SWO的两种调试方法, 1.在keil调试的过程中,使用debug printf viewer打印信息, 2.在STM32 ST-LINK Utility中 ...
- 电脑出现kernelbase.dll错误的两种解决方法
KernelBase.dll是Windows操作系统的重要文件,它为各种应用程序提供服务.如果电脑提示kernelbase.dll错误,这该怎么处理?大家可以用电脑自带的防火墙或者是第三方软件来进行故 ...
- git两种合并方法 比较merge和rebase
18:01 2015/11/18git两种合并方法 比较merge和rebase其实很简单,就是合并后每个commit提交的id记录的顺序而已注意:重要的是如果公司用了grrit,grrit不允许用m ...
- 两种Ajax方法
两种Ajax方法 Ajax是一种用于快速创建动态网页的技术,他通过在后台与服务器进行少量的数据交换,可以实现网页的异步更新,不需要像传统网页那样重新加载页面也可以做到对网页的某部分作出更新,现在这项技 ...
- mysql in 的两种使用方法
简述MySQL 的in 的两种使用方法: 他们各自是在 in keyword后跟一张表(记录集).以及在in后面加上字符串集. 先讲后面跟着一张表的. 首先阐述三张表的结构: s(sno,sname. ...
随机推荐
- Django的视图响应类型
Django的视图响应类型 一. 视图函数编写原则 视图函数接受HTTP请求并返回响应,可以放在任何地方,可以是任何功能:视图函数可以返回Web文本,页面.重定向.错误.图片等任何内容:视图函数通过H ...
- 2019.3.6 Github学习 &Git学习
Github学习 1.使用Github 1.1 目的 借助github托管项目代码 1.2 基本概念 仓库(Repository) 仓库的意思是:即你的项目,你想在Github上开源一个项目,那就必须 ...
- ubuntu查询命令行安装的软件的安装路径
which git // 查询git的安装路径
- Samba服务器的配置与使用
1.系统环境变量 Fedora: yum install libacl-devel libblkid-devel gnutls-devel \ readline-devel python-devel ...
- 【luogu P2827 蚯蚓】 题解
题目链接:https://www.luogu.org/problemnew/show/P2827 35分:暴力sortO(mnlogn). 80分:考虑到每次不好维护不被切的点+q,正难则反.改成维护 ...
- linux性能指标及分析工具
一.CPU 1.良好状态指标 CPU利用率:User Time <= 70%,System Time <= 35%,User Time + System Time <= 70%. 上 ...
- PLSQL数据库无选项问题解决
添加如下ORACLE_HOME和OCI library 添加之后,关闭plsql再打开会出现如下界面: 其中database为空. 我当时也是在环境变量里面配置了TNS_ADMIN的环境变量为:如下 ...
- 【ZOJ 2996】(1+x)^n(二项式定理)
Please calculate the coefficient modulo 2 of x^i in (1+x)^n. Input For each case, there are two inte ...
- MySQL数据库的隔离级别之可重复读为什么能够有效防止幻读现象的出现
可重复读隔离级别,不允许存在幻读,该隔离级别之所以能够有效防止幻读现象的出现,是因为可重复读这个隔离级别有用到GAP锁(间隙锁).下面我们以解析SQL语句为切入点,来解释个中原因. 前提条件:①数据库 ...
- Mysql 查询是否锁表
1.查询是否锁表show OPEN TABLES where In_use > 0; 2.查询进程 show processlist 查询到相对应的进程===然后 kill id 补充:查看正在 ...