R语言快速深度学习进行回归预测(转)
深度学习在过去几年,由于卷积神经网络的特征提取能力让这个算法又火了一下,其实在很多年以前早就有所出现,但是由于深度学习的计算复杂度问题,一直没有被广泛应用。
一般的,卷积层的计算形式为:

其中、x分别表示当前卷积层中第j个特征、前一层的第i个特征;k表示当前层的第j个特征与前一层的第i个特征之间的卷积核;M表示需要卷积的前一层的特征的集合,b表示当前卷积层中第j个卷积核对应的偏置。f为激活函数。
卷积层中的权值与阈值通过随机梯度下降法得到:

式中,a为学习率。
损失函数对卷积层参数的梯度可通过链式求导来得到,如下:

式中,
表示前一层的梯度。
卷积神经网络中的激活函数有多种形式:

式中a为固定的参数。

式中
,每个batch训练样本中的都随机采样自均值分布,在测试中取
。

从上述卷积神经网络看出,学习过程中需要进行梯度迭代,真正在实现工业检测等实际应用时时间复杂度极高,因此学术界进行了优化,优化后的一种单层神经网络极限学习机解决了此问题,在过去应用十分广泛。
为解决上述问题,出现了极限学习机。
用最小二乘法解决的一种特殊结果为,等价为一种矩阵求逆的形式

为的Moore-Penrose广义逆。
1)由于极限学习机求取权值的时候只是计算一个广义逆,因此训练速度比基于梯度的学习算法快很多;
2)基于梯度的学习算法存在很多问题,比如学习速率难以确定、局部网络最小化等,极限学习机有效的改善了此类问题,在分类过程中取得了更好的效果;
3)与其他神经网络算法不同,极限学习机在训练过程中,选择激活函数过程中可以选择不可微函数。;
4)极限学习机算法训练过程并不复杂。极限学习机只需要三步就可以完成整个的学习过程。
以下用R代码讲解一下极限学习机
###训练过程如下:
训练过程4步即可。
elmtrain.default <-
function(x,y,nhid,actfun,...) {
require(MASS)
if(nhid < 1) stop("ERROR: number of hidden neurons must be >= 1")
########1.选择数据,X与Y
T <- t(y)
P <- t(x)
########2.随机产生权值,目的在于将X值进行变化
inpweight <- randomMatrix(nrow(P),nhid,-1,1)
tempH <- inpweight %*% P
biashid <- runif(nhid,min=-1,max=1)
biasMatrix <- matrix(rep(biashid, ncol(P)), nrow=nhid, ncol=ncol(P), byrow = F)
tempH = tempH + biasMatrix
########3.将变化后的X值进行高维映射,最常用是sig函数
if(actfun == "sig") H = 1 / (1 + exp(-1*tempH))
else {
if(actfun == "sin") H = sin(tempH)
else {
if(actfun == "radbas") H = exp(-1*(tempH^2))
else {
if(actfun == "hardlim") H = hardlim(tempH)
else {
if(actfun == "hardlims") H = hardlims(tempH)
else {
if(actfun == "satlins") H = satlins(tempH)
else {
if(actfun == "tansig") H = 2/(1+exp(-2*tempH))-1
else {
if(actfun == "tribas") H = tribas(tempH)
else {
if(actfun == "poslin") H = poslin(tempH)
else {
if(actfun == "purelin") H = tempH
else stop(paste("ERROR: ",actfun," is not a valid activation function.",sep=""))
}
}
}
}
}
}
}
}
}
########4.拟合出模型系数,即Y=AX中的A
outweight <- ginv(t(H), tol = sqrt(.Machine$double.eps)) %*% t(T)
Y <- t(t(H) %*% outweight)
model = list(inpweight=inpweight,biashid=biashid,outweight=outweight,actfun=actfun,nhid=nhid,predictions=t(Y))
model$fitted.values <- t(Y)
model$residuals <- y - model$fitted.values
model$call <- match.call()
class(model) <- "elmNN"
model
}
测试过程,过程4步即可。
function (object, newdata = NULL, ...)
{
if (is.null(newdata))
predictions <- fitted(object)
else {
if (!is.null(object$formula)) {
x <- model.matrix(object$formula, newdata)
}
else {
x <- newdata
}
########1.获取训练模型中的参数
inpweight <- object$inpweight
biashid <- object$biashid
outweight <- object$outweight
actfun <- object$actfun
nhid <- object$nhid
TV.P <- t(x)
########2.通过参数将X值进行变化
tmpHTest = inpweight %*% TV.P
biasMatrixTE <- matrix(rep(biashid, ncol(TV.P)), nrow = nhid,
ncol = ncol(TV.P), byrow = F)
tmpHTest = tmpHTest + biasMatrixTE
########3.高维度映射,通常选择sig函数
if (actfun == "sig")
HTest = 1/(1 + exp(-1 * tmpHTest))
else {
if (actfun == "sin")
HTest = sin(tmpHTest)
else {
if (actfun == "radbas")
HTest = exp(-1 * (tmpHTest^2))
else {
if (actfun == "hardlim")
HTest = hardlim(tmpHTest)
else {
if (actfun == "hardlims")
HTest = hardlims(tmpHTest)
else {
if (actfun == "satlins")
HTest = satlins(tmpHTest)
else {
if (actfun == "tansig")
HTest = 2/(1 + exp(-2 * tmpHTest)) -
1
else {
if (actfun == "tribas")
HTest = tribas(tmpHTest)
else {
if (actfun == "poslin")
HTest = poslin(tmpHTest)
else {
if (actfun == "purelin")
HTest = tmpHTest
else stop(paste("ERROR: ", actfun,
" is not a valid activation function.",
sep = ""))
}
}
}
}
}
}
}
}
}
########4.进行预测的值计算,即Y(预测)=AX
TY = t(t(HTest) %*% outweight)
predictions <- t(TY)
}
predictions
}
通过R讲述了极限学习机的内部构造,以下是R自带的示例:通过极限学习机预测
library(elmNN)
set.seed(1234)
Var1 <- runif(50, 0, 100)
sqrt.data <- data.frame(Var1, Sqrt=sqrt(Var1))
model <- elmtrain.formula(Sqrt~Var1, data=sqrt.data, nhid=10, actfun="sig")
new <- data.frame(Sqrt=0,Var1 = runif(50,0,100))
p <- predict(model,newdata=new)
转自:https://ask.hellobi.com/blog/Zason/4543
R语言快速深度学习进行回归预测(转)的更多相关文章
- 极限学习机︱R语言快速深度学习进行回归预测
本文转载于张聪的博客,链接:https://ask.hellobi.com/blog/zason/4543. 深度学习在过去几年,由于卷积神经网络的特征提取能力让这个算法又火了一下,其实在很多年以前早 ...
- 碎片︱R语言与深度学习
笔者:受alphago影响,想看看深度学习,但是其在R语言中的应用包可谓少之又少,更多的是在matlab和python中或者是调用.整理一下目前我看到的R语言的材料: ---------------- ...
- R语言︱H2o深度学习的一些R语言实践——H2o包
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- R语言H2o包的几个应用案例 笔者寄语:受启发 ...
- MxNet+R︱用R语言实现深度学习(单CPU/API接口,一)
MxNet有了亚马逊站台之后,声势大涨,加之接口多样化,又支持R语言所以一定要学一下.而且作为R语言的fans,为啥咱们R语言就不能上深度学习嘞~ -------------------------- ...
- R语言书籍的学习路线图
现在对R感兴趣的人越来越多,很多人都想快速的掌握R语言,然而,由于目前大部分高校都没有开设R语言课程,这就导致很多人不知道如何着手学习R语言. 对于初学R语言的人,最常见的方式是:遇到不会的地方,就跑 ...
- R语言与机器学习学习笔记
人工神经网络(ANN),简称神经网络,是一种模仿生物神经网络的结构和功能的数学模型或计算模型.神经网络由大量的人工神经元联结进行计算.大多数情况下人工神经网络能在外界信息的基础上改变内部结构,是一种自 ...
- R语言网络爬虫学习 基于rvest包
R语言网络爬虫学习 基于rvest包 龙君蛋君:2015年3月26日 1.背景介绍: 前几天看到有人写了一篇用R爬虫的文章,感兴趣,于是自己学习了.好吧,其实我和那篇文章R语言爬虫初尝试-基于RVES ...
- R语言与显著性检验学习笔记
R语言与显著性检验学习笔记 一.何为显著性检验 显著性检验的思想十分的简单,就是认为小概率事件不可能发生.虽然概率论中我们一直强调小概率事件必然发生,但显著性检验还是相信了小概率事件在我做的这一次检验 ...
- R语言函数化学习笔记6
R语言函数化学习笔记 1.apply函数 可以让list或者vector的元素依次执行一遍调用的函数,输出的结果是list格式 2.sapply函数 原理和list一样,但是输出的结果是一个向量的形式 ...
随机推荐
- 06 Theory of Generalization
若H的断点为k,即k个数据点不能被H给shatter,那么k+1个数据点也不能被H给shatter,即k+1也是H的断点. 如果给定的样本数N是大于等于k的,易得mH(N)<2N,且随着N的增大 ...
- Nature:新发现挑战神经元作用传统理论 [转自科学网]
美德科学家独立进行的两项最新研究表明,单个神经元的激发就足以影响学习和行为.这一结论挑战了人们长期以来的认识,即数千个神经元的有序排列才能够产生一个行为反应.这两篇论文12月19日在线发表于<自 ...
- 【iOS】7.4 定位服务->3.4 地图框架MapKit 功能4:地图截图
本文并非最终版本,如果想要关注更新或更正的内容请关注文集,联系方式详见文末,如有疏忽和遗漏,欢迎指正. 本文相关目录: ================== 所属文集:[iOS]07 设备工具 === ...
- mac上使用使用rz,sz命令
mac上使用rz,sz命令,mac上的终端不支持rz 和sz,所以安装iterm并配置使用rz和cz 1.首先需要下载安装iterm2,下载地址:下载后安装 http://www.iterm2.cn/ ...
- Asp .Net MVC4笔记之走进MVC
一.MVC三层架构: mvc三层架构,大家都比较熟悉了,这里再介绍一下.Mvc将应用程序分离为三个部分: Model:是一组类,用来描述被处理的数据,同时也定义这些数据如何被变更和操作的业务规则.与数 ...
- elasticsearch系列(一) 术语
elasticsearch(以下简称es)是一款开源的搜索引擎,基于apach lucene.最近在做nlp的时候顺便研究一下. 下面是官方列举的术语解释 Near Realtime 接近实时的查询, ...
- java复习(1)---java与C++区别
[系列说明]java复习系列适宜有过java学习或C++基础或了解java初步知识的人阅读,目的是为了帮助学习过java但是好久没用已经遗忘了的童鞋快速捡起来.或者教给想快速学习java的童鞋如何应用 ...
- 想成为Java高级工程师的看过来
想成为Java高级工程师,有哪些要求呢? 1.Core Java,就是Java基础.JDK的类库,很多童鞋都会说,JDK我懂,但是懂还不足够,知其然还要知其所以然,JDK的源代码写的非常好,要经常查看 ...
- [.NET] 《Effective C#》读书笔记(二)- .NET 资源托管
<Effective C#>读书笔记(二)- .NET 资源托管 简介 续 <Effective C#>读书笔记(一)- C# 语言习惯. .NET 中,GC 会帮助我们管理内 ...
- Android的root学习
Android的内核就是Linux,所以Android获取root其实和Linux获取root权限是一回事儿.在Linux下获取root权限的时候就是执行sudo或者su,接下来系统会提示输入root ...