我在R(gbm包)中使用gbm函數來擬合多類分類的隨機梯度提升模型。我只是試圖獲得每個類別的每個預測變量分別爲的重要性,例如從Hastie book(第382頁)的圖片中獲得。GBM R函數:獲得每個類的變量重要性
然而,功能summary.gbm只返回預測的整體重要性(其重要性平均超過所有類)。
有誰知道如何獲得相對重要性值?
我在R(gbm包)中使用gbm函數來擬合多類分類的隨機梯度提升模型。我只是試圖獲得每個類別的每個預測變量分別爲的重要性,例如從Hastie book(第382頁)的圖片中獲得。GBM R函數:獲得每個類的變量重要性
然而,功能summary.gbm只返回預測的整體重要性(其重要性平均超過所有類)。
有誰知道如何獲得相對重要性值?
我想簡短的回答是,在第379頁,Hastie提到他使用MART,這似乎只適用於Splus。
我同意gbm包似乎不允許看到單獨的相對影響。如果這是你對mutliclass問題感興趣的東西,那麼你可能會得到一些非常相似的東西,爲每個類構建一個vs-all gbm,然後從每個模型中獲得重要性度量。
所以說你的課是a,b,c,& d。您對其他模型進行建模並從該模型中獲得重要性。然後,您將模型b與其他模型進行比較,並從該模型中獲得重要性。等等
希望這個功能可以幫助你。對於我使用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)
`
對這個例子的解釋是,年齡對男性收入和婚姻狀況有很大影響,對女性收入有很大影響 – nathanesau
非常感謝你提供這個有用的答案。在我接受答案/獎賞賞金之前,讓我詳細地玩你的命令。此外,從理論的角度來看,我想知道是否有效比較變量對兩個單獨模型的影響...... – Antoine
實際上,它是相同的模型,僅在數據的兩個子集上。爲什麼這是無效的? – nathanesau
@germcd ??我不明白這將如何改變這個問題...... – Antoine
@germcd您是否建議針對需要預測的目標變量的每個類別建立不同的模型?我真的不明白這是怎麼回事。 – Antoine
感謝您的書鏈接 - 看起來像一個有趣的閱讀。 – nathanesau