随机森林中的“方差解释”和 XGBoost 中的“merror”有啥区别
Posted
技术标签:
【中文标题】随机森林中的“方差解释”和 XGBoost 中的“merror”有啥区别【英文标题】:what is difference between "variance explained " in Random Forest and "merror" in XGBoost随机森林中的“方差解释”和 XGBoost 中的“merror”有什么区别 【发布时间】:2018-04-01 13:13:37 【问题描述】:我一直想知道标题上写的一个主题。
实际上,我尝试了两个库来预测并得到了结果, 但我不知道两个分数是否相同。
这是一个结果示例..
XGBoost>>
train-merror:0.718701
据我所知,merror
是错误的预测分数。
所以,真实的预测分数是1 - 0.718701 = 0.281299
。
这意味着我制作的这个模型可以预测大约 28% 的正确结果
Random Forest>>
variance explained : 0.301
如上样例,能否解释RF的预测分数优于XGBoost结果?
其实我希望知道variance explained
和merror
是否相同。
【问题讨论】:
【参考方案1】:Variance explained 和 XGBoost 的 merror
不相同。它们涉及非常不同的统计概念。
merror
是多类分类错误率。它被计算为 (# wrong case) / (# all cases),参见例如XGBoost R package manual。在二分类问题中,分子则对应于假阳性和假阴性的数量之和,即模型的第一类和第二类错误的数量之和。
解释的方差就是:模型解释的响应中的方差分数。这是简单线性模型中的R^2值,等于相关系数的平方。
手动计算和比较两个多类分类模型的分类错误率(merror
in xgboost
)也许有用;这里我们选择iris
数据集并使用随机森林和XGBoost分类模型来预测Species ~ .
。以下是一个可重现的示例。
我们首先加载必要的库
library(xgboost)
library(randomForest)
我们现在在完整的 iris
数据上训练两个模型,并显示各自的混淆矩阵。
# Model: Random forest
model.rf <- randomForest(
Species ~ ., data = iris)
cm.rf <- model.rf$confusion
cm.rf
# setosa versicolor virginica class.error
#setosa 50 0 0 0.00
#versicolor 0 47 3 0.06
#virginica 0 3 47 0.06
# Model: XGBoost
model.xg <- xgboost(
data = as.matrix(iris[, 1:4]),
label = as.factor(iris[, 5]),
nrounds = 10,
eval.metric = "merror",
num_class = 4)
pred <- levels(iris[, 5])[as.integer(predict(model.xg, as.matrix(iris[, 1:4])))]
cm.xg <- table(pred, as.factor(iris[, 5]))
cm.xg
#
#pred setosa versicolor virginica
# setosa 50 0 0
# versicolor 0 48 0
# virginica 0 2 50
我们现在可以定义一个便利函数来计算分类误差,如上所述。
merror <- function(cm)
sum(setdiff(as.integer(cm), diag(cm))) / sum(as.integer(cm))
那么两个模型的分类误差为
# Model: Random forest
merror.rf <- merror(cm.rf[, 1:3])
merror.rf
#[1] 0.02
# Model: XGBoost
merror.xg <- merror(cm.xg)
merror.xg
#[1] 0.01333333
注意merror.xg
的值与 XGBoost 模型的 evaluation_log
中的最终迭代值是如何相同的
model.xg$evaluation_log
# iter train_merror
# 1: 1 0.026667
# 2: 2 0.020000
# 3: 3 0.020000
# 4: 4 0.020000
# 5: 5 0.020000
# 6: 6 0.020000
# 7: 7 0.013333
# 8: 8 0.013333
# 9: 9 0.013333
#10: 10 0.013333
【讨论】:
感谢您对 Maurits 的评论。是否可以理解两个评估标准不同,因此必须分别解释。有没有办法直接比较这两个标准?或其他.. 最好的,院长 正如我所解释的,它们与不同的概念(分类错误与方差)有关。所以我不确定“直接比较两个标准”是什么意思。它们是两个不同的度量/统计,用于评估两个不同模型的性能。要比较相同的统计量,您可以计算 RF 模型的分类误差,并将其与 boosting 模型的分类误差进行比较。以上是关于随机森林中的“方差解释”和 XGBoost 中的“merror”有啥区别的主要内容,如果未能解决你的问题,请参考以下文章