Py学习  »  机器学习算法

机器学习升阶版--神经网络模型构建全代码分享!!

作图丫 • 1 周前 • 40 次点击  

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

导语:在 R 语言中构建神经网络模型主要有两种主流方式:使用经典的 nnet 包和使用更强大灵活的 keras + tensorflow 框架。


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

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


结果解析




01
使用nnet包

适合快速上手简单任务

nnet (Feed-Forward Neural Networks) 是 R 内置 stats 套件的一部分,非常适合创建单隐藏层的前馈神经网络。它简单、轻量,但对于复杂的深度学习任务能力有限。

# 1.安装和加载包# 安装(如果尚未安装)# install.packages("nnet")
# 加载包library(nnet)# 2.准备数据我们使用经典的鸢尾花(iris)数据集作为示例。我们需要将因子型的目标变量进行独热编码(One-Hot Encoding),nnet 的 class.ind 函数可以很方便地完成这件事。同时,将数据划分为训练集和测试集。 # 移除setosa种类,使问题变为二分类(简化示例)iris_sub $Species != "setosa", ]iris_sub$Species $Species# 移除未使用的因子水平
# 独热编码目标变量# class.ind 会为每个类别创建一个二进制列target class.ind(iris_sub$Species)
# 将特征数据标准化(重要:能显著提高神经网络性能)features 1:4])
# 划分训练集和测试集 (70% 训练, 30% 测试)set.seed(123# 确保结果可重现sample_index 1:nrow(iris_sub), nrow(iris_sub) * 0.7)train_features test_features train_target test_target

训练模型
使用 nnet() 函数。关键参数:

  • x: 特征矩阵

  • y: 目标矩阵(独热编码后的)

  • size: 隐藏层中的神经元数量(需要调试的超参数)

  • softmax: 对于分类问题,设置为 TRUE 使用 softmax 输出激活函数

  • maxit: 最大迭代次数

  • decay: 权重衰减(L2正则化)参数,防止过拟合

# 训练神经网络模型nn_model                  y = train_target,                 size = 4,        # 隐藏层神经元个数                 softmax = TRUE,  # 用于多分类                 maxit = 200,     # 最大迭代次数                 decay = 1e-4)    # 权重衰减 #4. 模型预测与评估 # 对测试集进行预测,得到每个类别的概率predictions_prob type = "raw")
# 取概率最大的类别作为最终预测结果predicted_class true_class $Species[-sample_index]
# 创建混淆矩阵confusion_matrix print(confusion_matrix)
# 计算准确率accuracy sum(diag(confusion_matrix)) / sum(confusion_matrix)print(paste("准确率:", round(accuracy, 4)))            

02
使用keras和TensorFlow

适合复杂和深度学习项目 

这是目前 R 中进行严肃的机器学习项目的推荐方式。keras 是一个高级 API,其后端可以是 TensorFlow, Theano 或 CNTK。在 R 中,我们通过 keras 包来调用 TensorFlow。

#1.安装和加载环境# 安装 keras 库并配置 TensorFlow 后端install.packages("keras")library(keras)
# 以下命令会自动安装 Python 版的 TensorFlow 和 Kerasinstall_keras() # 只需运行一次 #2.准备数据data(iris)iris_sub "setosa", ]iris_sub$Species
# 将因子标签转换为整数索引(0 和 1)# 注意:keras 需要从 0 开始的索引labels 2 # virginica=1, versicolor=0
# 将特征数据转换为矩阵并标准化features 1:4]))
# 划分训练集和测试集set.seed(123)sample_index 1:nrow(features), size = nrow(features) * 0.7)x_train x_test y_train y_test 
# 对标签进行独热编码(另一种方式,Keras 也接受整数标签+ sparse_categorical_crossentropy)y_train_categorical 2)y_test_categorical 2)
#3.定义模型结构使用 # keras_model_sequential() 并按顺序堆叠层 (layer_dense)。model %  # 第一隐藏层:需要指定输入维度 input_shape(仅在第一层指定)  layer_dense(units = 16, activation = 'relu', input_shape = c(4)) %>%  layer_dropout(rate = 0.2) %>% # 丢弃层,随机丢弃20%神经元防止过拟合  # 第二隐藏层  layer_dense(units = 8, activation = 'relu') %>%  # 输出层:二分类问题,所以用2个神经元 + softmax激活函数  layer_dense(units = 2, activation = 'softmax')
# 查看模型结构summary(model)
#4.编译模型指定优化器、损失函数和评估指标。model %>% compile(  loss = 'categorical_crossentropy'# 多分类交叉熵损失  optimizer = optimizer_adam(learning_rate = 0.001), # Adam 优化器  metrics = c('accuracy'# 监控准确率)#5.训练模型使用 fit() 函数。history % fit(  x_train, y_train_categorical,  epochs = 100,          # 在整个训练集上训练多少轮  batch_size = 8,        # 每个梯度更新使用的样本数  validation_split = 0.2 # 从训练集中拿出20%作为验证集)
# 绘制训练过程(损失和准确率的变化)plot(history)#6.评估与预测# 在测试集上评估模型性能score % evaluate(x_test, y_test_categorical)print(paste('测试集损失:', score$loss))print(paste('测试集准确率:', score$acc))
# 对测试集进行预测predictions % predict(x_test) %>% k_argmax() %>% as.numeric()# k_argmax() 取概率最大的索引,然后转换为数值向量
# 将预测的索引转换回类别名pred_classes $Species)[predictions + 2] # 因为之前减了2
# 混淆矩阵table(Predicted = pred_classes, Actual = iris_sub$Species[-sample_index])
小编总结




在 R 语言中实施机器学习神经网络主要有两种策略,各有其适用的场景。

1. 经典轻量之选 (nnet 包):
其核心优势在于简单易用开箱即用。作为 R 的基础扩展包,它无需复杂环境配置,通过 nnet() 函数即可快速构建单隐藏层网络,非常适合初学者理解神经网络基础或处理小规模的简单分类与回归任务。然而,其功能也仅限于此,缺乏构建复杂模型架构的能力。

2. 现代强大之选 (keras + tensorflow 框架):
这是当前处理严肃机器学习项目主流和推荐方案。虽然需要配置 Python 环境,但它提供了一个极其灵活、强大的高级接口。你可以自由地堆叠深度网络层(如 CNN、RNN),轻松使用 GPU 加速,并利用丰富的预训练模型和社区资源。无论是复杂的研究还是生产环境部署,Keras 框架都能提供工业级的性能和灵活性。

总结来说,您的选择取决于任务需求:若追求快速上手和实现简单模型,可从 nnet 入门;若旨在解决复杂问题或进行深度学习,则必须掌握 keras 与 tensorflow 这一强大组合



往期推荐


分析专辑


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


文章解读专辑


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


招聘信息


招聘


点击红字即可进入专栏!


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


点个在看你最好看

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/185965
 
40 次点击