一般来说,在目标是准确预测样本外类别成员的分类问题中,我什么时候不应该使用集成分类器?
这个问题与为什么不总是使用集成学习密切相关?. 这个问题问为什么我们不一直使用合奏。我想知道是否存在已知合奏比非合奏更糟糕的情况(不仅仅是“不更好而且浪费时间”)。
通过“集成分类器”,我特别指的是 AdaBoost 和随机森林等分类器,而不是例如自己滚动的增强型支持向量机。
一般来说,在目标是准确预测样本外类别成员的分类问题中,我什么时候不应该使用集成分类器?
这个问题与为什么不总是使用集成学习密切相关?. 这个问题问为什么我们不一直使用合奏。我想知道是否存在已知合奏比非合奏更糟糕的情况(不仅仅是“不更好而且浪费时间”)。
通过“集成分类器”,我特别指的是 AdaBoost 和随机森林等分类器,而不是例如自己滚动的增强型支持向量机。
当您的模型需要可解释和可解释时,我不建议使用集成分类器。有时你需要预测和预测的解释。
当你需要让人们相信这些预测值得相信时,一个高度准确的模型可能非常有说服力,但当方法过于复杂而无法满足他们的舒适度时,我很难说服人们根据预测采取行动。
以我的经验,大多数人都对线性加法模型感到满意,他们可以手动评分模型,如果你尝试解释自适应增强、超平面和 5 级交互效果,他们会做出反应,就好像你在向它们投掷黑魔法一样。
另一方面,人们可以对模型的复杂性感到满意,但仍希望内化一些洞察力。例如,科学家可能不会认为黑盒模型是人类知识的进步,即使该模型非常准确。
变量重要性分析可以帮助获得洞察力,但如果集成比线性加性模型更准确,则集成可能会利用变量重要性分析无法完全解释的一些非线性和交互效应。
最接近真实数据生成过程的模型总是最好的,并且会击败大多数集成方法。因此,如果数据来自线性过程 lm() 将远远优于随机森林,例如:
set.seed(1234)
p=10
N=1000
#covariates
x = matrix(rnorm(N*p),ncol=p)
#coefficients:
b = round(rnorm(p),2)
y = x %*% b + rnorm(N)
train=sample(N, N/2)
data = cbind.data.frame(y,x)
colnames(data) = c("y", paste0("x",1:p))
#linear model
fit1 = lm(y ~ ., data = data[train,])
summary(fit1)
yPred1 =predict(fit1,data[-train,])
round(mean(abs(yPred1-data[-train,"y"])),2)#0.79
library(randomForest)
fit2 = randomForest(y ~ ., data = data[train,],ntree=1000)
yPred2 =predict(fit2,data[-train,])
round(mean(abs(yPred2-data[-train,"y"])),2)#1.33
我想补充一下布兰科的答案。合奏可以具有很强的竞争力并提供非常好的结果。例如,在学术界,这才是最重要的。在工业中,集成可能太难实现/维护/修改/移植。Goef Hinton 关于“黑暗知识”的工作正是关于这一点:如何将大型集成的“知识”转移到一个易于移动的模型中。他指出,集成在测试时很糟糕:它们高度冗余,并且计算时间可能令人担忧。
他的团队得到了一些有趣的结果,我建议查看他的出版物或至少查看幻灯片。如果我记性好的话,这是 2013 年或 2014 年的热门话题之一。
关于黑暗知识的幻灯片可以在这里找到: http ://www.ttic.edu/dl/dark14.pdf