ä»ãKaggleãKDD cup以ä¸åã ããæ©æ¢°å¦ç¿ã³ã³ãã§çµ¶å¤§ãªäººæ°ãèªãåé¡å¨ãXgboost (eXtreme Gradient Boosting)ãç¹ã«Kaggleã®Higgs Boson Machine Learning Challengeã®åªåãã¼ã ãé§ä½¿ãããã¨ã§æåã«ãªã£ãæãããããã§ã
ãã®å®è£ ã§ãããC++ãã¼ã¹ã§é«éåãããã®ã«Rã¨Pythonã®ã©ããã¼ãã¤ãããã®ãæ¢ã«GitHubã§å ¬éããã¦ãã¾ãã
Rããã±ã¼ã¸ã§ãã{xgboost}ã®ã¤ã³ã¹ãã¼ã«ã«ã¤ãã¦ã®æ³¨æäºé ã¯ååã®è¨äºã«æ¸ãã¦ãã¾ãã®ã§ãã¤ã³ã¹ãã¼ã«ã®éã¯ãåèã«ãã¦ããã ããã°ã¨ã
ãã¦ãããã ã大人æ°ã®åé¡å¨ã¨ãªãã¨å½å
å¤åããè²ã
ãªè§£èª¬è¨äºã«æº¢ãã¦ããã¾ãã¦ãä¾ãã°æ¥æ¬èªããã°ã§ãããã ãã®è¨äºãæ¢ã«åºã¦ã¾ãã
- 勾配ブースティングについてざっくりと説明する - About connecting the dots.
- 最近、流行のxgboost - puyokwの日記
- xgboostとgbmのパラメータ対応一覧をつくる - 盆栽日記
- Gradient Boosting Decision Treeでの特徴選択 in R | 分析のおはなし。
æ¢ã«è²ã
ãªæåããã°ãåãä¸ãåã£ãå¾ã§ãããªè¨äºãæ¸ãã¦ããã¯ãä½ãé¢ç½ããªãæ°ããããã§ãããèªåã®åå¿é²ã®ããã«ãã¡ãã¨æ¸ãã¦ããããã¨æãã¾ããã¨è¨ã£ã¦ããæ£ç´è¨ã£ã¦å¤§ããå
å®¹ã¯æ¸ãã¾ãããããã
ã¾ãMNISTã®ã·ã§ã¼ããã¼ã¸ã§ã³ã§è©¦ãã¦ã¿ã
ååã¾ã§ã¯èªåã®å¤å¤éãã¼ã¿ã»ããã使ã£ã¦ãããã§ãããä»åããã¯è±èªçããã°ã§ãæç¨ãã¦ããMNISTã®ã·ã§ã¼ããã¼ã¸ã§ã³ã使ã£ã¦ã¿ããã¨æãã¾ãã僕のGitHubリポジトリãã"short_prac_train.csv"ã¨"short_prac_test.csv"ãDLãã¦ãã¦ãããããtrain, testã¨ããååã§ã¤ã³ãã¼ããã¦ããã¦ä¸ããã
> library(xgboost) > library(Matrix) > train<-read.csv("short_prac_train.csv") > test<-read.csv("short_prac_test.csv") > train.mx<-sparse.model.matrix(label~., train) > test.mx<-sparse.model.matrix(label~., test) > dtrain<-xgb.DMatrix(train.mx, label=train$label) > dtest<-xgb.DMatrix(test.mx, label=test$label) > train.gbdt<-xgb.train(params=list(objective="multi:softmax", num_class=10, eval_metric="mlogloss", eta=0.2, max_depth=5, subsample=1, colsample_bytree=0.5), data=dtrain, nrounds=150, watchlist=list(eval=dtest, train=dtrain)) [0] eval-mlogloss:1.738412 train-mlogloss:1.698857 [1] eval-mlogloss:1.445343 train-mlogloss:1.381565 [2] eval-mlogloss:1.238927 train-mlogloss:1.152097 # ...ä¸ç¥... [148] eval-mlogloss:0.154864 train-mlogloss:0.002696 [149] eval-mlogloss:0.155017 train-mlogloss:0.002677 > pred<-predict(train.gbdt,newdata=dtest) > sum(diag(table(test$label,pred)))/nrow(test) [1] 0.958
ãã®0.958ã¨ããã¹ã³ã¢ãå®ã¯ã©ã³ãã ãã©ã¬ã¹ãã®0.953ãä¸åããæ¦ããã¹ãã«è¿ããã¥ã¼ãã³ã°ã®h2o.deeplearningã¨åãæ°å(0.958)ãªãã§ãããKaggleã®MNISTã³ã³ãã§ã¯ããã¾ã§ã¹ã³ã¢ã¯ä¼¸ã°ããªãã£ããã§ããããããã«ããDeep Learningã«å¹æµããã¹ã³ã¢ãå©ãåºããã¨ãããã¨ã ãã¯ãåããããã ããããªã¨ã
Xgboostã¨ã¯ä½ãã
å®ã¯ããã»ã©æ°ããææ³ã¨ããããã§ããªãã®ã§ãæ¢åæ¬ã«ãçµæ§èª¬æãè¼ã£ã¦ã¾ããã¨ãããããã¯ããã¿ãpp.188-193ã¨ESLé¦è¨³æ¬ãçµ±è¨çå¦ç¿ã®åºç¤ã*1第10ç« pp.385-442ããESL原典ãªãChapter 10 pp.337-388ãAdaboostã®è¾ºãããèªãã§ã¿ãã¨ãããããã¨ãWebä¸ããè¦ããããã®ã¨ãã¦ã¯id:smrmktããããæ¨è¦ã®FEGさんのKDD cup 2009の解説資料ãåãããããã¦è¯ããã¨æãã¾ã*2ã
ããè¨ãã°ãAdaboostã«ã¤ãã¦ã¯ãã®ã·ãªã¼ãºã®ååã®è¨äºã§åãä¸ãã¦ãã¾ããï¼パッケージユーザーのための機械学習(11):番外編 - AdaBoost - 渋谷駅前で働くデータサイエンティストのブログï¼ãXgboostãæ¬è³ªçã«ã¯Adaboostã¨çºæ³ã¯åãã§ã
ãã¼ã¹ãã£ã³ã°(boosting)ã¯ãä¸ããæå¸«ä»ããã¼ã¿ãç¨ãã¦å¦ç¿ãè¡ãããã®å¦ç¿çµæãè¸ã¾ãã¦é次ã«éã¿ã®èª¿æ´ãç¹°ãè¿ããã¨ã§è¤æ°ã®å¦ç¿çµæãæ±ãããã®çµæãçµ±åã»çµã¿åããã精度ãåä¸ãããã
ã¨ãããã¼ã¹ãã£ã³ã°ã®æµããæ±²ããã®ã§ããAdaboostã§ã¯æå¤±é¢æ°ãã¨ãã¦ãã¾ããããããæ±ºå®æ¨ã»å帰æ¨ãªã©æ¨¹æ¨ã¢ãã«ã«æ¿ãããã®ãXgboostã¨ãããgradient boosted treeã§ãããããããã¨ã§ç¹å¾´éãé£ç¶å¤æ°ã»ã«ãã´ãªå¤æ°ã§ãã£ã¦ã対å¿ã容æã§ãå¤ãå¤ãæ¬ æå¤ã«ãå¼·ãå¦ç¿å¨ãä½ããã¨ãã§ãã¾ããã¾ãAdaboostãåã¹ãããã§æ´æ°ããéã«å¦ç¿ãã¼ã¿å
¨ä½ã使ã£ã¦ããã®ãæ¹ããã©ã³ãã ã«æ½åºãããµã³ãã«ã®ã¿ãç¨ãã¦ããç¹ã§ãç°ãªãã¾ãããã®è¾ºã¯ã©ã³ãã ãã©ã¬ã¹ãã«çºæ³ãè¿ãããªï¼ã¨ããæ°ããã¾ããã
ã¡ãªã¿ã«ãçµ±è¨çå¦ç¿ã®åºç¤ãpp.409-412ã«ã¯ããå°ãç´°ãã説æãè¼ã£ã¦ãã¾ãã端çã«è¨ãã°å ã æ¨¹æ¨ã¢ãã«ããã¼ã¹ãã£ã³ã°ã«é©ç¨ãããã¼ã¹ãã£ã³ã°æ¨ã¨ããã¢ã«ã´ãªãºã ãããããã®æå¤±é¢æ°ãæå°åããæ¨ã®çµã¿åãããæ±ããéã®æé©åææ³ã¨ãã¦ææ¥é䏿³ãç¨ãã¦ããã¨ããããå¾é ãã¼ã¹ãã£ã³ã°ã§ã¯åã¹ãããã§å¯è½ãªéãè² ã®å¾é ãå¾ããããããªæ¨ãOLSã§æ¨å®ãã¦å¾ãã¨ãããã¨ããããã¿ããã§ã*3ã
ãçµ±è¨çå¦ç¿ã®åºç¤ãp.413åã³FEGããã®è³æã«ã¯ãã®ãã®ãºããªãå¾é
ãã¼ã¹ãã£ã³ã°æ¨ãã®ã¢ã«ã´ãªãºã ãè¼ã£ã¦ãã¾ããã¹ã¯ã©ããããå®è£
ãã¦ã¿ãã人ã¯åèã«ãã¦ã¿ãã¨è¯ãã§ãããã以ä¸ä¸é¨ä»è³æãåç
§ãã¦ä¿®æ£ããªããå¼ç¨*4ã
ã¢ã«ã´ãªãºã 10.3 å¾é ãã¼ã¹ãã£ã³ã°æ¨
1.
ã¨ãªãããã«åæåããã
ã§ããã
2.
ãã
ã«å¯¾ãã¦ã以ä¸ãè¡ãã
(a) æ·»ãåãã©ã³ãã ã«å ¥ãæ¿ããä¸ã§ã
ã«å¯¾ãã¦æ¬¡ãè¨ç®ããã
(b) å帰æ¨ãç®ç夿°
ã«å¯¾ãã¦å帰æ¨ãæ¨å®ãããã®çµç«¯é åã
ã¨ããã
(c)
ã«å¯¾ãã¦æ¬¡ãè¨ç®ããã
(d)
ã®ããã«æ´æ°ããã
3.
ãåºåããã
ï¼â»çè æ³¨ï¼ããã§ã¯å帰æ¨ãæ³å®ã
ã¯äºæ¸¬é¢æ°ã
ã¯å¦ç¿ãã¼ã¿ä¸ã®
ã«å¯¾ããæå¤±é¢æ°ã
ã¯æç¤ºé¢æ°ã§
ã
ã«å«ã¾ããå ´å1ãè¿ãï¼
2.(d)ã®å¼ã®æ´æ°é¨ãåãªã(a)ã¨ä½ãããã®å¦ç¿ä¿æ°ã¨ã®ç©ã«ããï¼ã¤ã¾ãï¼ã¨ææ¥é䏿³ã«ãªãã®ã§ããããã®å¾é
ãã¼ã¹ãã£ã³ã°æ¨ã®ã¢ã«ã´ãªãºã ã§ã¯ããå·§ã¿ãªæ´æ°ãè¡ããã¦ãããã¨ãåãããã¨æãã¾ããå³ã¡ã(b)ã®ã¹ãããã§æ¤åºããã誤å¤å®é åã«ããããµã³ãã«ã ããæãåºãã¦
ãæ´æ°ããã¨ããããã§ããããã§ææ¥é䏿³ãããããã«greedyã«æ´æ°ã§ããã¨ããã«ã©ã¯ãªã§ãã
ãã®ä»ãçµ±è¨çå¦ç¿ã®åºç¤ãp.413以éã«ã¯Xgboostã®ãã¥ã¼ãã³ã°ã®ããã«å¿
è¦ãªç¥èãããã¤ãè¿°ã¹ããã¦ãã¾ããä¾ãã°æ¨ã®å¤§ãã(tree size)ã¯æ¦ã
ã妥å½ã§ããä¸ã«æ¦ã6ãããã§è¯ãããã¨ã*5ãç¹°ãè¿ã
ã¯ãã¥ã¼ã©ã«ãããã¯ã¼ã¯ã®æ©ææã¡åãæ¦ç¥ã¨åãã§ãã¾ã大ãããéãããªã¨ããä¸è¨ã¹ããã2.(d)ã®å¼ã
ã¨ãã¦æ¨ã®è²¢ç®åº¦
ã
ã®ç¯å²å
ã§å°ããï¼ä¾ãã°0.2ã0.6ã¨ãï¼ã«è¨å®ããã¨ã*6ãé¨åæ¨æ¬åç
ã0.5ç¨åº¦ã«ããã¨ã*7ããããªãã¨ãæ¸ãã¦ãã£ã¦ãã¥ã¼ãã³ã°ã®åèã«ãªããã¨ã
ãªãããã©ã¡ã¼ã¿ãã¥ã¼ãã³ã°ã«ã¤ãã¦ã¯本家のGitHubにもコメントがありã
Control Overfitting
When you observe high training accuracy, but low tests accuracy, it is likely that you encounter overfitting problem.
There are in general two ways that you can control overfitting in xgboost
- The first way is to directly control model complexity
- This include max_depth, min_child_weight and gamma
- The second way is to add randomness to make training robust to noise
- This include subsample, colsample_bytree
- You can also reduce stepsize eta, but needs to remember to increase num_round when you do so.
ã¾ãããã¯ã¾ãã«æ¸ããã¦ããéãã§ãããã¤ã¢ã¹ï¼ããªã¢ã³ã¹ãã¬ã¼ããªããèãã¦ãã¥ã¼ãã³ã°ãããã£ã¦ãã¨ã§ããããªããAdabooståæ§åºæ¬çã«ã¯ã誤å¤å®ããå¦ç¿ãã¼ã¿ã«å¯¾ãã¦ã©ãã©ãç´åã«è£æ£ãã¦ãããã¿ã¤ãã®åé¡å¨ãªã®ã§ãç¹°ãè¿ãåæ°ãå¢ããã»ã©éå¦ç¿ãããããªãã¨ããç¹ã«æ³¨æãå¿
è¦ã§ãããçµ±è¨çå¦ç¿ã®åºç¤ãp.418ã®å³ãè¦ãã¨ãå®éã«ç¸®å°çetaã®å¤ã«ãã£ã¦ã¯ç¹°ãè¿ãåæ°ãå¢ããã»ã©éå¦ç¿ãé²ãã§ç²¾åº¦ãæªåããæ§åãè¦ã¦åãã¾ãã
決å®å¢çãæãã¦ã¿ãï¼XORãã¿ã¼ã³
ã¨ãããã¨ã§ããã®ã·ãªã¼ãºæä¾ã®XORãã¿ã¼ã³ãã¼ã¿ã使ãã¾ããããGitHubãªãã¸ããªããシンプル版ã複雑版ãæã£ã¦ãã¦ãããããxors, xorcã¨ããååã§ã¤ã³ãã¼ããã¦ããã¾ãã
{xgboost}ããã±ã¼ã¸ã¯ãã®ä»ã®æ°å¤ãã®æ©æ¢°å¦ç¿ç³»Rããã±ã¼ã¸ã¨ã¯ç°ãªãã使 ãformulaå¼ã«ã¯å¯¾å¿ãã¦ãã¾ããï¼æ±ï¼ãããããå¤§è¦æ¨¡ãã¼ã¿å¯¾çãªã®ã ã¨æããã¾ãããã¹ãã¼ã¹ãããªã¯ã¹å½¢å¼ãå«ããããªã¯ã¹åã§ã®ãã¼ã¿èªã¿è¾¼ã¿ãåºæ¬ã¨ãã¦ãã¾ãã
ã¢ãã«ã®å¦ç¿ã«ä½¿ã颿°ã¯xgboostã¨xgb.trainã®2ã¤ãããã¾ãããxgb.trainã®æ¹ãè²ã
調æ´ããããã®ã§ãè¦ãã§ããç¹ã«ãã¹ããã¼ã¿å´ã®æ£è§£ã©ãã«ãæã£ã¦ãã¦cross validationãããæã«ã¯ãxgb.train颿°ã§ããã°watchlist弿°ã使ã£ã¦å¦ç¿ã¹ããããã¨ã®æå¤±é¢æ°ã®å¤åãè¦ã¦ãã©ã¡ã¼ã¿ãã¥ã¼ãã³ã°ã«çããã¨ããè¸å½ãã§ãã¾ãã
# XORãã¼ã¿èªã¿è¾¼ã¿ > xors<-read.table("xor_simple.txt",header=T) > xorc<-read.table("xor_complex.txt",header=T) # ã°ãªãããä½ã > px<-seq(-4,4,0.03) > py<-seq(-4,4,0.03) > pgrid1<-expand.grid(px,py) > names(pgrid1)<-names(xors)[-3] # ããã±ã¼ã¸ããã¼ã > library(xgboost) > library(Matrix) # å ãã¼ã¿ã®ã©ãã«ãè¯ããªãã®ã§ç´ã > xors$label<-xors$label-1 > xorc$label<-xorc$label-1 # sparse.model.matrixå½¢å¼ã«ç´ã > xors.mx<-sparse.model.matrix(label~.,xors) > xorc.mx<-sparse.model.matrix(label~.,xorc) > pgrid1.mx<-sparse.model.matrix(~.,pgrid1) # xgb.DMatrixå½¢å¼ã«ç´ã > dxors<-xgb.DMatrix(xors.mx,label=xors$label) > dxorc<-xgb.DMatrix(xorc.mx,label=xorc$label) > dpgrid1<-xgb.DMatrix(pgrid1.mx) # xgboostã¢ãã«ãå¦ç¿ããããããã§ã¯xgb.train颿°ã使ãè¨æ³ã§ > xors.gbdt<-xgb.train(params=list(objective="binary:logistic",eval_metric="logloss"),data=dxors,nrounds=100) > xorc.gbdt<-xgb.train(params=list(objective="binary:logistic",eval_metric="logloss"),data=dxorc,nrounds=100) # ã·ã³ãã«ãã¿ã¼ã³ > plot(c(),type='n',xlim=c(-4,4),ylim=c(-4,4)) > par(new=T) > rect(0,0,4,4,col='#aaaaff') > par(new=T) > rect(-4,0,0,4,col='#ffaaaa') > par(new=T) > rect(-4,-4,0,0,col='#aaaaff') > par(new=T) > rect(0,-4,4,0,col='#ffaaaa') > par(new=T) > plot(xors[,-3],col=c(rep('blue',50),rep('red',50)),xlim=c(-4,4),ylim=c(-4,4),pch=19,cex=2.5) > par(new=T) > contour(px,py,array(predict(xors.gbdt,newdata=dpgrid1),dim = c(length(px),length(py))),levels = 0.5,drawlabels = T,col='purple',lwd=5,xlim=c(-4,4),ylim=c(-4,4)) # è¤éãã¿ã¼ã³ > xorc.gbdt<-xgb.train(params=list(objective="binary:logistic",eval_metric="logloss"),data=dxorc,nrounds=100) > plot(c(),type='n',xlim=c(-4,4),ylim=c(-4,4)) > par(new=T) > rect(0,0,4,4,col='#aaaaff') > par(new=T) > rect(-4,0,0,4,col='#ffaaaa') > par(new=T) > rect(-4,-4,0,0,col='#aaaaff') > par(new=T) > rect(0,-4,4,0,col='#ffaaaa') > par(new=T) > plot(xorc[,-3],col=c(rep('blue',50),rep('red',50)),xlim=c(-4,4),ylim=c(-4,4),pch=19,cex=2.5) > par(new=T) > contour(px,py,array(predict(xorc.gbdt,newdata=dpgrid1),dim = c(length(px),length(py))),levels = 0.5,drawlabels = T,col='purple',lwd=5,xlim=c(-4,4),ylim=c(-4,4))
åç´ãã¿ã¼ã³ã«ãããæ±ºå®å¢çã¯æ®éã®æ±ºå®æ¨ã¨å®å ¨ã«åãã§ãããè¤éãã¿ã¼ã³ã®æ¹ã¯éå¸¸ã®æ±ºå®æ¨ããè¤éãªä¸ã«ã以åè¦ãã©ã³ãã ãã©ã¬ã¹ãã®æ±ºå®å¢çã¨ãé°å²æ°ãç°ãªãããã§ãããã ãã©ã³ãã ãã©ã¬ã¹ãã®å²ã¨ããã£ã¡ãã£ãªæãã«æ¯ã¹ãã¨ãçã®æ±ºå®å¢çï¼ããããå ã®èã赤ã¨èãéã§å¡ãåããå¢çï¼ã«ããªãè¿ãã¨ããå°è±¡ã¯ããã¾ããã
次ã«ããã©ã¡ã¼ã¿ãã¥ã¼ãã³ã°ã®å½±é¿ãè¦ã¦ã¿ã¾ãããã
# ãããªã¼ãã¼ãã£ããã£ã³ã°å¼·ã > xorc.gbdt<-xgb.train(params=list(objective="binary:logistic",eval_metric="logloss",eta=1,max_depth=8),data=dxorc,nrounds=100) > plot(c(),type='n',xlim=c(-4,4),ylim=c(-4,4)) > par(new=T) > rect(0,0,4,4,col='#aaaaff') > par(new=T) > rect(-4,0,0,4,col='#ffaaaa') > par(new=T) > rect(-4,-4,0,0,col='#aaaaff') > par(new=T) > rect(0,-4,4,0,col='#ffaaaa') > par(new=T) > plot(xorc[,-3],col=c(rep('blue',50),rep('red',50)),xlim=c(-4,4),ylim=c(-4,4),pch=19,cex=2.5) > par(new=T) > contour(px,py,array(predict(xorc.gbdt,newdata=dpgrid1),dim = c(length(px),length(py))),levels = 0.5,drawlabels = T,col='purple',lwd=5,xlim=c(-4,4),ylim=c(-4,4)) # ããæ±åå¼·ã > xorc.gbdt<-xgb.train(params=list(objective="binary:logistic",eval_metric="logloss",eta=0.1,max_depth=4),data=dxorc,nrounds=100) > plot(c(),type='n',xlim=c(-4,4),ylim=c(-4,4)) > par(new=T) > rect(0,0,4,4,col='#aaaaff') > par(new=T) > rect(-4,0,0,4,col='#ffaaaa') > par(new=T) > rect(-4,-4,0,0,col='#aaaaff') > par(new=T) > rect(0,-4,4,0,col='#ffaaaa') > par(new=T) > plot(xorc[,-3],col=c(rep('blue',50),rep('red',50)),xlim=c(-4,4),ylim=c(-4,4),pch=19,cex=2.5) > par(new=T) > contour(px,py,array(predict(xorc.gbdt,newdata=dpgrid1),dim = c(length(px),length(py))),levels = 0.5,drawlabels = T,col='purple',lwd=5,xlim=c(-4,4),ylim=c(-4,4))
etaã®å¤ãå¤ãããã¨ã§ãªã¼ãã¼ãã£ããã£ã³ã°ããããéã«æ±åãå¼·ãããã¨ãã§ãããã¨ãè¦ã¦åãã¾ãããä»åã®XORãã¼ã¿ã¯æ¬¡å
æ°ããµã³ãã«ãµã¤ãºãå°ããã®ã§ä»ã¯ããã£ã¦ãã¾ãããããã¡ããsubsampleãcolsample_bytreeãªã©ã調æ´ãããã¨ã§ããå·§ã¿ã«ãã¥ã¼ãã³ã°ãããã¨ãã§ãã¾ãã
決å®å¢çãæãã¦ã¿ãï¼ç·å½¢åé¢å¯è½ãã¿ã¼ã³
å®ã¯è±èªããã°ã§ã¯ç·å½¢åé¢å¯è½ãã¿ã¼ã³ã§ã決å®å¢çãæãã¨ããã®ããã£ã¦ããã®ã§ããã¡ãã§ããã£ã¦ã¿ã¾ããããGitHubãªãã¸ããªãã2クラスパターンã3クラスパターンãDLãã¦ãã¦ä»¥ä¸ã®ããã«ã¤ã³ãã¼ããã¦ãã ããã
# ç·å½¢åé¢å¯è½ãã¿ã¼ã³ > dbi<-read.table("linear_bi.txt",header=T) > dml<-read.table("linear_multi.txt",header=T) # ã°ãªãããä½ã > px2<-seq(-0.5,4.5,0.03) > py2<-seq(-0.5,4.5,0.03) > pgrid2<-expand.grid(px2,py2) > names(pgrid2)<-names(dbi)[-3] # sparse.model.matrixå½¢å¼ã«ç´ã > dbi.mx<-sparse.model.matrix(label~.,dbi) > dml.mx<-sparse.model.matrix(label~.,dml) > pgrid2.mx<-sparse.model.matrix(~.,pgrid2) # xgb.DMatrixå½¢å¼ã«ç´ã > ddbi<-xgb.DMatrix(dbi.mx,label=dbi$label) > ddml<-xgb.DMatrix(dml.mx,label=dml$label) > dpgrid2<-xgb.DMatrix(pgrid2.mx) # xgb.train颿°ã§å¦ç¿ã¢ãã«ãæ¨å®ãã > dbi.gbdt<-xgb.train(params=list(objective="binary:logistic",eval_metric="logloss"),data=ddbi,nrounds=100) > dml.gbdt<-xgb.train(params=list(objective="multi:softmax",num_class=3,eval_metric="mlogloss"),data=ddml,nrounds=100) # å¤ã¯ã©ã¹ã®å ´åã¯objectiveã¨num_classã®æå®ã«æ³¨æ # 2ã¯ã©ã¹ãã¿ã¼ã³ > plot(c(),type='n',xlim=c(-0.5,3.5),ylim=c(-0.5,3.5)) > par(new=T) > polygon(c(-0.5,-0.5,3.5),c(3.5,-0.5,-0.5),col='#aaaaff') > par(new=T) > polygon(c(-0.5,3.5,3.5),c(3.5,-0.5,3.5),col='#ffaaaa') > par(new=T) > plot(dbi[,-3],pch=19,col=c(rep('blue',25),rep('red',25)),cex=3,xlim=c(-0.5,3.5),ylim=c(-0.5,3.5)) > par(new=T) > contour(px2,py2,array(predict(dbi.gbdt,newdata=dpgrid2),dim = c(length(px2),length(py2))),xlim=c(-0.5,3.5),ylim=c(-0.5,3.5),lwd=6,col='purple',levels = 0.5,drawlabels = T) # 3ã¯ã©ã¹ãã¿ã¼ã³ > plot(c(),type='n',xlim=c(-0.5,4.5),ylim=c(-0.5,4.5)) > par(new=T) > polygon(c(-0.5,-0.5,3.5),c(3.5,-0.5,-0.5),col='#aaaaff') > par(new=T) > polygon(c(-0.5,3.5,4.5,4.5,1.0,-0.5),c(3.5,-0.5,-0.5,1.0,4.5,4.5),col='#ffaaaa') > par(new=T) > polygon(c(1.0,4.5,4.5),c(4.5,1.0,4.5),col='#ccffcc') > par(new=T) > plot(dml[,-3],pch=19,col=c(rep('blue',25),rep('red',25),rep('green',25)),cex=3,xlim=c(-0.5,4.5),ylim=c(-0.5,4.5)) > par(new=T) > contour(px2,py2,array(predict(dml.gbdt,newdata=dpgrid2),dim=c(length(px2),length(py2))),xlim=c(-0.5,4.5),ylim=c(-0.5,4.5),col="purple",lwd=6,drawlabels=T,levels=c(0.5,1.5))
ã¢ãã£ãã£ãã£ãã£ãå
¨ç¶åé¡ã§ãã¦ãªãorzãã£ã¦ããã®ç·å½¢åé¢å¯è½ãã¿ã¼ã³ã«å¯¾ããæ±ºå®å¢çã®ãã¡ãå æ¸ã¯å®å
¨ã«æ±ºå®æ¨ã®ãããè¸è¥²ãã¦ãæãã§ãããããã¨ãããã¨ã§ããããªXgboostã¨ããã©ãå
¸åçãªç·å½¢åé¢å¯è½ãã¿ã¼ã³ã«å¯¾ãã¦ã¯ãã¾ãæ©è½ããªãã¿ããã§ãã
ã¾ã¨ã
- Xgboostã¯ãã¥ã¼ãã³ã°æ¬¡ç¬¬ã§Deep Learningã«è¿«ãé«ç²¾åº¦ãããããå²ã¨ä½ããã¥ã¼ãã³ã°ã³ã¹ã*8ã§å®ç¾ã§ãã
- ãã ãæ ¹åºã«ããã®ã¯æ¨¹æ¨ã¢ãã«ãªã®ã§ãä¾ãã°æ±ºå®æ¨ãªã©ã¨åããããªæ¯ãèãã示ããã¨ãå¤ãã£ã½ã
- ãªã®ã§ç·å½¢åé¢ä¸å¯è½ãã¿ã¼ã³ã«å¯¾ãã¦ã¯æ¥µãã¦å¼·åãªä¸æ¹ã§ãç·å½¢åé¢å¯è½ãã¿ã¼ã³ã«å¯¾ãã¦ã¯ãã¾ãæ©è½ããªãå¯è½æ§ãé«ã
ã£ã¦ã¨ããã§ãããããè²ã
ãªæå³ã§è峿·±ãåé¡å¨ã ã¨æããã®ã§ãä»å¾ãæã«è§¦ããã®æåã試ããªããçè§£ãæ·±ãã¦ãããããªã¨æã£ã¦ã¾ãã
*1:éç§°ãã«ã¹ãã©æ¬ãã ããã§ã
*2:å®ã¯ããªãã®é¨åãESLããã®å¼ç¨ã ã£ããããã®ã§ãã«ã¹ãã©æ¬ãæã«å ¥ããªãæ¹ã¯ãã¡ããèªãã§ãè¯ããã
*3:ãã®è¾ºåã®çè§£ãææ§ãªã®ã§è©³ããäººã¯æ¯éããµã«ãªãæãã¦ããã ããã
*4:èª¤è¨³ã¨æããé¨åã説æãåããã«ããã¨ãããç´ãã
*5:{xgboost}ããã±ã¼ã¸ã§ã¯max_depth
*6:{xgboost}ããã±ã¼ã¸ã§ã¯eta
*7:{xgboost}ããã±ã¼ã¸ã§ã¯subsample
*8:ãã¥ã¼ãã³ã°ãã©ã¡ã¼ã¿ã®ç¨®é¡ãéãã®ã§ãä¾ãã°Deep Learningã¨éã£ã¦ã¦ãããæ°ãå»¶ã ãã¥ã¼ãã³ã°ããã¿ãããªè¦å´ã¯è¦ããªã