使用xgboost多分类模型识别手写数字

使用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

你可能感兴趣的:(使用xgboost多分类模型识别手写数字)