数据文件说明
本示例的数据集文件可以在https://github.com/dmlc/xgboost/tree/master/demo/data这里获得。
该数据集描述的是不同蘑菇的相关特征,如大小、颜色等,并且每一种蘑菇都会被标记为可食用的(标记为0)或有毒的(标记为1)。
LibSVM 格式说明
这个数据是LibSVM格式的
LibSVM 使用的训练数据和检验数据文件格式如下:
[label] [index1]:[value1] [index2]:[value2] …
[label] [index1]:[value1] [index2]:[value2] …
label 目标值,就是说class(属于哪一类),就是你要分类的种类,通常是一些整数。
index 是有顺序的索引,通常是连续的整数。就是指特征编号,必须按照升序排列
value 就是特征值,用来train的数据,通常是一堆实数组成。
格式特征:
- 每行包含一个实例,并以“ \ n”字符结尾。
- 对于分类,
是一个从1开始的整数, 是一个实数。唯一的例外是预先计算的内核, 从0开始;
我们这个例子中的数据文件
1 3:1 10:1 11:1 21:1 30:1 34:1 36:1 40:1 41:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 124:1
0 3:1 10:1 20:1 21:1 23:1 34:1 36:1 39:1 41:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 120:1
0 1:1 10:1 19:1 21:1 24:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 106:1 116:1 122:1
1 3:1 9:1 19:1 21:1 30:1 34:1 36:1 40:1 42:1 53:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 117:1 124:1
0 3:1 10:1 14:1 22:1 29:1 34:1 37:1 39:1 41:1 54:1 58:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 98:1 106:1 114:1 120:1
0 3:1 9:1 20:1 21:1 23:1 34:1 36:1 39:1 42:1 53:1 56:1 65:1 69:1 77:1 86:1 88:1 92:1 95:1 102:1 105:1 116:1 120:1
每一行的label值,标记该蘑菇可食用的(标记为0)或有毒的(标记为1)。
数据源说明
这个例子的数据源来自:http://archive.ics.uci.edu/ml/machine-learning-databases/mushroom/
数据中包括蘑菇对形状、颜色等特征,以及是否有毒的标签。
agaricus-lepiota.data
原始数据存放在agaricus-lepiota.data里,内容如下所示。它有23列,其中第一列是标签列,p表示有毒,e表示没有毒。后面的22列是22个特征对应的特征值。
agaricus-lepiota.names
agaricus-lepiota.names 文件里存放特征映射关系,比如蘑菇头形状(cap-shap)为钟型(bell)的用b表示,圆锥型(conical)的用c表示;蘑菇头颜色(cap-color)为棕色(brown)的用n表示,浅黄色(buff)的用b表示,等等。总共22个特征映射,对应agaricus-lepiota.data里的第1~22列(第0列为标签)。
数据准备
这里我们已经把这个数据变化成了LibSVM格式。
另外我们还把数据随机分成训练集(agaricus.txt.train)和测试集(agaricus.txt.test)两部分,80%的数据分配给训练集,20%分配给测试集。
参考:xgboost小试
训练模型
我们的任务是对蘑菇特征数据进行学习,训练相关模型,然后利用训练好的模型预测未知的蘑菇样本是否有毒。
import xgboost as xgb
# 数据读取
xgb_train = xgb.DMatrix('./agaricus.txt.train')
xgb_test = xgb.DMatrix('./agaricus.txt.test')
# 定义模型训练参数
params = {
"objective":"binary:logistic",
"booster":"gbtree",
"max_depth":3
}
# 训练轮数
num_round = 5
# 训练过程中实时输出评估结果
watchlist = [(xgb_train,'train'),(xgb_test,'test')]
# 模型训练
model = xgb.train(params,xgb_train,num_round,watchlist)
输出结果
% python ./xgb20.py
[19:25:53] WARNING: /opt/concourse/worker/volumes/live/7a2b9f41-3287-451b-6691-43e9a6c0910f/volume/xgboost-split_1619728204606/work/src/learner.cc:1061: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'binary:logistic' was changed from 'error' to 'logloss'. Explicitly set eval_metric if you'd like to restore the old behavior.
[0] train-logloss:0.45224 test-logloss:0.45317
[1] train-logloss:0.32281 test-logloss:0.32412
[2] train-logloss:0.23637 test-logloss:0.23739
[3] train-logloss:0.16933 test-logloss:0.16935
[4] train-logloss:0.12386 test-logloss:0.12352
XGBoost训练过程中实时输出了训练集和测试集的错误率评估结果。随着训练的进行,训练集和测试集的错误率均在不断下降,说明模型对于特征数据的学习是十分有效的。
参数说明
- "objective":"binary:logistic" objective 该参数用来指定目标函数,XGBoost可以根据该参数判断进行何种学习任务,binary:logistic和binary:logitraw都表示学习任务类型为二分类。binary:logistic输出为概率,binary:logitraw输出为逻辑转换前的输出分数。
- booster为gbtree表示采用XGBoost中的树模型。
- 参数max_depth表示决策树分裂的最大深度。
预测
# 对测试集进行预测
preds = model.predict(xgb_test)
参考:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
2016-07-27 Heka 的编译 和 Heka 插件的编译
2011-07-27 TreeSaver 图片的定位