Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Randomforestで高次元の変数重要度を見る #japanr LT

5,155 views

Published on

JapanR 2016でのLT資料です

Published in: Data & Analytics
  • Be the first to comment

Randomforestで高次元の変数重要度を見る #japanr LT

  1. 1. Randomforestで高次元の変数重要度を見る      Janitza, S., Celik, E., & Boulesteix, A. L. (2015). A computaAonally fast variable importance test for random forests for high-dimensional data. 20161127: Japan.R LT @Yahoo!: TwiTer: @siero5335
  2. 2. 機械学習で重要な課題といえば?      特徴量の抽出! 特にデータが高次元の場合、 どれが重要な特徴量なのかわかりにくい
  3. 3. 機械学習で重要な課題といえば?      特徴量の抽出! 特にデータが高次元の場合、 どれが重要な特徴量なのかわかりにくい 特徴量抽出についての参考資料 hTp://www.slideshare.net/Keiku322/r48rtokyor hTp://www.slideshare.net/sercantahaahi/feature- selecAon-with-r-in-jp XgboostのGBDT feature, FeatureHashing詳細 RFのジニ係数から特徴選択
  4. 4. 機械学習で重要な課題といえば?      特徴量の抽出! 特にデータが高次元の場合、 どれが重要な特徴量なのかわかりにくい 特徴量抽出についての参考資料 RFだとGini係数あるいはpermutaAonから出す変数重要度 があるが今回はpermutaAonの変数重要度に基づいた手法 hTp://www.slideshare.net/Keiku322/r48rtokyor hTp://www.slideshare.net/sercantahaahi/feature- selecAon-with-r-in-jp XgboostのGBDT feature, FeatureHashing詳細 RFのジニ係数から特徴選択
  5. 5. 変数重要度の分布を計算できれば仮説検定もできるはず Randomforestで高次元の変数重要度を見る      Janitza, S., Celik, E., & Boulesteix, A. L. (2015). A computaAonally fast variable importance test for random forests for high-dimensional data.
  6. 6. どうやって使うの? hTps://cran.r-project.org/web/packages/vita/index.html randomforestとvita packageを組み合わせて使うのが普通だが、 ranger内に関数が用意されてて早くて楽なので今回はそっちを使う
  7. 7. どうやって使うの?rangerのすがた library(ranger) # > version 0.5.0 library(mlbench) data(Sonar, package="mlbench") Sonar[,61] = as.numeric(Sonar[,61])-1 Sonar <- as.data.frame(Sonar) testRF <- ranger(Class ~ ., data = Sonar, mtry = 5, importance = "permutaAon")
  8. 8. どうやって使うの?rangerのすがた library(ranger) # > version 0.5.0 library(mlbench) data(Sonar, package="mlbench") Sonar[,61] = as.numeric(Sonar[,61])-1 Sonar <- as.data.frame(Sonar) testRF <- ranger(Class ~ ., data = Sonar, mtry = 5, importance = "permutaAon") importance_pvalues(testRF, method = "janitza", conf.level = 0.95) importanceが信頼区間, p-value付きででてくる
  9. 9. どうやって使うの?caretのすがた library(ranger) library(caret) library(mlbench) data(Sonar, package="mlbench") train.x = data.matrix(Sonar[train.ind, 1:60]) train.y = Sonar[train.ind, 61] tr = trainControl(method = "repeatedcv”, number = 5, repeats = 5) grid = expand.grid(mtry = 1:20) set.seed(71) ranger_fit = train(train.x, train.y, method = "ranger", tuneGrid = grid, trControl=tr, importance = "permutaAon") importance_pvalues(ranger_fit$finalModel, method = "janitza", conf.level = 0.95)
  10. 10. おおまかなしくみ VIj: 変数Xjの変数重要度, 0以上であれば判別に寄与してる (Xjを使うより、Xjの独立したコピーであるXj*を使ったほうが 誤分類率が高い) 通常であれば下記のように、OOBから変数重要度を求める
  11. 11. おおまかなしくみ Hold-outなら2個, CVならk個のモデルをつくり、 それぞれのモデルにおける変数重要度を求めることもできる Slを使って算出 Holdout K-fold CV (目的変数がカテゴリの場合)
  12. 12. おおまかなしくみ Hold-outなら2個, CVならk個のモデルをつくり、 それぞれのモデルにおける変数重要度を求めることもできる Slを使って算出 Holdout K-fold CV (目的変数がカテゴリの場合) 今回はこっちを使う Vita packageだと kも指定できる
  13. 13. おおまかなしくみ 1.  元データをランダムに半分こ 2.  下記の感じでF^ 0を算出する 3.  p-valueを より算出 例: 変数重要度が負のやつ全て 例: 変数重要度が0のやつ全て 例: 変数重要度が負のモノすべて に-1を掛けた値 : empirical cumulaAve distribuAon funcAon 馴染み深いp-valueが出てくるので カットオフラインがわかりやすい
  14. 14. どうでもいいこと 著者はメディカルインフォマティクス畑の人 D論が出てるので熱心な方は以下参照(今年の? hTps://edoc.ub.uni-muenchen.de/19671/1/Janitza_Silke.pdf
  15. 15. Enjoy feature selecAon !
  16. 16. どうやって使うの?vitaのすがた hTps://cran.r-project.org/web/packages/vita/index.html randomforestとvita packageを組み合わせて使うのが普通だが、 ranger内に関数が用意されてて早くて楽なので今回はそっちを使う Vita packageの場合の使い方 cv_vi = CVPVI(X,y,k = 2,mtry = 3, ntree = 1000,ncores = 4) cv_p = NTA(cv_vi$cv_varim) summary(cv_p,pless = 0.1) cl.rf = randomForest(X,y,mtry = 3,ntree = 500, importance = TRUE) pvi_p = NTA(importance(cl.rf, type=1, scale=FALSE)) summary(pvi_p) または

×