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. ...
随机推荐
- python沙箱逃逸的几道题
第一道 from __future__ import print_function print("Welcome to my Python sandbox! Enter commands b ...
- DOM操作怎样添加、移除、移动、复制。创建和查找节点?
(1)创建新节点 createDocumentFragment() //创建一个DOM片段 createElement() //创建一个具体的元素 createTextNode() //创建一个文本节 ...
- element-ui : <el-table> 按钮点击操作阻止@row-click
描述:<el-table> 点击行时,会跳转到一个详细信息页面, 但是同时这一行也有编辑和删除按钮. 问题: 在点击按钮时,@row-click事件也被触发了,而我并不想触发 row-cl ...
- robotframwork的WEB功能测试(一)—切换window窗口
selenium2library提供的切换到新窗口的关键字,只有select window,而且也只能根据title.name.url去定位.如下图所示,明显在实际使用中是不够的. 所以这里总结了一下 ...
- Fedora Server 上配置 MariaDb 集群
下载与安装 MariaDB Galera Cluster 10.1之前的版本安装,输入以下命令进行安装: sudo dnf install mariadb-galera-server 如果电脑上还没安 ...
- Maven创建项目一些常见的问题
1 .创建的项目中没有src/main/java.没有src/test/java 主要原因在于在创建项目的时候,使用的是系统自带的jdk,修改方法: 右键项目——Properties——javaBui ...
- Struts2学习总结——文件上传与下载
Struts2文件上传与下载 1.1.1新建一个Maven项目(demo02) 在此添加Web构面以及 struts2 构面 1.2.1配置Maven依赖(pom.xml 文件) <?xml v ...
- docker-maven-plugin 完全免Dockerfile 文件
# DockerSpringBootPlugin docker-maven-plugin 完全免Dockerfile 文件 使用docker-maven-plugin 进行完全免 Dockerfile ...
- 【postgresql的使用】
#安装: #初始化: #允许远程登录: #创建数据库并指定用户 #创建用户 #列出数据库 #进入数据库 #查询数据 #or(或)查询 #and ,or(和,或查询) #表连接 #内,外(左右),交叉连 ...
- PHP 好用第三方库
PHP 好用第三方库 whoops 更好的php错误报告库 [github]:https://github.com/filp/whoops Whoops是一个易于处理和调试错误的PHP库 .它提供基于 ...