【问题标题】:Why accuracy over each k-fold cross-Validation differ alot? how can i improve that为什么每个 k 折交叉验证的准确度差异很大?我该如何改进
【发布时间】: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


【解决方案1】:

是的。因为每个折叠都在一组不同的图像上进行训练,并且其中一个可能有太多嘈杂的图像

【讨论】:

    猜你喜欢
    • 2023-02-03
    • 2020-06-28
    • 1970-01-01
    • 2016-01-15
    • 2020-03-28
    • 2018-12-06
    • 2020-05-05
    • 1970-01-01
    • 2017-02-06
    相关资源
    最近更新 更多