如何在R语言中创建循环函数,批量运行lda模型并绘图?
R语言循环运行不同先验概率的LDA模型及绘图指南
1. 准备工作
首先加载LDA模型依赖的MASS包,并重命名先验概率序列避免参数冲突:
library(MASS) prior_vals <- seq(0, 1, 0.10) # 生成0到1、步长0.1的先验概率序列
2. 用for循环批量运行LDA模型
新手友好的基础循环方式,逐个运行模型并存储结果:
# 初始化空列表存储所有模型 lda_models <- list() for (i in seq_along(prior_vals)) { current_p <- prior_vals[i] # 传入对应先验概率运行LDA lda_models[[i]] <- lda(Y ~ ., data = liver, prior = c(1 - current_p, current_p)) # 打印进度提示(可选) cat("完成第", i, "个模型,先验概率p =", current_p, "\n") }
3. 用函数+批量处理简化代码
封装自定义函数后,用lapply实现更简洁的批量运行:
# 定义运行LDA的函数 run_lda <- function(p, data) { lda(Y ~ ., data = data, prior = c(1 - p, p)) } # 批量生成模型并命名 lda_models <- lapply(prior_vals, run_lda, data = liver) names(lda_models) <- paste0("prior_", prior_vals) # 给模型命名方便索引
4. 结果可视化:先验概率与模型准确率关系
以训练集分类准确率为例,绘制先验概率对模型性能的影响:
4.1 计算每个模型的准确率
accuracy <- numeric(length(prior_vals)) for (i in seq_along(prior_vals)) { # 对训练集做预测 pred_result <- predict(lda_models[[i]], newdata = liver) # 计算准确率 accuracy[i] <- mean(pred_result$class == liver$Y) }
4.2 基础绘图(无需额外包)
plot(prior_vals, accuracy, type = "b", pch = 16, col = "#2E86AB", xlab = "类别2的先验概率", ylab = "训练集分类准确率", main = "LDA模型准确率随先验概率变化") grid(lty = 2, col = "gray") # 添加网格线提升可读性
4.3 ggplot2绘图(更美观的可视化)
如果需要更精致的图表,使用ggplot2包:
library(ggplot2) # 整理数据为数据框 result_df <- data.frame(Prior = prior_vals, Accuracy = accuracy) ggplot(result_df, aes(x = Prior, y = Accuracy)) + geom_line(color = "#2E86AB", linewidth = 1) + geom_point(size = 3, color = "#F24C4C") + labs(x = "类别2的先验概率", y = "训练集分类准确率", title = "LDA模型性能随先验概率的变化趋势") + theme_minimal()
内容的提问来源于stack exchange,提问作者JSG
相关产品推荐
相关产品推荐

