如何在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)
你之前代码的问题解析
- 循环对象错误:你用
lapply(1:ncol(ldat[,2:51]), ...)按列索引循环,而不是直接对特征列循环,导致生成的数据框变量名不符合模型要求 mutate误用:mutate是dplyr中用于给数据框添加列的函数,不适合用来生成单个随机值的循环逻辑- 统计量计算错误:
mean(ldat[,2:51])计算的是所有特征的全局均值,而不是每个特征单独的均值,这会导致模拟数据完全不符合原始特征的分布
内容的提问来源于stack exchange,提问作者Javier Hernando
相关产品推荐
相关产品推荐

