18

R (gbm パッケージ)のgbm関数を使用して、マルチクラス分類の確率的勾配ブースティング モデルに適合させています。Hastie の書籍 (Elements of Statistical Learning) (p. 382)のこの図のように、クラスごとに各予測子の重要性を取得しようとしているだけです。

ここに画像の説明を入力

ただし、この関数は予測子の全体的summary.gbmな重要度のみを返します(重要度はすべてのクラスで平均化されます)。

相対的な重要度の値を取得する方法を知っている人はいますか?

4

3 に答える 3

8

この機能がお役に立てば幸いです。この例では、ElemStatLearn パッケージのデータを使用しました。この関数は、列のクラスが何であるかを把握し、データをこれらのクラスに分割し、各クラスで gbm() 関数を実行して、これらのモデルの棒グラフをプロットします。

# install.packages("ElemStatLearn"); install.packages("gbm")
library(ElemStatLearn)
library(gbm)

set.seed(137531)

# formula: the formula to pass to gbm()
# data: the data set to use
# column: the class column to use
classPlots <- function (formula, data, column) {
    
    class_column <- as.character(data[,column])
    class_values <- names(table(class_column))
    class_indexes <- sapply(class_values, function(x) which(class_column == x))
    split_data <- lapply(class_indexes, function(x) marketing[x,])
    object <- lapply(split_data, function(x) gbm(formula, data = x))
    rel.inf <- lapply(object, function(x) summary.gbm(x, plotit=FALSE))
    
    nobjs <- length(class_values)
    for( i in 1:nobjs ) {
        tmp <- rel.inf[[i]]
        tmp.names <- row.names(tmp)
        tmp <- tmp$rel.inf
        names(tmp) <- tmp.names
        
        barplot(tmp, horiz=TRUE, col='red',
                xlab="Relative importance", main=paste0("Class = ", class_values[i]))
    }
    rel.inf
}

par(mfrow=c(1,2))
classPlots(Income ~ Marital + Age, data = marketing, column = 2)

`

出力

于 2015-08-14T18:08:22.810 に答える