kaggle 入門 digit recognizer Python xgboost
阿新 • • 發佈:2019-01-29
# coding:utf-8 import numpy __author__ = 'WHP' __mtime__ = '2016/5/12' __name__ = '' import xgboost import pandas import time now = time.time() dataset = pandas.read_csv("...input\\train.csv") trainData = dataset.iloc[:, 1:].values labelData = dataset.iloc[:, :1].values testData = pandas.read_csv("...input\\test.csv") test = testData.iloc[:, :].values #引數列表 http://xgboost.readthedocs.io/en/latest/parameter.html param = {"booster": "gbtree", "max_depth": 12, "eta": 0.03, "seed": 710, "objective": "multi:softmax", "num_class": 10, "gamma": 0.03} offset = 35000 <span style="font-size: 13.3333339691162px; font-family: Arial, Helvetica, sans-serif;">#分割點 將原資料一部分作為訓練集 一部分作為驗證集</span> num_rounds = 500 #最大迭代次數 #資料轉換為DMatrix矩陣 此格式為xgboost接受格式 xgtest = xgboost.DMatrix(test) xgtrain = xgboost.DMatrix(trainData[:offset, :], label=labelData[:offset]) xgeval = xgboost.DMatrix(trainData[offset:, :], label=labelData[offset:]) watchlist = [(xgtrain, 'train'), (xgeval, 'val')] #進行模型擬合 官方函式列表 http://xgboost.readthedocs.io/en/latest/python/python_api.html model = xgboost.train(list(param.items()), xgtrain, num_rounds, watchlist, early_stopping_rounds=100) #根據模型 進行預測 preds = model.predict(xgtest, ntree_limit=model.best_iteration) numpy.savetxt('submission_xgb_MultiSoftmax.csv', numpy.c_[range(1, len(testData) + 1), preds], delimiter=',', header='ImageId,Label', comments='', fmt='%d') print("cost time:", time.time() - now)
結果 一開始用的不是multi:softmax(分類器) 而是預設的線性迴歸 結果很不好 0.5左右
將資料預處理,大於1的賦為1,得到0.97的結果
參考文件: