美文网首页
使用xgboost多分类模型识别手写数字

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

作者: 追风少年1899 | 来源:发表于2017-06-02 14:53 被阅读0次

    使用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多分类模型识别手写数字

          本文链接:https://www.haomeiwen.com/subject/klrufxtx.html