最近有小伙伴反映收不到推送,因为公众号改了推送算法,现在需要加星标,多点赞、点在看,才能准时收到推送哦。
导语:在 R 语言中构建神经网络模型主要有两种主流方式:使用经典的 nnet
包和使用更强大灵活的 keras
+ tensorflow
框架。
北京墨因生物已经与国内50+知名医院的老师或名牌大学实验室合作(协和、哈工大、同济、哈医大等)。欢迎有生信分析需求的老师垂询,公共数据库数据挖掘或自测数据分析均可。

适合快速上手简单任务
nnet
(Feed-Forward Neural Networks) 是 R 内置 stats
套件的一部分,非常适合创建单隐藏层的前馈神经网络。它简单、轻量,但对于复杂的深度学习任务能力有限。
library(nnet)
nnet 的 class.ind 函数可以很方便地完成这件事。同时,将数据划分为训练集和测试集。
iris_sub $Species != "setosa", ]
iris_sub$Species $Species)
target class.ind(iris_sub$Species)
features 1:4])
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)
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)))
适合复杂和深度学习项目
这是目前 R 中进行严肃的机器学习项目的推荐方式。keras
是一个高级 API,其后端可以是 TensorFlow, Theano 或 CNTK。在 R 中,我们通过 keras
包来调用 TensorFlow。
install.packages("keras")
library(keras)
install_keras() # 只需运行一次
data(iris)
iris_sub "setosa", ]
iris_sub$Species
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
y_train_categorical 2)
y_test_categorical 2)
model %
layer_dense(units = 16, activation = 'relu', input_shape = c(4)) %>%
layer_dropout(rate = 0.2) %>% # 丢弃层,随机丢弃20%神经元防止过拟合
layer_dense(units = 8, activation = 'relu') %>%
layer_dense(units = 2, activation = 'softmax')
summary(model)
model %>% compile(
loss = 'categorical_crossentropy',
optimizer = optimizer_adam(learning_rate = 0.001),
metrics = c('accuracy')
)
history % fit(
x_train, y_train_categorical,
epochs = 100,
batch_size = 8,
validation_split = 0.2
)
plot(history)
score % evaluate(x_test, y_test_categorical)
print(paste('测试集损失:', score$loss))
print(paste('测试集准确率:', score$acc))
predictions % predict(x_test) %>% k_argmax() %>% as.numeric()
pred_classes $Species)[predictions + 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
这一强大组合。
码字不易,欢迎读者分享或转发到朋友圈,任何公众号或其他媒体未经许可不得私自转载或抄袭。由于微信平台算法改版,公众号内容将不再以时间排序展示,建议设置“作图丫”公众号为星标,防止丢失。星标具体步骤为:(2)点击右上角的小点点,在弹出界面选择“设为星标”即可。