如何将数据框列表传入R的svm_class函数并批量计算误分类率?
解决方法:将SVM分类函数应用到重采样数据列表
核心思路
使用R的列表遍历工具(基础R的lapply或purrr包的map),对resampling返回的数据框列表逐个调用svm_class函数,收集所有误分类率结果。
步骤1:生成重采样数据列表
先调用你的resampling函数生成目标数据列表(替换your_data_frame为实际数据框):
# 示例:生成10个包含100行的重采样数据框 sample_list <- resampling(n = 100, N = 10, rep = TRUE, db = your_data_frame)
步骤2:应用SVM分类函数到列表每个元素
方法1:基础R的lapply
定义SVM分类公式后,用匿名函数传递参数给svm_class:
# 定义分类公式(替换y为你的因变量,.代表其余所有自变量) svm_form <- y ~ . # 遍历列表,计算每个样本的误分类率 misrate_results <- lapply(sample_list, function(df) { svm_class(form = svm_form, db = df) })
方法2:purrr包的map(更简洁)
如果你习惯用tidyverse工具,purrr::map可以简化代码:
library(purrr) # 同样传入公式,map会自动将列表元素作为第二个参数传递给svm_class misrate_results <- map(sample_list, svm_class, form = svm_form)
可选优化:移除重采样添加的id_sample列
resampling函数会给数据框添加id_sample列,若该列不属于你的建模变量,建议在调用svm_class前移除,避免干扰模型:
# 遍历列表,移除id_sample列 sample_list_cleaned <- lapply(sample_list, function(df) { df[, !names(df) %in% "id_sample"] }) # 再用清理后的列表计算误分类率 misrate_results <- lapply(sample_list_cleaned, function(df) { svm_class(form = svm_form, db = df) })
内容的提问来源于stack exchange,提问作者Francisco
相关产品推荐
相关产品推荐

