R语言做生信

R语言机器学习与临床预测模型38--深度学习

2022-04-07  本文已影响0人  科研私家菜

本内容为【科研私家菜】R语言机器学习与临床预测模型系列课程

R小盐准备介绍R语言机器学习与预测模型的学习笔记

你想要的R语言学习资料都在这里, 快来收藏关注【科研私家菜】


01 深度学习

深度学习(DeepLearning)的概念最初由Hinton于2006年提出,他当时首次提出了深度信念网络(DBN),源于人工神经网络的研究。深度学习通过组合低层特征形成更加抽象的高层表示属性类别或特征,以发现数据的分布式特征表示。研究深度学习的动机在于建立模拟人脑进行分析学习的神经网络,它模仿人脑的机制来解释数据,例如图像、声音和文本等。相比之前,他采用无监督方式逐层训练深层网络,在深层网络训练中取得了跨越式的进展。虽然称为是深度学习,但其实是深层神经网络。神经网络或者说人工神经网络早在上个世纪都已经提出,但是在Hinton之前,很少人尝试去训练深层神经网络,也当然没有深度的概念了。
深度学习两个最基本的模型:卷积神经网络(CNnsorflow以及Facebook的Pytorch等等,大家可以选择某个框架从简单的N)和递归神经网络(RNN)。前者主要用于计算机视觉(CV),后者主要用于自然语言处理(NLP)。


深度学习所使用的学习算法,将数据的原始形态作为输入,然后将原始数据逐层抽象成最终特征表示,而这种特征表示正是自身任务所需的,最后以特征到任务目标的映射作为结束。简单地说,深度学习是学习数据表示的多级方法。
深度学习是学习样本数据的内在规律和表示层次,从这些学习过程中获得的信息,对理解诸如文字、图像和声音等数据,有很大的帮助。它的最终目标是让机器能够像人一样具有分析学习能力,能够识别日常生活中这些非结构化数据。深度学习是一个复杂的机器学习算法,在语音和图像识别方面取得的效果,远远超过先前相关技术。
深度学习像是一个作出决策的黑盒子。它们以一个数组作为输入(数组可以代表像素,音频微波,或者单词),在这个数组上运行一系列的函数,输出一个或多个数字。输出结果一般是对你试图从输入中得出的一些特性的预测,例如一张图片上画的是不是一只猫。
在黑盒子里运行的功能是由神经网络的内存控制的,权重数组负责决定如何将输入数据进行组合和重组来生成结果。像猫检测这样的实际问题,在处理时需要非常复杂的功能,也就是说它的这些权重数组会非常大。一个最近的计算机视觉网络问题,其权重数组包含大约6千万的数据。使用神经网络的一个最大的障碍是如何给这些巨大的数组赋值,才能很好的将输入信号转换成输出的预测结果。
人工智能大师、深度学习泰斗约书亚·本吉奥(Yoshua Bengio)说:「没有可与深度学习竞争的人工智能技术。人工智能是循序渐进的耐心工作的成果,而且它总是站在巨人的肩膀上,并且这些进步在某种程度上促成了转折点——我们可以在新服务中利用这些成果来生产新东西,进行经济转型以及改变社会。



02 深度学习的R语言实现


# The following two commands remove any previously installed H2O packages for R.
if ("package:h2o" %in% search()) { detach("package:h2o", unload=TRUE) }
if ("h2o" %in% rownames(installed.packages())) { remove.packages("h2o") }

# Next, we download packages that H2O depends on.
if (! ("methods" %in% rownames(installed.packages()))) { install.packages("methods") }
if (! ("statmod" %in% rownames(installed.packages()))) { install.packages("statmod") }
if (! ("stats" %in% rownames(installed.packages()))) { install.packages("stats") }
if (! ("graphics" %in% rownames(installed.packages()))) { install.packages("graphics") }
if (! ("RCurl" %in% rownames(installed.packages()))) { install.packages("RCurl") }
if (! ("jsonlite" %in% rownames(installed.packages()))) { install.packages("jsonlite") }
if (! ("tools" %in% rownames(installed.packages()))) { install.packages("tools") }
if (! ("utils" %in% rownames(installed.packages()))) { install.packages("utils") }

# Now we download, install and initialize the H2O package for R.
install.packages("h2o", type="source", repos=(c("http://h2o-release.s3.amazonaws.com/h2o/rel-tverberg/5/R")))
library(h2o)

path <- "h2o/bank_DL.csv" # 

localH2O = h2o.init(nthreads = -1)

bank <- h2o.uploadFile(path=path)
class(bank)
str(bank)
head(bank)
summary(bank)
h2o.table(bank$y)

rand <- h2o.runif(bank, seed = 123)

train <- bank[rand <= 0.7, ]
train <- h2o.assign(train, key = "train")
test <- bank[rand  > 0.7, ]
test <- h2o.assign(test, key = "test")

h2o.table(train[, 64])
h2o.table(test[, 64])

hyper_params <- list(
  activation = c("Tanh", "TanhWithDropout"),
  hidden = list(c(20,20),c(40, 40),c(30, 30, 30)),
  input_dropout_ratio = c(0, 0.05),
  rate = c(0.01, 0.25)
)

search_criteria = list(
  strategy = "RandomDiscrete", max_runtime_secs = 420,     
  max_models = 100, seed = 123, stopping_rounds = 5, 
  stopping_tolerance = 0.01
)

randomSearch <- h2o.grid(
  algorithm = "deeplearning",
  grid_id = "randomSearch",
  training_frame = train,
  validation_frame = test, 
  x = 1:63, 
  y = 64,
  epochs = 1,
  stopping_metric = "misclassification",
  hyper_params = hyper_params,
  search_criteria = search_criteria
)   

关注R小盐,关注科研私家菜(VX_GZH: SciPrivate),有问题请联系R小盐。让我们一起来学习 R语言机器学习与临床预测模型

上一篇下一篇

猜你喜欢

热点阅读