我一直在想写在标题上的一个话题。
实际上,我尝试了两个库来预测,并得到了一个结果,但我不知道两个分数是否相同。
这是一个结果的样本。
XGBoost>>
train-merror:0.718701 据我所知,merror是错误的预测分数。因此,真正的预测得分是1 - 0.718701 = 0.281299。
这意味着我所建立的模型可以预测出大约28%的正确结果。
Random Forest>>
variance explained : 0.301像上面这样的样本,是否有可能解释RF的预测评分优于XGBoost的结果?
事实上,我希望知道variance explained和merror是否相同。
发布于 2017-10-20 11:58:02
方差解释和XGBoost的merror不一样。它们与非常不同的统计概念有关。
merror是多类分类错误率。它被计算为(#错误的情况)/ (#所有的情况),参见例如XGBoost R包装手册。在二进制分类问题中,分子对应于假阳性和假负数之和,即模型的I和II型错误数之和。对于两种多类分类模型,手工计算和比较分类错误率(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.013333https://stackoverflow.com/questions/46847845
复制相似问题