XGboostをIris datasetを使ってJupyter notebookで回す
XGBoostのインストール及びirisデータセットの読み込み
import xgboost as xgb from sklearn import datasets iris = datasets.load_iris() X = iris.data y = iris.target
説明変数と目的変数を交差検証のために、テストデータと訓練データに分割.
from sklearn.cross_validation import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
Xgboostを使うためにはDMatrix data formatという特定のフォーマットに変換する必要があります。Xgboostはnumpy arraysやsvmligntやその他のフォーマットでも動きますが、ここではNumpy arrayで読み込みます
dtrain = xgb.DMatrix(X_train, label=y_train) dtest = xgb.DMatrix(X_test, label=y_test)
パラメータの設定を行います
param = { 'max_depth': 3, # それぞれの木に対しての最大深度 'eta': 0.3, # 各イタレーションん対するトレーニングステップ 'silent': 1, # ログモード quiet 'objective': 'multi:softprob', # マルチクラストレーニングに対するエラー評価 'num_class': 3} # データセットに存在するクラス数 num_round = 20 # トレーニングイタレーションの回数
トレーニング開始!
bst = xgb.train(param, dtrain, num_round)
結果を出力して見ます
bst.dump_model('dump.raw.txt')
こんな感じの結果
booster[0]: 0:[f2<2.45] yes=1,no=2,missing=1 1:leaf=0.426036 2:leaf=-0.218845 booster[1]: 0:[f2<2.45] yes=1,no=2,missing=1 1:leaf=-0.213018 2:[f3<1.75] yes=3,no=4,missing=3 3:[f2<4.95] yes=5,no=6,missing=5 5:leaf=0.409091 6:leaf=-9.75349e-009 4:[f2<4.85] yes=7,no=8,missing=7 7:leaf=-7.66345e-009 8:leaf=-0.210219 ....
実際に予測してみます
preds = bst.predict(dtest)
アウトプットはこのようなarrayになっています
print(preds)
[[ 0.00563804 0.97755206 0.01680986]
[ 0.98254657 0.01395847 0.00349498]
[ 0.0036375 0.00615226 0.99021029]
[ 0.00564738 0.97917044 0.0151822 ]
[ 0.00540075 0.93640935 0.0581899 ]
[ 0.98607963 0.0104128 0.00350755]
[ 0.00438964 0.99041265 0.0051977 ]
[ 0.0156953 0.06653063 0.91777402]
[ 0.0063378 0.94877166 0.04489056]
[ 0.00438964 0.99041265 0.0051977 ]
[ 0.01785045 0.07566605 0.90648347]
[ 0.99054164 0.00561866 0.00383973]
[ 0.98254657 0.01395847 0.00349498]
[ 0.99085498 0.00562044 0.00352453]
[ 0.99085498 0.00562044 0.00352453]
[ 0.00435676 0.98638147 0.00926175]
[ 0.0028351 0.00545694 0.99170798]
[ 0.00506935 0.98753244 0.00739827]
[ 0.00435527 0.98265946 0.01298527]
[ 0.00283684 0.00484793 0.99231517]
[ 0.99085498 0.00562044 0.00352453]
[ 0.01177546 0.08546326 0.90276134]
[ 0.99085498 0.00562044 0.00352453]
[ 0.00283684 0.00484793 0.99231517]
[ 0.00561747 0.01081239 0.98357016]
[ 0.00363441 0.00699543 0.98937011]
[ 0.0036375 0.00615226 0.99021029]
[ 0.00561747 0.01081239 0.98357016]
[ 0.99054164 0.00561866 0.00383973]
[ 0.99085498 0.00562044 0.00352453]]
各arrayの中で一番高い列名を抜き出します
import numpy as np best_preds = np.asarray([np.argmax(line) for line in preds])
print(best_preds)
[1 0 2 1 1 0 1 2 1 1 2 0 0 0 0 1 2 1 1 2 0 2 0 2 2 2 2 2 0 0]
precisionを計算してみましょう
from sklearn.metrics import precision_score print(precision_score(y_test, best_preds, average='macro'))
1.0
このモデルを保存します
from sklearn.externals import joblib joblib.dump(bst, 'bst_model.pkl', compress=True)
['bst_model.pkl']
おしまい