xgboost分类算法_python分类统计

xgboost分类算法_python分类统计今天我们一起来学习一下如何用Python来实现XGBoost分类,这个是一个监督学习的过程,首先我们需要导入两个Python库:importxgboostasxgbfromsklearn.metricsimportaccuracy_score这里的accuracy_score是用来计算分类的正确率的。我们这个分类是通过蘑菇的若干属性来判断蘑菇是否有毒的分类,我们来看看数据…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

今天我们一起来学习一下如何用Python来实现XGBoost分类,这个是一个监督学习的过程,首先我们需要导入两个Python库:

import xgboost as xgb
from sklearn.metrics import accuracy_score

这里的accuracy_score是用来计算分类的正确率的。我们这个分类是通过蘑菇的若干属性来判断蘑菇是否有毒的分类,这个数据集中有126个属性,我们来看看数据集,我把数据集放到网盘上分享给大家:训练和测试数据集,密码:w8td。打开数据集可以发现这其实是一组组的向量,我们来看一组数据集的截图:训练数据集
首先第一列表示标签列,是每一组数据的正确分类,1表示蘑菇是有毒的,0表示蘑菇无毒的。后面的数据,我们以第一组数据为例,3:1表示数据包含了第三组特征,其他没有不包含的特征的数据,我们就没有在数据集中显示,所以也可以把每一行看做是一个向量,这和我之前有一篇博文“SVM做文本分类详细操作流程”处理的数据格式是一样的。这里有两个数据集,一个训练集一个测试集,接下来我们读取数据集:

data_train = xgb.DMatrix('Desktop/dataset/agaricus.txt.train')
data_test = xgb.DMatrix('Desktop/dataset/agaricus.txt.test')

我们来看看训练集和测试集的大小:
数据集大小
可以看出,除开第一列的标签列,数据集一共有126组特征,6513组训练数据和1611组测试数据。
接下来我们来指定训练的参数:

param = {
  
  'max_depth':2, 'eta':1, 'silent':1, 'objective':'binary:logistic'}

解释一下,这里max_depth: 树的最大深度。默认值是6,取值范围为:[1,∞];eta:为了防止过拟合,更新过程中用到的收缩步长。在每次提升计算之后,算法会直接获得新特征的权重。eta通过缩减特征的权重使提升计算过程更加保守。默认值为0.3,取值范围为:[0,1];silent:取0时表示打印出运行时信息,取1时表示以缄默方式运行,不打印运行时信息,默认值为0;objective: 定义学习任务及相应的学习目标,“binary:logistic” 表示二分类的逻辑回归问题,输出为概率。下面我们就可以用xgboost训练模型了:

import time
start_time = time.clock()
bst = xgb.train(param, data_train, num_round)
end_time = time.clock()
print(end_time - start_time)

这里的num_round表示训练的时候迭代的次数,我们默认它是2,训练过程是相当快的,这段代码输出是训练时长:0.015257000000000076。这个时候我们用训练集做预测:

train_preds = bst.predict(data_train)
print ("train_preds",train_preds)

输出是:

train_preds [0.9239239  0.28583017 0.28583017 ... 0.05169873 0.05169873 0.05169873]

这些数据输出的是概率,表示的是每一组蘑菇有毒的概率,我们再将这些数据分类:

train_predictions = [round(value) for value in train_preds]
print ("train_predictions",train_predictions)

分类之后的输出是:

train_predictions [1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, ... 1.0, 0.0, 0.0, 0.0]

这里输出全部都是0和1了,这就是我们用训练数据集训练出的结果,我们可以将这个结果与训练集中的标签作比较,来看看这个预测的准确率如何:

y_train = data_train.get_label()
print ("y_train",y_train)

这是我们获取训练数据集的标签,再与我们训练出的结果进行比较:

train_accuracy = accuracy_score(y_train, train_predictions)
print ("Train Accuary: %.2f%%" % (train_accuracy * 100.0))

结果是Train Accuary: 97.77%,准确率还可以。同理,我们可以用测试集来验证我们的模型如何:

# make prediction
preds = bst.predict(data_test)
predictions = [round(value) for value in preds]
y_test = data_test.get_label()
test_accuracy = accuracy_score(y_test, predictions)
print("Test Accuracy: %.2f%%" % (test_accuracy * 100.0))

我们可以得到Test Accuracy: 97.83%,这可以说明我们用训练集训练出来的模型还是不错的。
以上是我们用xgboost对数据进行分类模型训练的全过程,接着,我们还可以对这个模型输出它的决策树:

from matplotlib import pyplot
import graphviz
xgb.plot_tree(bst, num_trees = 0,rankdir = 'LR')
pyplot.show()

这里解释一下,xgb.plot_tree()方法的第一个参数表示模型,第二个参数表示树的索引是从0开始的,其实还可以填第三个参数:rankdir = ‘LR’,’LR’表示水平方向,默认的是垂直方向。
我们可以得到这个模型的决策树:
模型决策树
这个决策树节点中的f29表示的是数据集中的第29个特征。
以上就是我们用Python实现的xgboost分类模型的过程,希望对各位朋友有所帮助,本人能力有限,文中如有纰漏之处,还望各位朋友多多指教,如有转载,也请标明出处,谢谢。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/188611.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • lcd像素点密度_常见液晶显示分辨率对应像素密度[通俗易懂]

    lcd像素点密度_常见液晶显示分辨率对应像素密度[通俗易懂]液晶屏尺寸主流屏幕分辨率屏幕像素密度(PPI)产品类型800×4803英寸:3113.5英寸:2664英寸:233960×6403.5英寸:3294英寸:2884.3英寸:2681280×7204.3英寸:3414.7英寸:3125英寸:2931920×10805英寸:4407英寸:3142048x1080_2K6英寸:3857英寸:3301280×8007英寸:2158英寸…

    2022年6月12日
    123
  • Hadoop教程(一) Hadoop入门教程「建议收藏」

    Hadoop教程(一) Hadoop入门教程「建议收藏」Hadoop是Apache开源组织的一个分布式计算开源框架(http://hadoop.apache.org/),用java语言实现开源软件框架,实现在大量计算机组成的集群中对海量数据进行分布式计算。Hadoop框架中最核心设计就是:HDFS和MapReduce,HDFS实现存储,而MapReduce实现原理分析处理,这两部分是hadoop的核心。数据在Hadoop中处理的流程可以简单的按照下图来理解:数据通过Haddop的集群处理后得到结果,它是一个高性能处理海量数据集的工具 。

    2022年4月29日
    57
  • MT4行情交易API接口开发手记

    MT4行情交易API接口开发手记之前开发的外汇量化交易系统,行情和交易接口都是通过在MT4平台下编写EA来实现,具体方法是:1、用C++编写一个动态库文件,在里面实现行情和交易数据调用接口,将报价数据和K线数据写入数据库中,并从数据库中获取外汇量化系统发出的交易指令。2、在MT4中编写EA文件,在MT4上不间断运行,从MT4平台实时获取报价和K线数据,并调用动态库写入数据库中,于此同时,不断从数据库中获取交易指令,再调用MT4的交易指令完成交易。采用此种方法的好处就是兼容性强,只要打开MT4软件运行EA,就可以完成行情和交易接..

    2022年5月30日
    160
  • NAT的双机热备方案

    一般的NAT组网中,内网用户通过单台设备进行NAT转换访问外网,NAT设备承担了所有内外网之间的流量,无法规避单点故障。一旦发生单点故障,将导致内网用户无法与外网通信。随着用户对网络可靠性的要求越来越高,发生单点故障导致网络间断是不可接受的。因此在重要节点处一般都部署两台或者多台设备,构成冗余备份组网,但如果设备之间不能实时的进行数据备份的话,链路切换时还是会导致用户的业务中断。双机热备方案可…

    2022年4月7日
    87
  • 记录虚拟机桥接模式不能上网问题的解决方法「建议收藏」

    记录虚拟机桥接模式不能上网问题的解决方法「建议收藏」问题一:一直连接不上网络,右上角的网络模式显示连接不到sudovi/etc/network/interfaces初始情况下,只有以下两行autoloifaceloinetloopback在桥接模式下,需要添加以太网卡的启动,在下面添加两行autoens33ifaceens33inetdhcp看网卡的不同,填不同的,例如eth0,通过ifconfig查看本机网卡问题二:右上角显示连接上了,但是不能ping通外网开启主机的VMwareDHCP.

    2022年4月29日
    490
  • 优先级队列详解

    优先级队列详解动力节点小编来为大家进行优先级队列详解,优先级队列是一种特殊类型的队列,其中每个元素都与一个优先级值相关联。并且,元素根据其优先级提供服务。即,首先服务更高优先级的元素。但是,如果出现具有相同优先级的元素,则按照它们在队列中的顺序提供服务。分配优先级值通常,在分配优先级时考虑元素本身的值。例如,具有最高值的元素被认为是最高优先级的元素。但是,在其他情况下,我们可以假设具有最低值的元素作为最高优先级元素。我们还可以根据需要设置优先级。优先队列和普通队列的区别在队列中,执行先进先

    2022年9月23日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号