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

如何在LDA预测函数中模拟与现有数据相似的新样本?

如何生成与现有数据集相似的模拟样本用于LDA预测?

你当前的数据集包含136个样本、1个3分类变量和50个特征,训练完LDA模型后,需要生成符合原始数据分布的模拟样本进行预测,手动输入50个特征不现实,以下是可行的解决方案:

方法1:基于单特征的统计分布生成模拟样本

核心思路是针对每个特征单独计算均值和标准差,再生成符合该特征正态分布的随机值(假设特征近似正态分布),这样生成的样本会和原始数据的特征分布一致:

library(MASS)
# 假设你的ldat数据框中,第1列是分类变量,2-51列是待分析特征
features <- ldat[, 2:51]

# 生成1个模拟样本:对每个特征单独生成符合其分布的随机值
simulated_sample <- data.frame(
  lapply(features, function(col) {
    # 计算当前特征的均值和标准差(忽略NA值)
    col_mean <- mean(col, na.rm = TRUE)
    col_sd <- sd(col, na.rm = TRUE)
    # 生成1个符合正态分布的随机数
    rnorm(n = 1, mean = col_mean, sd = col_sd)
  })
)

# 使用训练好的LDA模型进行预测
pred_result <- predict(model1, newdata = simulated_sample)

方法2:直接从现有数据中抽样(更贴合原始分布)

如果你的特征不是正态分布,或者想要更贴近原始数据的样本,可以直接从现有样本中随机抽取1个样本的特征组合:

# 从现有特征数据中随机抽取1行作为模拟样本
simulated_sample <- features[sample(nrow(features), 1), ]

# 执行预测
pred_result <- predict(model1, newdata = simulated_sample)

你之前代码的问题解析

  1. 循环对象错误:你用lapply(1:ncol(ldat[,2:51]), ...)按列索引循环,而不是直接对特征列循环,导致生成的数据框变量名不符合模型要求
  2. mutate误用:mutate是dplyr中用于给数据框添加列的函数,不适合用来生成单个随机值的循环逻辑
  3. 统计量计算错误:mean(ldat[,2:51])计算的是所有特征的全局均值,而不是每个特征单独的均值,这会导致模拟数据完全不符合原始特征的分布

内容的提问来源于stack exchange,提问作者Javier Hernando

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 14:05:25