グローバルナビゲーション

統計と情報の専⾨誌「エストレーラ」 ESTRELA 参考

2014年5月号(No.242)50~53ページ
連載「フリーソフトによるデータ解析・マイニング」第130回(矢野 環 著)より

ランダムフォレストによる連続変数の重要度バイアスの確認のスクリプト compimp

2014年5月号の連載第130回「Random Forest ― 変数重要度のバイアス ―」において紹介したスクリプトcompimpを用意しました。ダウンロードして、記事と併せてご活用ください。

[内容]

ランダムフォレストの出力する変数重要性を、設定によって比較する。
アイテム変数はカテゴリ数が多い変数が重要度が高くでるという、バイアス問題がよく知られている。party の cforest はそれを改善する様に作成されている。
連続変数の場合においても、比較的高い相関をもった変数がある場合、通常のランダムフォレストよりも、cforestの方が本来高く出るべき変数の重要度がより高くでて好ましいことが知られている。このことを実際に確認する。

[実行]

パラメータは事前に与えているので、実行は
compimp()
のみで良い。cforest の時間のかかる処理を行っているので5分程度かかる可能性がある。必要に応じて末尾に示すパラメータを変更して結果を比較すれば良い。

[処理説明]

処理は次の通り。標準正規乱数 B 個を x1とし、それに、平均0,標準偏差 sd2 と sdy の正規乱数を加えたものを x2, y とする。さらに x3,...,x5 を標準正規乱数とする。
まず、y,x1,x2,x3の散布図行列を描き、y を x1...,x5 により回帰した結果を示す。
そして、ランダムフォレスト6通りの重要度の求めかた(連載本文を参照されたい)により N 回重要度を求め、5変数の重要度の分布を箱ひげ図で示す。さらに、
(x1 の重要度)/(x2 の重要度)
の N 回の分布を箱ひげ図で示す。その結果、cforest において conditional=TRUEを
設定した2通りが適切である(箱ひげ図左から4番めと6番目)ことが明確になる。
必要なすべての関数は内部で定義している。

[出典]

これは次のポスト(2012年7月)を元に整備したものである。
http://alandgraf.blogspot.jp/2012/07/random-forest-variable-importance.html

[データ]

x1=rnorm(B)
x2=x1+ rnorm(B,0,sd2)
y= x1+ rnorm(B,0,sdy)
df <- data.frame(y,x1,x2,x3=rnorm(B),x4=rnorm(B),x5=rnorm(B))

[パラメータ]

全てのパラメータとそのデフォルトは次の様になっている。

B=100, # dataの行数
N=20, # トライアル回数
ntree=50, # 各 forest での tree の数
new.plot=FALSE, # 新規のグラフィクスを開くかどうか
dpanel=panel.hist, # 散布図行列対角パネル ヒストグラム
          # 密度関数も可能 panel.dens
upanel=panel.pcor, # 散布図行列上部パネル 相関・偏相関係数
          # 相関行列のみも可能 panel.cor
rfsel=NULL, # randomForestを使用。 NULL以外なら RRFを使用
imptype=1, # 重要度を 平均正確度減少とする
sd2=1, # x2 の雑音乱数の標準偏差
sdy=0.2, # y  の雑音乱数の標準偏差

  • ランダムフォレストによる連続変数の重要度バイアスの確認のスクリプト(compimp.R 7KB)
ページトップへ戻る