R语言基于重复K折交叉验证实现非正则化逻辑回归预测饮用水安全性
饮用水可饮用性预测模型实现方案
需求说明
- 目标:预测饮用水是否可安全饮用
- 特征字段:Ph、Hardness、Solids、Chloramines
- 标签字段:Potability
- 验证策略:5次重复10折交叉验证
- 基础算法:非正则化逻辑回归,后续需要复用流程实现KNN算法
代码调整说明
你现有代码使用regLogistic作为训练方法,对应带正则化的逻辑回归,只需将训练方法替换为glm即可实现非正则化逻辑回归,caret包的trainControl自带repeatedcv方法,原生支持重复交叉验证逻辑,无需手动实现折叠划分。
完整实现代码
# 加载依赖包 library(caret) library(readr) # 读取数据并筛选指定字段 df <- read_csv("water_potability.csv") df <- df[, c("ph", "Hardness", "Solids", "Chloramines", "Potability")] # 处理缺失值(可根据需求替换为其他缺失值处理逻辑) df <- na.omit(df) # 将标签转换为因子类型(分类任务必须) df$Potability <- as.factor(df$Potability) # 配置5次重复10折交叉验证策略 train_control <- trainControl( method = "repeatedcv", number = 10, repeats = 5, classProbs = TRUE, # 可选,需要输出分类概率时开启 summaryFunction = twoClassSummary # 可选,二分类任务使用该评估函数 ) # 训练非正则化逻辑回归模型 logit_model <- train( Potability ~ ., data = df, method = "glm", # 非正则化逻辑回归对应方法 family = binomial(), trControl = train_control, metric = "ROC" # 可选,评估指标可替换为Accuracy等 ) # 查看模型结果 print(logit_model)
后续KNN复用方案
只需修改train函数的method参数为knn即可复用整套交叉验证流程,如需调参可新增tuneGrid参数指定待搜索的K值范围,示例如下:
# KNN模型训练示例 knn_tune_grid <- expand.grid(k = c(3,5,7,9,11)) knn_model <- train( Potability ~ ., data = df, method = "knn", trControl = train_control, tuneGrid = knn_tune_grid, preProcess = c("center", "scale") # KNN需要对特征做标准化 )
内容的提问来源于stack exchange,提问作者iftach s
相关产品推荐
相关产品推荐

