使用xgboost多分类模型识别手写数字
数据下载牛客网的手写数字识别
当然啦! 在许多网站上都有着类似的数据。
安装xgboost
大家可以去这个网站是python外包库的下载网站找到xgboost下载,然后打开cmd输入pip install xgboost下载路径。既可以了。
在安装好了后。就可以提取训练集和测试集了。
代码如下:
import xgboost as xgb
import pandas as pd
import time
import numpy as np
dataset=pd.read_csv("mnist_train",header=None)
train=dataset.iloc[:,:784].values
labels=dataset.iloc[:,784:785].values
tests=pd.read_csv("mini_test.csv")#注意自己数据路径
test=tests.iloc[:,:].values`
这样我们就可以得到了数据集
接下来我们就要去使用模型了
params={
'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.05, # 如同学习率
'seed':710,
'nthread':4,# cpu 线程数,根据自己U的个数适当调整
}
plst = list(params.items())
#Using 10000 rows for early stopping.
offset = 50000 # 训练集中数据60000,划分50000用作训练,10000用作验证
num_rounds = 50 # 迭代你次数
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)
print(preds)
xgboost 可以处理多分类问题,像在手写数字识别中0-9 ,10种不同的答案。 在手写数字识别中是需要将模型改成多分类既可以'objective': 'multi:softmax', 'num_class':10, 在这种模型中识别率达到了95% 左右,相比别的一些深度学习的可以达到0.99