机器学习xgboost实战—手写数字识别
来源:互联网 发布:非公版显卡linux 编辑:程序博客网 时间:2024/05/17 02:40
1、xgboost 安装
安装问题这里就不再做赘述,可参考前面写的博文:
http://blog.csdn.net/eddy_zheng/article/details/50184563
2、手写数字识别
这里先说明下,xgboost用作手写字符的分类效果并不是最好的,这里仅仅作为一个教学的实例。本文中用的数据集来自kaggle 的新手入门数字识别(https://www.kaggle.com/c/digit-recognizer),我用 xgboost 实现的准确率只有95%+(并未调参 ,可能并未得到最佳的效果)。用深度学习 CNN 来做,可以达到99%+。
在数据建模中,当我们有数个连续值特征时,Boosting分类器是最常用的非线性分类器。它将成百上千个分类准确率较低的树模型组合起来,成为一个准确率很高的模型。这个模型会不断地迭代,每次迭代就生成一颗新的树。然而,在数据集较大较复杂的时候,我们可能需要几千次迭代运算,这将造成巨大的计算瓶颈。xgboost正是为了解决这个瓶颈而提出。单机它采用多线程来加速树的构建,
因此,写这篇博文知识为了让初次使用xgboost的朋友能够更快的上手。
2.1数据获取
数据集放在这里了,下载对应的手写数字的 train.csv与test.csv。以后相关数据集都放到这里,持续更新:
http://blog.csdn.net/Eddy_zheng/article/details/50496194
2.2 代码实现
基于python实现的,代码阅读可能需要一点python的功底,不过关于xgboost的参数我都尽力做了解释,都是自己学习的见解,有不准确的地方大家可以指出,共同学习。当然要更深刻的理解参数,可以看看xgboost的理论推导,了解每个参数是怎么来的?用来做什么都的?
官方地址(http://xgboost.readthedocs.org/en/latest/parameter.html)
#coding=utf-8"""Created on 2015/12/25By Eddy_zheng"""import xgboost as xgbimport pandas as pdimport time import numpy as npnow = time.time()dataset = pd.read_csv("../input/train.csv") # 注意自己数据路径train = dataset.iloc[:,1:].valueslabels = dataset.iloc[:,:1].valuestests = pd.read_csv("../input/test.csv") # 注意自己数据路径#test_id = range(len(tests))test = tests.iloc[:,:].valuesparams={'booster':'gbtree',# 这里手写数字是0-9,是一个多类的问题,因此采用了multisoft多分类器,'objective': 'multi:softmax', 'num_class':10, # 类数,与 multisoftmax 并用'gamma':0.05, # 在树的叶子节点下一个分区的最小损失,越大算法模型越保守 。[0:]'max_depth':12, # 构建树的深度 [1:]#'lambda':450, # L2 正则项权重'subsample':0.4, # 采样训练数据,设置为0.5,随机选择一般的数据实例 (0:1]'colsample_bytree':0.7, # 构建树树时的采样比率 (0:1]#'min_child_weight':12, # 节点的最少特征数'silent':1 ,'eta': 0.005, # 如同学习率'seed':710,'nthread':4,# cpu 线程数,根据自己U的个数适当调整}plst = list(params.items())#Using 10000 rows for early stopping. offset = 35000 # 训练集中数据50000,划分35000用作训练,15000用作验证num_rounds = 500 # 迭代你次数xgtest = xgb.DMatrix(test)# 划分训练集与验证集 xgtrain = xgb.DMatrix(train[:offset,:], label=labels[:offset])xgval = xgb.DMatrix(train[offset:,:], label=labels[offset:])# return 训练和验证的错误率watchlist = [(xgtrain, 'train'),(xgval, 'val')]# training model # early_stopping_rounds 当设置的迭代次数较大时,early_stopping_rounds 可在一定的迭代次数内准确率没有提升就停止训练model = xgb.train(plst, xgtrain, num_rounds, watchlist,early_stopping_rounds=100)#model.save_model('./model/xgb.model') # 用于存储训练出的模型preds = model.predict(xgtest,ntree_limit=model.best_iteration)# 将预测结果写入文件,方式有很多,自己顺手能实现即可np.savetxt('submission_xgb_MultiSoftmax.csv',np.c_[range(1,len(test)+1),preds], delimiter=',',header='ImageId,Label',comments='',fmt='%d')cost_time = time.time()-nowprint "end ......",'\n',"cost time:",cost_time,"(s)......"
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
2.3 测试训练模型
训练图示:
结果提交 kaggle 验证:
2.4总结
简单应用于手写字符分类识别,希望通过这个简单的应用,能够学习调试模型,达到举一反三的效果。
- 机器学习xgboost实战—手写数字识别
- 机器学习xgboost实战—手写数字识别
- 机器学习xgboost实战—手写数字识别 (DMatrix)
- 机器学习实战——手写数字识别
- 机器学习-实战-入门-MNIST手写数字识别
- 机器学习实战——使用K-近邻算法识别手写数字
- 《机器学习实战二》K近邻学习之手写数字识别及检测识别错误率
- 机器学习实战kNN之手写识别
- 机器学习实战kNN之手写识别
- 机器学习实战kNN之手写识别
- 机器学习实战-knn_手写识别
- 【机器学习实战02】手写识别系统
- 机器学习-tensorflow入门教程二——识别手写数字
- 机器学习--knn手写数字识别系统
- 【机器学习 sklearn】手写数字识别 SVM
- 学习笔记——《机器学习实战》KNN算法实现 约会网站测试,手写数字识别,代码,注释,错误修改
- 【《机器学习实战》第2章读书笔记】手写数字识别系统剖析
- 机器学习实战k近邻算法(kNN)应用之手写数字识别代码解读
- 分别使用1次,2次,4次多项式回归模型在比萨训练样本上进行拟合
- get和post的区别并讲解到URLENCODE和乱码问题
- 进程有一个全局变量i,还有有两个线程。i++在两个线程里边分别执行100次,能得到的最大值和最小值分别是多少?
- Linux中常用的时间结构struct timespec 和struct timeval
- 如何避免使用Handler造成的内存泄漏
- 机器学习xgboost实战—手写数字识别
- mysql 基本指令
- 吞吐量(Throughput)、QPS、并发数、响应时间(RT)对系统性能的影响
- JS 时间格式化
- 中小医疗机构CRM营销管理解决方案
- JSONP
- Maven下SSM项目整合笔记04:使用测试类进行数据库增删改查的测试
- v-for v-if
- AJAX提交与FORM提交的区别说明