重采样会改变什么吗?R
我正在使用插入符号包和“glm”方法,以便使用某些因素预测空调机是否打开/关闭 当我使用不同的重采样方法时,我得到了相同的结果(混淆矩阵及其度量:准确性、灵敏度…),为什么它们是相同的?当使用交叉验证或引导或什么都不使用时,结果是否有差异??我一定是做错了什么。这是一个可重复的示例:重采样会改变什么吗?R,r,machine-learning,glm,r-caret,resampling,R,Machine Learning,Glm,R Caret,Resampling,我正在使用插入符号包和“glm”方法,以便使用某些因素预测空调机是否打开/关闭 当我使用不同的重采样方法时,我得到了相同的结果(混淆矩阵及其度量:准确性、灵敏度…),为什么它们是相同的?当使用交叉验证或引导或什么都不使用时,结果是否有差异??我一定是做错了什么。这是一个可重复的示例: set.seed(123) library(caret) library(gbm) month <- factor(c(rep("january",10),rep("february",10) ,
set.seed(123)
library(caret)
library(gbm)
month <- factor(c(rep("january",10),rep("february",10)
,rep("january",10),rep("february",10)
,rep("january",10),rep("february",10)))
day <- factor(c(rep("monday",20),rep("tuesday",20)
,rep("monday",10),rep("tuesday",10)))
hourDec <- runif(60)*10
onoff <- c(rep(c(0,1),10),rep(c(0,0,0,1,1),3),
rep(c(1,1,0,0,1),2),rep(c(0,0,1,0,1),3))
df <- data.frame(onoff,month,day,hourDec)
inTrain <- createDataPartition(y=factor(df$onoff), p=0.7,list=F)
training <- df[inTrain,]
testing <- df[-inTrain,]
f.glm <- function(training, testing){
resampling <- c("none"
,"repeatedcv"
, "boot"
, "boot632"
, "cv"
#, "LOOCV"
, "LGOCV"
)
for (i in 1:length(resampling)) {
cat("\n\n")
cat("- Resampling method:", resampling[i], "+ glm")
cat("\n\n")
fitControl <- trainControl(method=resampling[i],number=5,repeats=10)
modelFit <- train( factor(onoff) ~.,data=training, method="glm", trControl=fitControl)
modelFit
print(modelFit$finalModel)
predictions <- predict(modelFit, newdata=testing)
cm <- confusionMatrix(predictions,testing$onoff)
print(cm$table)
print(cm$overall)
print(cm$byClass)
}
}
f.glm(training,testing)
set.seed(123)
图书馆(插入符号)
图书馆(gbm)
如果我单步查看您的代码,则modelFit
行的输出表明重采样设置为无resampling:none
。我不熟悉caret
软件包,但这可能就是代码没有达到预期效果的原因。在train
中使用重采样的主要目的是调整模型的超参数。因此,使用重采样(例如10倍CV)来寻找最优超参数,然后将模型(具有最优超参数)拟合到整个数据集。由于glm
没有调整超参数,因此在所有情况下,生成的模型都是相同的。如果您希望看到结果中的差异,请尝试使用具有调整超参数的模型(例如SVM)。