You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R MASS包lda使用cov.mve方法时可复现性问题的解决方法

问题根因

MASS::lda()指定method = 'mve'时,内部调用cov.mve()计算最小体积椭球稳健协方差,该算法通过随机采样搜索最优解,仅在代码全局开头设置一次set.seed()无法固定协方差估计环节的随机数生成状态,因此即使输入数据完全一致,每次拟合得到的LDA模型也会存在差异,导致预测结果不稳定。

可复现实现方法

不需要修改MASS包源码,只需要在每次调用lda()拟合模型前显式设置固定随机种子,即可锁定cov.mve()的随机采样过程,得到完全可复现的结果。修改后的可复现代码如下:

library(MASS)
library(caret)
set.seed(1)

data(iris)

acc <- list()
for (i in 1:100) {
    # 单次LDA拟合前设置固定种子,种子值可任意指定固定数值
    set.seed(123)
    post_hoc <- lda(Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width,
    data=iris , method = 'mve')
    conf <- table(list(predicted=predict(post_hoc)$class , observed=iris$Species ))
    acc <- append(acc, as.numeric(confusionMatrix(conf)$overall[1]))
    }
hist(as.numeric(acc))

运行上述代码,每次得到的准确率计算结果、直方图输出将完全一致。

补充说明

  • 如果需要执行交叉验证、bootstrap重复抽样等需要保留分组随机性的流程,只需在每一次独立的lda()拟合步骤前设置固定种子,即可同时保证抽样分组的随机性和单次模型拟合结果的可复现性。
  • 如果对稳健估计的稳定性有更高要求,可将method参数替换为'mcd'(最小协方差行列式估计),该方法的随机波动普遍小于mve估计,同样需要在调用前设置固定种子保证结果可复现。

内容的提问来源于stack exchange,提问作者Israel Zadok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 05:39:33