我一直想知道题目中写的主题。
实际上,我尝试了两个库来预测并得到了结果, 但我不知道两个分数是否相同。
以下是结果示例..
XGBoost>>
train-merror:0.718701
据我所知,merror
是假预测得分。
因此,真正的预测分数为1 - 0.718701 = 0.281299
。
这意味着我制作的这个模型可以预测大约28%的正确结果
Random Forest>>
variance explained : 0.301
如上所述,可以解释RF的预测分数是否优于XGBoost结果?
事实上,我希望知道variance explained
和merror
是否相同。
答案 0 :(得分:1)
Variance explained和XGBoost的merror
不相同。它们涉及非常不同的统计概念。
merror
是多类分类错误率。它被计算为(#个错误的情况)/(#所有情况),参见例如XGBoost R package manual。在二元分类问题中,分子然后对应于误判数和假阴性数之和,即模型的I型和II型错误数之和。
解释的方差恰恰是:模型解释的响应中的方差分数。这是简单线性模型中的R ^ 2值,等于平方相关系数。
对于两个多级分类模型,手动计算和比较merror
中的分类错误率(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