読者です 読者をやめる 読者になる 読者になる

GBMによる変数選択

 今回は、gbmパッケージを使って、勾配ブースティング (gradient boosting) による変数選択を行ってみます。*1 分析データは、お馴染みのirisデータセットとします。

# パッケージの読み込み
library(gbm)
# 勾配ブースティング
iris.gbm <- gbm(Species ~ ., distribution = "multinomial", data = iris, n.trees = 1000, verbose = FALSE, n.cores = 1)
# 変数重要度の視覚化
summary(iris.gbm)

 上記のスクリプトを実行すると、以下のような図が出力されます。*2

f:id:langstat:20150521150641p:plain

 この図で視覚化されている変数重要度 (relative influence)*3 の情報は、以下のように取得することができます。

# 変数重要度の確認
summary(iris.gbm)$rel.inf
summary(iris.gbm)$var

 上記のスクリプトを実行すると、以下のような結果が出力されます。

# rel.inf
[1] 61.49172295 35.97010162  2.51312590  0.02504953
# var
[1] Petal.Length Petal.Width  Sepal.Width  Sepal.Length
Levels: Petal.Length Petal.Width Sepal.Length Sepal.Width

 そして、これらの情報を使うことで、バープロット以外の視覚化を行うことも可能です。以下の例では、randomForestパッケージのvarImpPlot関数のようなドットチャートを描いています。

# ドットチャートによる変数重要度の視覚化
dotchart(rev(summary(iris.gbm)$rel.inf), labels = rev(summary(iris.gbm)$var), pch = 16)

 上記のスクリプトを実行すると、以下のような図が出力されます。

f:id:langstat:20150521151732p:plain

*1:xgboostパッケージを利用して、勾配ブースティングを実行することもできます。

*2:いつものMacではなく、出先のWindowsで描画したので、あまり綺麗な画像ではありません。。。

*3:この統計量に関して、公式マニュアルには、"relative.influence is the default and is the same as that described in Friedman (2001). The other current (and experimental) choice is permutation.test.gbm. This method randomly permutes each predictor variable at a time and computes the associated reduction in predictive performance. This is similar to the variable importance measures Breiman uses for random forests, but gbm currently computes using the entire training dataset (not the out-of-bag observations)."と書かれています。

広告を非表示にする