gpt4 book ai didi

r - “xgboost” 官方包与 R 中 "caret"包的 xgboost 的不同结果

转载 作者:行者123 更新时间:2023-11-30 08:44:00 61 4
gpt4 key购买 nike

我是 R 编程语言新手,我需要运行“xgboost”进行一些实验。问题是我需要交叉验证模型并获得准确性,我发现两种方法可以给我不同的结果:

使用“插入符号”:

library(mlbench)
library(caret)
library(caretEnsemble)
dtrain <- read.csv("student-mat.csv", header=TRUE, sep=";")
formula <- G3~.
dtrain$G3<-as.factor(dtrain$G3)
control <- trainControl(method="cv", number=10)
seed <- 10
metric <- "Accuracy"
fit.xgb <- train(formula, data=dtrain, method="xgbTree", metric=metric, trControl=control, nthread =4)
fit.xgb
fit.xgbl <- train(formula, data=dtrain, method="xgbLinear", metric=metric, trControl=control, nthread =4)
fit.xgbl

使用“xgboost”包和以下代码:

 library(xgboost)
printArray <- function(label, array){
cat(paste(label, paste(array, collapse = ", "), sep = ": \n"), "\n\n")
setwd("D:\\datasets")
dtrain <- read.csv("moodle7original(AtributosyNotaNumericos).csv", header=TRUE, sep=",")
label <- as.numeric(dtrain[[33]])
data <- as.matrix(sapply(dtrain, as.numeric))

croosvalid <-
xgb.cv(
data = data,
nfold = 10,
nround = 10,
label = label,
prediction = TRUE,
objective = "multi:softmax",
num_class = 33
)

print(croosvalid)
printArray("Actual classes", label[label != croosvalid\$pred])
printArray("Predicted classes", croosvalid\$pred[label != croosvalid\$pred])
correctlyClassified <- length(label[label == croosvalid\$pred])
incorrectlyClassified <- length(label[label != croosvalid\$pred])
accurancy <- correctlyClassified * 100 / (correctlyClassified + incorrectlyClassified)
print(paste("Accurancy: ", accurancy))

但是在同一数据集上,结果差异很大。我通常使用第二个代码片段获得学生表现数据集的 99% 准确率,使用第一个代码片段获得约 63% 的准确率...
我在它们两个上设置了相同的种子。

我第二个有错吗?如果是的话请告诉我为什么!

最佳答案

代码之间有两点不同,第一个是最严重的:

  • 当您调用label <- as.numeric(dtrain[[11]])时和data <- as.matrix(sapply(dtrain, as.numeric)) ,数据中的第11列实际上是标签。当然,您会获得很高的准确度,标签本身就在数据中!这是严重的泄漏,你应该使用 data <- as.matrix(sapply(dtrain[,-11L], as.numeric))

  • 一个细微的差别是您使用的是 objective = "multi:softmax"在第二个代码中,caret实现objective = "multi:softprob"用于多类分类。我不知道这可能会有多大不同,但代码之间是不同的。 Check it .

关于r - “xgboost” 官方包与 R 中 "caret"包的 xgboost 的不同结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38433420/

61 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com