XGBoost 分类模型的Python 实现
python入门教程网盘
电脑vb程序怎么使用今天我们⼀起来学习⼀下如何⽤Python来实现XGBoost分类,这个是⼀个监督学习的过程,⾸先我们需要导⼊两个Python库:
16进制转换2进制计算器
文件转换器在线这⾥的accuracy_score是⽤来计算分类的正确率的。我们这个分类是通过蘑菇的若⼲属性来判断蘑菇是否有毒的分类,这个数据集中有126个属性,我们来看看数据集,我把数据集放到⽹盘上分享给⼤家:,密码:w8td。打开数据集可以发现这其实是⼀组组的向量,我们
来看⼀组数据集的截图:
⾸先第⼀列表⽰标签列,是每⼀组数据的正确分类,1表⽰蘑菇是有毒的,0表⽰蘑菇⽆毒的。后⾯的数据,我们以第⼀组数据为例,3:1表⽰数据包含了第三组特征,其他没有不包含的特征的数据,我们就没有在数据集中显⽰,所以也可以把每⼀⾏看做是⼀个向量,这和我之前有⼀篇博⽂“SVM做⽂本分类详细操作流程”处理的数据格式是⼀样的。这⾥有两个数据集,⼀个训练集⼀个测试集,接下来我们读取数据集:
import  xgboost as  xgb
from  ics import  accuracy_score
data_train = xgb.DMatrix('Desktop/ain')
data_test = xgb.DMatrix('Desktop/st')
我们来看看训练集和测试集的⼤⼩:
可以看出,除开第⼀列的标签列,数据集⼀共有126组特征,6513组训练数据和1611组测试数据。
接下来我们来指定训练的参数:
解释⼀下,这⾥max_depth: 树的最⼤深度。默认值是6,取值范围为:[1,∞];eta:为了防⽌过拟合,更新过程中⽤到的收缩步长。在每次提升计算之后,算法会直接获得新特征的权重。eta通过缩减特征的权重使提升计算过程更加保守。默认值为0.3,取值范围为:
[0,1];silent:取0时表⽰打印出运⾏时信息,取1时表⽰以缄默⽅式运⾏,不打印运⾏时信息,默认值为0;objective: 定义学习任务及相应的学习⽬标,“binary:logistic” 表⽰⼆分类的逻辑回归问题,输出为概率。下⾯我们就可以⽤xgboost训练模型了:
这⾥的num_round表⽰训练的时候迭代的次数,我们默认它是2,训练过程是相当快的,这段代码输出是训练时长:
0.015257000000000076。这个时候我们⽤训练集做预测:
输出是:
这些数据输出的是概率,表⽰的是每⼀组蘑菇有毒的概率,我们再将这些数据分类:分类之后的输出是:
param = {'max_depth':2, 'eta':1, 'silent':1, 'objective':'binary:logistic'}
import time
start_time = time.clock()
bst = ain(param, data_train, num_round)
end_time = time.clock()print(end_time - start_time)
train_preds = bst .predict (data_train)
print ("train_preds",train_preds)
filebeattrain_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 = _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%,准确率还可以。同理,我们可以⽤测试集来验证我们的模型如何:
layuiadmin使用# make prediction
preds = bst.predict(data_test)
predictions = [round(value) for value in preds]
y_test = _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分类模型的过程,希望对各位朋友有所帮助,本⼈能⼒有限,⽂中如有纰漏之处,还望各位朋友多多指教,如有转载,也请标明出处,谢谢。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。