R (gbm パッケージ)のgbm関数を使用して、マルチクラス分類の確率的勾配ブースティング モデルに適合させています。Hastie の書籍 (Elements of Statistical Learning) (p. 382)のこの図のように、クラスごとに各予測子の重要性を取得しようとしているだけです。
ただし、この関数は予測子の全体的summary.gbm
な重要度のみを返します(重要度はすべてのクラスで平均化されます)。
相対的な重要度の値を取得する方法を知っている人はいますか?
R (gbm パッケージ)のgbm関数を使用して、マルチクラス分類の確率的勾配ブースティング モデルに適合させています。Hastie の書籍 (Elements of Statistical Learning) (p. 382)のこの図のように、クラスごとに各予測子の重要性を取得しようとしているだけです。
ただし、この関数は予測子の全体的summary.gbm
な重要度のみを返します(重要度はすべてのクラスで平均化されます)。
相対的な重要度の値を取得する方法を知っている人はいますか?
この機能がお役に立てば幸いです。この例では、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)
`