我是R編程語言的新手,我需要爲某些實驗運行「xgboost」。問題是,我需要交叉驗證模型,並得到準確,我發現兩種方法給我不同的結果:「xgboost」官方軟件包與x中的「caret」軟件包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%...
我在它們兩個上設置了相同的種子。
我錯了第二個?請告訴我爲什麼如此!
沒有[reproducible example](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)它將很難找出究竟爲什麼,但它可能歸結於你在兩者之間有不同的設置,無論是通過你明確提供的還是默認設置,因爲'caret'只是'xgboost'的一個包裝器(即它沒有實現它的自己的'xgboost'版本,它只是調用相同的'xgboost'包) – Tchotchke
這裏是使用https://archive.ics.uci.edu/ml/machine-learning-databases/00320/的數據集。讓我知道你需要什麼來重現這個例子。我儘可能使用基本參數,但仍有25-30%的差異 –