randomforestで高次元の変数重要度を見る #japanr lt

17
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

Upload: akifumi-eguchi

Post on 06-Jan-2017

1.577 views

Category:

Data & Analytics


2 download

TRANSCRIPT

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

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

Janitza,S.,Celik,E.,&Boulesteix,A.L.(2015).AcomputaAonallyfastvariableimportancetestforrandomforestsforhigh-dimensionaldata.

20161127:Japan.RLT@Yahoo!:TwiTer:@siero5335

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

機械学習で重要な課題といえば?      特徴量の抽出!

特にデータが高次元の場合、どれが重要な特徴量なのかわかりにくい

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

機械学習で重要な課題といえば?      特徴量の抽出!

特にデータが高次元の場合、どれが重要な特徴量なのかわかりにくい

特徴量抽出についての参考資料

hTp://www.slideshare.net/Keiku322/r48rtokyor hTp://www.slideshare.net/sercantahaahi/feature-selecAon-with-r-in-jp

XgboostのGBDTfeature,FeatureHashing詳細 RFのジニ係数から特徴選択

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

機械学習で重要な課題といえば?      特徴量の抽出!

特にデータが高次元の場合、どれが重要な特徴量なのかわかりにくい

特徴量抽出についての参考資料

RFだとGini係数あるいはpermutaAonから出す変数重要度があるが今回はpermutaAonの変数重要度に基づいた手法

hTp://www.slideshare.net/Keiku322/r48rtokyor hTp://www.slideshare.net/sercantahaahi/feature-selecAon-with-r-in-jp

XgboostのGBDTfeature,FeatureHashing詳細 RFのジニ係数から特徴選択

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

変数重要度の分布を計算できれば仮説検定もできるはず

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

Janitza,S.,Celik,E.,&Boulesteix,A.L.(2015).AcomputaAonallyfastvariableimportancetestforrandomforestsforhigh-dimensionaldata.

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

どうやって使うの?

hTps://cran.r-project.org/web/packages/vita/index.html

randomforestとvitapackageを組み合わせて使うのが普通だが、ranger内に関数が用意されてて早くて楽なので今回はそっちを使う

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

どうやって使うの?rangerのすがた library(ranger)#>version0.5.0library(mlbench)

data(Sonar,package="mlbench")Sonar[,61]=as.numeric(Sonar[,61])-1Sonar<-as.data.frame(Sonar)

testRF<-ranger(Class~.,data=Sonar,mtry=5,importance="permutaAon")

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

どうやって使うの?rangerのすがた library(ranger)#>version0.5.0library(mlbench)

data(Sonar,package="mlbench")Sonar[,61]=as.numeric(Sonar[,61])-1Sonar<-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付きででてくる

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

どうやって使うの?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)

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

おおまかなしくみ

VIj:変数Xjの変数重要度,0以上であれば判別に寄与してる

(Xjを使うより、Xjの独立したコピーであるXj*を使ったほうが誤分類率が高い)

通常であれば下記のように、OOBから変数重要度を求める

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

おおまかなしくみ Hold-outなら2個,CVならk個のモデルをつくり、それぞれのモデルにおける変数重要度を求めることもできるSlを使って算出

Holdout K-foldCV

(目的変数がカテゴリの場合)

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

おおまかなしくみ Hold-outなら2個,CVならk個のモデルをつくり、それぞれのモデルにおける変数重要度を求めることもできるSlを使って算出

Holdout K-foldCV

(目的変数がカテゴリの場合)

今回はこっちを使う Vitapackageだとkも指定できる

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

おおまかなしくみ

1.  元データをランダムに半分こ

2.  下記の感じでF^0を算出する

3.  p-valueを より算出

例:変数重要度が負のやつ全て

例:変数重要度が0のやつ全て

例:変数重要度が負のモノすべてに-1を掛けた値

:empiricalcumulaAvedistribuAonfuncAon

馴染み深いp-valueが出てくるのでカットオフラインがわかりやすい

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

どうでもいいこと

著者はメディカルインフォマティクス畑の人D論が出てるので熱心な方は以下参照(今年の?hTps://edoc.ub.uni-muenchen.de/19671/1/Janitza_Silke.pdf

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

EnjoyfeatureselecAon!

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

どうやって使うの?vitaのすがた

hTps://cran.r-project.org/web/packages/vita/index.html

randomforestとvitapackageを組み合わせて使うのが普通だが、ranger内に関数が用意されてて早くて楽なので今回はそっちを使う

Vitapackageの場合の使い方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)

または