狠狠撸

狠狠撸Share a Scribd company logo
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
機械学習で重要な課題といえば??????
特徴量の抽出!		
特にデータが高次元の場合、	
どれが重要な特徴量なのかわかりにくい
機械学習で重要な課題といえば??????
特徴量の抽出!		
特にデータが高次元の場合、	
どれが重要な特徴量なのかわかりにくい	
	
特徴量抽出についての参考資料	
	
	
	
	
	
	
	
hTp://www.slideshare.net/Keiku322/r48rtokyor	 hTp://www.slideshare.net/sercantahaahi/feature-
selecAon-with-r-in-jp	
XgboostのGBDT	feature,	FeatureHashing詳細	 RFのジニ係数から特徴選択
機械学習で重要な課題といえば??????
特徴量の抽出!		
特にデータが高次元の場合、	
どれが重要な特徴量なのかわかりにくい	
	
特徴量抽出についての参考資料	
	
	
	
	
	
	
	
	
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のジニ係数から特徴選択
変数重要度の分布を計算できれば仮説検定もできるはず	
	Randomforestで高次元の変数重要度を見る?????
Janitza,	S.,	Celik,	E.,	&	Boulesteix,	A.	L.	(2015).		
A	computaAonally	fast	variable	importance	test	for	random	forests	for	high-dimensional	data.
どうやって使うの?
hTps://cran.r-project.org/web/packages/vita/index.html	
randomforestとvita	packageを組み合わせて使うのが普通だが、	
ranger内に関数が用意されてて早くて楽なので今回はそっちを使う
どうやって使うの?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")
どうやって使うの?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付きででてくる
どうやって使うの?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_?t	=	train(train.x,	train.y,	method	=	"ranger",	
tuneGrid	=	grid,	trControl=tr,	importance	=	"permutaAon")	
	
importance_pvalues(ranger_?t$?nalModel,	method	=	"janitza",		
		conf.level	=	0.95)
おおまかなしくみ
VIj:	変数Xjの変数重要度,	0以上であれば判別に寄与してる	
	
(Xjを使うより、Xjの独立したコピーであるXj*を使ったほうが
誤分類率が高い)	
通常であれば下記のように、OOBから変数重要度を求める
おおまかなしくみ
Hold-outなら2個,	CVならk個のモデルをつくり、	
それぞれのモデルにおける変数重要度を求めることもできる	
	
	
	
	
Slを使って算出	
Holdout	 K-fold	CV	
(目的変数がカテゴリの場合)
おおまかなしくみ
Hold-outなら2個,	CVならk個のモデルをつくり、	
それぞれのモデルにおける変数重要度を求めることもできる	
	
	
	
	
Slを使って算出	
Holdout	 K-fold	CV	
(目的変数がカテゴリの場合)	
今回はこっちを使う	 Vita	packageだと	
kも指定できる
おおまかなしくみ
1.? 元データをランダムに半分こ	
2.? 下記の感じでF^
0を算出する	
3.? p-valueを より算出	
例:	変数重要度が負のやつ全て	
例:	変数重要度が0のやつ全て	
例:	変数重要度が負のモノすべて
に-1を掛けた値	
:	empirical	cumulaAve	distribuAon	funcAon	
馴染み深いp-valueが出てくるので	
カットオフラインがわかりやすい
どうでもいいこと
著者はメディカルインフォマティクス畑の人	
D論が出てるので熱心な方は以下参照(今年の?	
hTps://edoc.ub.uni-muenchen.de/19671/1/Janitza_Silke.pdf
Enjoy	feature	selecAon	!
 Randomforestて?高次元の変数重要度を見る #japanr LT
どうやって使うの?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)	
または

More Related Content

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