Py学习  »  机器学习算法

常见的机器学习和深度学习模型的实现方法分享~

作图丫 • 8 月前 • 137 次点击  

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

导语:R语言在机器学习和深度学习领域有着丰富的生态系统。虽然Python在深度学习领域更流行,但R凭借其强大的统计基础、数据可视化和数据处理能力,在传统机器学习和部分深度学习任务中表现出色。


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

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


结果解析




01
常见机器学习模型

1.数据准备# 加载必要的包library(tidymodels)library(ggplot2)
# 使用波士顿房价数据集(从modeldata包)data("boston_housing", package = "modeldata")
# 查看数据结构glimpse(boston_housing)
# 划分训练集和测试集set.seed(123)data_split 0.8, strata = medv)train_data test_data 
# 创建预处理配方recipe_spec %  step_normalize(all_numeric_predictors()) %>%  step_dummy(all_nominal_predictors())
2.多种机器学习模型的实现# 定义多个模型models   # 线性回归  linear_reg = linear_reg(engine = "lm"),
  # 随机森林  random_forest = rand_forest(    trees = 200,    mode = "regression",    engine = "ranger"  ),
  # 梯度提升(XGBoost)  xgboost = boost_tree(    trees = 200,    mode = "regression"    engine = "xgboost"  ),
  # 支持向量机  svm = svm_rbf(    mode = "regression",    engine = "kernlab"  ),
  # K近邻  knn = nearest_neighbor(    mode = "regression",    engine = "kknn"  ),
  # 神经网络(单隐藏层)  neural_net = mlp(    hidden_units = 10,    mode = "regression",    engine = "nnet"  ))
# 创建工作流并训练所有模型results for (model_name in names(models)) {  cat("训练模型:", model_name, "\n")
  wf %    add_recipe(recipe_spec) %>%    add_model(models[[model_name]])
  # 训练模型  fit_model % fit(data = train_data)
  # 在测试集上预测  predictions %    bind_cols(test_data %>% select(medv))
  # 计算性能指标  metrics %    metrics(truth = medv, estimate = .pred)
  results[[model_name]]     fit = fit_model,    predictions = predictions,    metrics = metrics  )}
# 比较所有模型性能performance_comparison function(model_name) {  results[[model_name]]$metrics %>%    mutate(model = model_name)})
# 显示模型比较结果performance_comparison %>%  ggplot(aes(x = model, y = .estimate, fill = .metric)) +  geom_col(position = "dodge") +  labs(title = "机器学习模型性能比较", y = "指标值", x = "模型") +  theme_minimal()
3. 超参数调优示例(以随机森林为例)# 定义需要调优的随机森林模型tune_spec   mtry = tune(),  trees = tune(),  min_n = tune(),  mode = "regression") %>% set_engine("ranger")
# 创建工作流tune_wf %  add_recipe(recipe_spec) %>%  add_model(tune_spec)
# 创建交叉验证折set.seed(123)folds
# 定义调优网格param_grid   parameters(tune_spec),  size = 20  # 尝试20种参数组合)
# 执行调优tune_results   tune_wf,  resamples = folds,  grid = param_grid,  metrics = metric_set(rmse, rsq))
# 选择最佳参数best_params "rmse")
# 用最佳参数训练最终模型final_wf final_fit % fit(data = train_data)
# 评估最终模型final_predictions %  bind_cols(test_data %>% select(medv))
final_metrics %  metrics(truth = medv, estimate = .pred)
print(final_metrics)

02
深度学习模型实现

1.环境配置# 安装和加载kerasinstall.packages("keras")library(keras)
# 安装TensorFlow后端(只需要运行一次)install_keras()
# 加载其他必要包library(tfdatasets)
2.回归问题深度学习模型# 准备数据x_train % select(-medv) %>% as.matrix()y_train % pull(medv)x_test % select(-medv) %>% as.matrix() y_test % pull(medv)
# 数据标准化x_train scale(x_train)x_test scale(x_test)
# 构建神经网络模型build_model function() {  model keras_model_sequential() %>%    layer_dense(units = 64, activation = "relu", input_shape = ncol(x_train)) %>%    layer_batch_normalization() %>%    layer_dropout(rate = 0.3) %>%    layer_dense(units = 32, activation = "relu") %>%    layer_dropout(rate = 0.2) %>%    layer_dense(units = 16, activation = "relu") %>%    layer_dense(units = 1)  # 输出层,回归问题不需要激活函数
  model %>% compile(    optimizer = optimizer_adam(learning_rate = 0.001),    loss = "mse",    metrics = c("mae")  )
  return(model)}
# 创建模型model build_model()summary(model)
# 设置早停法early_stop callback_early_stopping(  monitor = "val_loss",  patience = 20,  restore_best_weights = TRUE)
# 训练模型history % fit(  x_train, y_train,  epochs = 200,  batch_size = 32,  validation_split = 0.2,  callbacks = list(early_stop),  verbose = 1)
# 绘制训练历史plot(history)
# 评估模型model %>% evaluate(x_test, y_test)
# 进行预测dl_predictions % predict(x_test)
# 与真实值比较results_comparison frame(  Actual = y_test,  Predicted = as.vector(dl_predictions),  Model = "Deep Learning")
3.分类问题深度学习模型# 分类问题示例data(iris)
# 准备数据set.seed(123)iris_split initial_split(iris, prop = 0.8, strata = Species)iris_train training(iris_split)iris_test testing(iris_split)
# 准备深度学习数据x_train_iris % select(-Species) %>% as.matrix()y_train_iris % pull(Species) %>% as.numeric() - 1  # 转为0,1,2x_test_iris % select(-Species) %>% as.matrix()y_test_iris % pull(Species) %>% as.numeric() - 1
# 将标签转换为one-hot编码 y_train_categorical to_categorical(y_train_iris, 3)y_test_categorical to_categorical(y_test_iris, 3)
# 构建分类模型build_classification_model function() {  model keras_model_sequential() %>%    layer_dense(units = 32, activation = "relu", input_shape = 4) %>%    layer_dropout(rate = 0.3) %>%    layer_dense(units = 16, activation = "relu") %>%    layer_dropout(rate = 0.2) %>%    layer_dense(units = 3, activation = "softmax")  # 3个类别
  model %>% compile(    optimizer = optimizer_adam(learning_rate = 0.001),    loss = "categorical_crossentropy",    metrics = c("accuracy")  )
  return(model)}
# 训练分类模型class_model build_classification_model()
history_class % fit(  x_train_iris, y_train_categorical,  epochs = 100,  batch_size = 16,  validation_split = 0.2,  callbacks = list(early_stop),  verbose = 0)
# 评估分类模型class_model %>% evaluate(x_test_iris, y_test_categorical)
# 预测类别class_predictions % predict(x_test_iris) %>% k_argmax() %>% as.numeric()predicted_species levels(iris$Species)[class_predictions + 1]
# 计算准确率accuracy mean(predicted_species == iris_test$Species)cat("深度学习分类准确率:"round(accuracy, 3))
4.使用管道的深度学习模型# 使用tfdatasets创建数据管道create_dataset function(x, y, batch_size = 32, shuffle = TRUE{  dataset tensor_slices_dataset(list(x, y))
  if (shuffle) {    dataset % dataset_shuffle(buffer_size = nrow(x))  }
  dataset %>%     dataset_batch(batch_size) %>%    dataset_prefetch(buffer_size = tf$data$AUTOTUNE)}
# 创建训练和验证数据集train_dataset create_dataset(x_train, y_train)val_dataset create_dataset(x_test, y_test, shuffle = FALSE)
# 使用函数式API构建更复杂的模型build_advanced_model function(input_shape{  inputs layer_input(shape = input_shape)
  # 创建多个并行路径  path1 %    layer_dense(64, activation = "relu") %>%    layer_batch_normalization()
  path2 %    layer_dense(32, activation = "relu") %>%    layer_batch_normalization()
  # 合并路径  concatenated layer_concatenate(list(path1, path2))
  # 输出层  outputs %    layer_dense(32, activation = "relu") %>%    layer_dropout(0.3) %>%    layer_dense(1)
  model keras_model(inputs, outputs)
  model %>% compile(    optimizer = optimizer_adam(learning_rate = 0.001),    loss = "mse",    metrics = c ("mae")  )
  return(model)}
# 训练高级模型advanced_model build_advanced_model(ncol(x_train))
history_advanced % fit(  train_dataset,  epochs = 100,  validation_data = val_dataset,  callbacks = list(early_stop),  verbose = 1)

03
模型比较和选择

# 比较传统机器学习与深度学习comparison_results   # 传统机器学习结果  performance_comparison %>%    filter(.metric == "rmse") %>%    select(model, rmse = .estimate) %>%    mutate(type = "Machine Learning"),
  # 深度学习结果  data.frame(    model = "Deep Learning",    rmse = sqrt(model %>% evaluate(x_test, y_test, verbose = 0)[[1]]),    type = "Deep Learning"  ))
# 可视化比较ggplot(comparison_results, aes(x = reorder(model, rmse), y = rmse, fill = type)) +  geom_col() +  coord_flip() +  labs(title = "模型性能比较 (RMSE越低越好)"       x = "模型", y = "RMSE") +  theme_minimal()

小编总结



)
R语言在AI领域已经形成了独特的竞争优势:将统计学的严谨性与现代AI的灵活性完美结合。无论是传统的机器学习任务还是前沿的深度学习应用,R都提供了生产级的解决方案。特别适合那些需要深厚统计基础、强调可解释性、并追求完整数据分析生命周期的应用场景。


往期推荐


分析专辑


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


文章解读专辑


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


招聘信息


招聘


点击红字即可进入专栏!


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


点个在看你最好看


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