訳注
http://topepo.github.io/caret/varimp.html の和訳です。
わーわかんないところばかりだ、ごめんなさい。
まー各モデルにおいて予測因子の影響の度合いを重要度として得ることができますよ、くらいのことで、ごめんなさい。
変数の重要度の評価関数は2つに分かれます:モデルの情報を用いるものと用いないものです。モデルを用いるアプローチの長所は、モデルのパフォーマンスにより密接しており、予測因子と重要度の計算の間の相関構造を生成することができます。重要度の計算方法は:
- 多くの分類モデルについて、各クラス(例外は分類木、バギング木、ブースティング木)に関するそれぞれの予測因子毎の分離性能の重要度があります。
- varImp.train の scale 属性を FALSE に設定しない限り、重要度の最大値は100です。
モデル特有の計量値 Model Specific Metrics
以下の各モデルに関する各変数の貢献を評価することが可能です:
- 線形モデル Linear Models:各モデルのパラメータについてのt統計量の絶対値を用いる。
- ランダムフォレスト Random Forest:Rパッケージによると:「それぞれの木について、out-of-bag (訳注:学習に使われなかったデータ)に基づく予測精度が記録されています。各予測変数のパーミューテーションが行われた後に同じことが実施されます。 (Then the same is done after permuting each predictor variable.) 2つの間の違いはすべての木に関しての平均と標準誤差による正規化です。(The difference between the two accuracies are then averaged over all trees, and normalized by the standard error.) 回帰ではそれぞれの木について out-of-bag データのMSEが計算され、変数のパーミューテーション後にも同様に計算されます。違いは平均と標準誤差による正規化です。ある変数について標準誤差が0ならば、正規化は行われません」
-
部分最小二乗法 Partial Least Squares: 変数の重要度は、回帰係数の絶対値の合計の重みにもとづいて表されます。重みは、PLS成分の数の二乗の合計を減らす関数として、またそれぞれのアウトカムごとに別に計算されます。(The weights are a function of the reduction of the sums of squares across the number of PLS components and are computed separately for each outcome.) こうして、係数の貢献度は二乗の合計を減らすことに関する重みとなります。
Recursive Partitioning: 各分割の各変数に寄与する損失関数(例 平均二乗誤差)の削減を表として、また合計が返されます。それらの変数の候補は重要ですが分割には使われないので、トップの競争している変数は各分割において表とされている。(Also, since there may be candidate variables that are important but are not used in a split, the top competing variables are also tabulated at each split.) rpart.control において maxcompete 属性をオフにすることでこれが実施されます。この方法は、クラス特定性の重要度を与えるものとしては現在用いられず、返り値は factor となります。(This method does not currently provide class-specific measures of importance when the response is a factor) - バギング木 Bagged Trees: 単純な木と同じ方法がブートストラップ木に適用され、総合的な重要度が返されます。
- ブースト木 Boosted Trees: 単純な木と同じアプローチですが、ブーストの各段階の重要度の合計となります(gbm パッケージの vignette を参照のこと)。
- Multivariate Adaptive Regression Splines: MARS モデルには backwards elimination feature selection routine を含み、誤差の一般化クロスバリデーション (GCV) 評価の最小化をするように見えます。varImp 関数は GCV のような各予測因子についてのモデル統計量の変化を追います。また、各予測因子の特徴がモデルに加えられたとき統計量の削減の見積もります。この削減の合計値が変数の重要度となります。予測因子がどの MARS 関数にも用いられない場合、重要度は0となります。MARS モデルでの変数の重要度の評価には3つの統計量が用いられます。varImp (object, value = "gcv") を用いると一般化クロスバリデーション統計量の削減が行われます。 However, there are some cases when terms are retained in the model that result in an increase in GCV. MARS についての負の変数の重要度は0とします。 Terms with non-zero importance that were not included in the final, pruned model are also listed as zero. varImp(object, value = "rss") を用いると、残差平方和 (RSS) の変化をモニタし、負にならないようになります。varImp(object, value = "nsubsets") オプションを用いると、サブセット(最終的な刈り取られたモデル)において、各変数が用いられた回数を返します。2008年6月以前は、varImp は MARS モデルについての重要度を評価する内部関数でした。現在は、earth パッケージでの evimp 関数のラッパーとなっています。
- Nearest shrunken centroids: クラス重心と全体の重心の違いは変数の影響度の計測に用いられている( pamr.predict 参照)。クラス重心とデータ全体の重心の違いの大きな点はクラス間の分離の大きさによります。トレーニングセットの予測値は クラス pamrtrained のオブジェクトが varImp によって与えられるときに得られます。
- Cubist: Cubist の出力には変数使用の統計値が含まれます。各変数のパーセントで表示されます。この出力は summary.cubist の出力と矛盾する可能性があります。それぞれの木の分離において、 Cubist は線形モデル(特徴選択後の)を保存し、現在の分離あるいは上位の分離における各変数の使用度を保持しています。Quinlan (1992) は。木に属する親と子のモデルの線形の組み合わせを各モデルが予測するときの平滑化アルゴリズムについて議論しています。それによれば、最終的な予測は、最初のノードから最後のノードへのすべての線形モデルとなります。予測(出力の最終的なモデルに対するものとしての)に含まれるすべてのモデルを反映した Cubist の出力をパーセントで表します。変数の重要度は、ルールの状態とモデルの使用の線形の組み合わせとして示されます。
モデルから独立した計測
重要度評価のためのモデル特異の方法がなければ(あるいは useModel = FALSE 属性を varImp で用いた場合)各予測因子の重要度は "filter" アプローチで独立に評価できます。
分類問題では、ROC曲線解析が各予測因子について実施されます。2分類問題ではカットオフの系列が、クラス分類をする予測データに適用されます。感度と特異度が各カットオフについて計算され、ROC曲線が計算されます。台形ルールがROC曲線下部面積の計算に用いられます。このエリアが変数の重要度の計測に用いられます。他クラス分類問題では、ペアワイズ問題に分割され各クラスのペア(すなわち、クラス1とクラス2、クラス2とクラス3、など)についてROC曲線の下部面積が計算されます。 クラスの特定については、ペアワイズAUCの下部面積の最大化が変数重要度の計測に用いられます。
回帰問題では、各予測因子とアウトカムの間の関係が評価されます。nonpara 属性がモデルフィッティング技術に採用されます。nonpara = FALSE のときは、線形モデルがフィッティングに用いられ、予測因子の傾きについてのt値の絶対値が使われます。一方、loess smoother がアウトカムと予測因子の間のフィッティングに用いられます。ヌルだけのモデルの切片に対するこのモデルのR^2統計量が計算されます。この値が変数の重要度として返されます。
例
モデルのトレーニングにおいて、いくつかのもでるが例のデータのフィッティングに用いられます。ブースティング木モデルでは変数の重要度のスコアが元から計算されますが、サポートベクターマシンや regularized discriminant analysis では計算されません。
gbmImp <- varImp(gbmFit3, scale = FALSE)
gbmImp
gbm variable importance
only 20 most important variables shown (out of 60)
Overall
V11 20.303
V51 12.987
V12 12.713
V36 10.505
V21 8.775
V45 7.881
V23 6.075
V31 5.721
V9 5.176
V46 4.921
V48 4.268
V4 4.123
V16 3.900
V39 3.775
V37 2.939
V33 2.854
V1 2.646
V17 2.636
V18 2.591
V10 2.541
この関数では自動的に重要度スコアが正規化され0から100の値で表されます。scale = FALSE とすると正規化されません。
各予測因子のROC曲線の下部面積を得るには、filterVarImp 関数を使います。ROC曲線の下部面積は各クラスについて計算されます。
RocImp <- filterVarImp(x = training[, -ncol(training)], y = training$Class)
head(RocImp)
M R
V1 0.6273646 0.6273646
V2 0.5765656 0.5765656
V3 0.5999674 0.5999674
V4 0.6614481 0.6614481
V5 0.6520711 0.6520711
V6 0.5923842 0.5923842
重要度の計算が元から入っていない(が、ある)場合には、varImp でスコアが得られます。SVM 分類モデルでは、デフォルトで ROC曲線の下部面積を計算します。
RocImp2 <- varImp(svmFit, scale = FALSE)
RocImp2
ROC curve variable importance
only 20 most important variables shown (out of 60)
Importance
V11 0.7766
V12 0.7564
V10 0.7272
V9 0.7252
V46 0.7088
V51 0.7047
V49 0.7012
V13 0.6984
V47 0.6972
V36 0.6885
V48 0.6822
V21 0.6742
V52 0.6694
V45 0.6671
V4 0.6614
V5 0.6521
V37 0.6508
V35 0.6494
V20 0.6411
V44 0.6360
varImp.train による重要度スコアでは、結果を plot で可視化できます。下の plot では、見やすくするために top オプションを用いています。
plot(gbmImp, top = 20)
(図略)