【发布时间】:2021-03-17 14:17:34
【问题描述】:
我有一个包含 91 个观测值和 700 个特征的数据集。我已经使用 PCA 减少了数据的维度。然后我将数据集分成训练和测试,比率 = 70/30。之后对训练数据集应用 kfold =10 交叉验证并计算每个折叠的准确度。我怀疑它变化很大。
数据集中的类分布
Male Female
47 44
这是每一折的准确度?使用 LDA 训练模型时每次折叠的结果
fold1 = 0.71
fold2 = 0.83
fold3 = 0.50
fold4 0.29,
fold5 = 0.67 ,
fold6 = 0.33
fold7 = 0.14
fold8 = 1.00
fold9 = 0.33
fold10 = 0.14
有这样的变化是正确的吗?如果没有,那我该如何解决这个问题? 我怎样才能提高每次折叠的准确性,至少它不应该有太大变化? 可能的原因是什么?为什么变化很大? 我正在寻找这些问题的答案
这是我的交叉验证函数
training_data 数据占实际数据的 70%
lda_cv = function(training_data,k_number_of_folds){
training_data = training_data[sample(nrow(training_data)),]
#creating folds
folds <- createFolds(training_data$class,k_number_of_folds)
result = list("t_cfm"=NULL,"t_accuracy"=NULL)
for (i in 1:k_number_of_folds) {
#index <- which(folds==i,arr.ind=TRUE)
index <- folds[[i]]
train <- training_data[-index, ]
test <- training_data[index, ]
##testing accuracy
lda.res = lda( as.factor(class) ~ . , data = train)
lda.pred= predict(lda.res,newdata = test)
cfm = table(lda.pred$class,test$class,dnn = c("predicted","Actual"))
result$t_cfm[[i]] = cfm
accuracy = round(mean(lda.pred$class ==test$class),2)
result$t_accuracy[[i]] = accuracy
}
return(result)
}
【问题讨论】:
-
您确定您选择了 PCA 中方差最大/信息量最大的特征吗?
-
添加代码(可能还有示例数据)将帮助我们调试
-
抱歉,我不能分享数据,因为它是机密的,但我可以分享代码。是的,我从 PCA 中选择了方差最大的组件。在我的案例中,前 2 个组件代表了大部分差异。
标签: model cross-validation evaluation fold