Py学习  »  机器学习算法

R语言中进行多模型机器学习要怎么做?速来学习吧~

作图丫 • 10 月前 • 194 次点击  

最近有小伙伴反映收不到推送,因为公众号改了推送算法,现在需要加星标,多点赞、点在看,才能准时收到推送哦。

语:多模型机器学习并非指一个单一的技巧,而是一套工作流程:你同时训练多个不同类型的模型(如随机森林、支持向量机、梯度提升树等),然后通过交叉验证等方法客观地评估它们的性能,最终选择表现最好的模型,或甚至将多个模型组合起来(集成学习)以获得更好的性能。


北京墨因生物已经与国内50+知名医院的老师或名牌大学实验室合作(协和、哈工大、同济、哈医大等)。欢迎有生信分析需求的老师垂询,公共数据库数据挖掘或自测数据分析均可。

欢迎长期合作
联系请扫描下方二维码

结果解析




01
计算流程

现代R语言进行机器学习,强烈推荐使用 tidymodels 元包。它是一套集成的、语法统一的包集合,其设计理念与著名的 tidyverse 一致,非常注重代码的清晰度和可读性。
install.packages("tidymodels"# 这会安装一系列核心包# 可能还需要安装一些特定的引擎包install.packages("ranger")     # 随机森林引擎install.packages("glmnet")     # 正则化回归引擎install.packages("kernlab")    # SVM引擎install.packages("xgboost")    # XGBoost引擎
1步:加载必要的库并准备数据library(tidymodels) # 加载核心tidymodels包library(ranger)     # 用于随机森林library(kernlab)    # 用于SVM


    

# 使用内置数据集data(iris)# 查看数据结构和类别分布glimpse(iris)table(iris$Species)
# 设置随机种子以保证结果可重现set.seed(123)
第2步:数据拆分# 初始数据拆分iris_split iris_train iris_test 
# 使用 strata 参数进行分层抽样,确保训练集和测试集中各类别的比例与原数据集一致,对于不平衡数据尤其重要。
3步:数据预处理(配方,Recipe)iris_recipe recipe(Species ~ ., data = iris_train) %>%  step_normalize(all_numeric_predictors()) # 对所有数值型预测变量进行标准化(均值为0,标准差为1)# 还可以添加其他步骤,例如:# step_dummy(all_nominal_predictors()) # 为分类变量创建虚拟变量# step_impute_knn(all_predictors())    # 用KNN插补缺失值
# 查看预处理后的数据iris_recipe_preped prep(iris_recipe) # 根据训练集估算参数bake(iris_recipe_preped, new_data = NULL# 应用预处理并查看训练集数据
第4步:定义多个模型# 1. 随机森林模型rf_model   mtry = tune(),      # 超参数mtry(每次分割时随机抽取的预测变量数)需要调优  trees = 500,        # 树的数量,通常设为较大的固定值  min_n = tune()      # 超参数min_n(节点所需最小数据点)需要调优) %>%  set_engine("ranger", importance = "impurity") %>% # 使用ranger引擎,并计算变量重要性  set_mode("classification"# 设置为分类模式
# 2. 支持向量机(径向基核函数)svm_model   cost = tune(),      # 调优:惩罚参数C  rbf_sigma = tune()  # 调优:核函数参数sigma) %>%  set_engine("kernlab") %>%  set_mode("classification")
# 3. K近邻模型knn_model   neighbors = tune()  # 调优:近邻数K) %>%  set_engine("kknn") %>%  set_mode("classification")
第5步:创建工作流(Workflow)rf_workflow %  add_recipe(iris_recipe) %>%  add_model(rf_model)
svm_workflow %  add_recipe(iris_recipe) %>%  add_model(svm_model)
knn_workflow %  add_recipe(iris_recipe) %>%  add_model(knn_model)
6步:超参数调优(Tuning)# 创建交叉验证重采样集iris_folds 5# 5折交叉验证
# 为每个模型定义需要调优的参数范围rf_params %  update(mtry = mtry(range = c(1L4L))) # mtry在1到4之间调优(因为共有4个特征)
svm_params knn_params
# 使用网格搜索进行调优# 注意:贝叶斯优化(tune_bayes())通常更高效,这里使用网格搜索作为演示rf_tuned %  tune_grid(    resamples = iris_folds,    grid = 10# 尝试10种不同的超参数组合    metrics = metric_set(accuracy, roc_auc) # 评估指标:准确率和AUC  )
svm_tuned %  tune_grid(    resamples = iris_folds,    grid = 10,    metrics = metric_set(accuracy, roc_auc)  )
knn_tuned %  tune_grid(    resamples = iris_folds,    grid = 10,    metrics = metric_set(accuracy, roc_auc)  )
第7步:评估和比较模型# 显示性能最好的模型配置show_best(rf_tuned, metric = "accuracy")show_best(svm_tuned, metric = "accuracy")show_best(knn_tuned, metric = "accuracy")
# 选择最佳参数配置rf_best "accuracy")svm_best "accuracy")knn_best "accuracy")
# 将最佳参数最终化到工作流中rf_final_workflow % finalize_workflow(rf_best) svm_final_workflow % finalize_workflow(svm_best)knn_final_workflow % finalize_workflow(knn_best)
8步:在测试集上进行最终评估# 在测试集上评估最终模型rf_final_fit % last_fit(iris_split)svm_final_fit % last_fit(iris_split)knn_final_fit % last_fit(iris_split)
# 收集评估指标collect_metrics(rf_final_fit)collect_metrics(svm_final_fit)collect_metrics(knn_final_fit)
# 比较三个模型在测试集上的准确率rf_accuracy % filter(.metric == "accuracy") %>% pull(.estimate)svm_accuracy % filter(.metric == "accuracy") %>% pull(.estimate)knn_accuracy % filter(.metric == "accuracy") %>% pull(.estimate)
cat(sprintf("随机森林测试集准确率: %.3f\n", rf_accuracy))cat(sprintf("支持向量机测试集准确率: %.3f\n", svm_accuracy))cat(sprintf("K近邻测试集准确率: %.3f\n", knn_accuracy))
第9步:拟合最终模型并用于预测# 选择最佳模型(这里假设随机森林最好)best_model_fit % fit(iris) # 这次使用全部原始数据拟合
# 对新数据进行预测new_flowers   Sepal.Length = c(5.1, 6.7),  Sepal.Width = c(3.5, 3.0),  Petal.Length = c(1.4, 5.2),  Petal.Width = c(0.2, 2.3))
predict(best_model_fit, new_data = new_flowers, type = "class")predict(best_model_fit, new_data = new_flowers, type = "prob")


往期推荐


分析专辑


单细胞scRNA | R包绘图 | 免疫浸润分析 | 肿瘤纯度评估工具 | 数据库


文章解读专辑


多区域进化文章精读 | 高分文章精读 | 免疫微环境文献解读


招聘信息


招聘


点击红字即可进入专栏!


码字不易,欢迎读者分享或转发到朋友圈,任何公众号或其他媒体未经许可不得私自转载或抄袭。
由于微信平台算法改版,公众号内容将不再以时间排序展示,建议设置“作图丫”公众号为星标,防止丢失。星标具体步骤为:
(1)点击页面最上方“作图丫”,进入公众号主页;
(2)点击右上角的小点点,在弹出界面选择“设为星标”即可。


点个 在看你最好看


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/186787