我们淹没在信息的海洋里,但是知识却严重短缺。
——Rutherford D.Roger
限制玻尔兹曼机是一种无监督学习模型,用来逼近样本数据的概率密度函数。
?限制玻尔兹曼机允许信息双向流动。
另外一种角度可以把RBM看作可见变量(节点)和隐藏变量(节点)的联合概率分布的参数模型。RBM实际上是一种自编码器,基于数据的联合概率分布来得到数据的表示(编码)。
RBM训练的目标是调整模型的参数,并最大化训练数据的对数似然函数。
#R语言构建限制玻尔兹曼机
#取1000个观测值用于分析,其中800个作为训练数据集
library(RcppDL)
library("ltm")
data(Mobility)
data<-Mobility
set.seed(2021)
n=nrow(data)
sample<-sample(1:n,1000,FALSE)
n=nrow(data)
train<-sample(1:n,800,FALSE)
#创建训练和测试属性对象(x-train,x_test)
x_train<-matrix(as.numeric(unlist(data[train,])),nrow=nrow(data[train,]))
x_test<-matrix(as.numeric(unlist(data[-train,])),nrow=nrow(data[-train,]))
x_train<-x_train[,c(4,6)]
x_test<-x_test[,c(4,6)]
head(x_train)
head(x_test)
#构建模型
fit<-Rrbm(x_train)
setHiddenRepresentation(fit,x=3)
setLearningRate(fit,x=0.01)
summary(fit)
train(fit)
reconProb<-reconstruct(fit,x_train)
#概率转换为二进制
recon<-ifelse(reconProb>=0.5,1,0)
head(recon)
table(recon,x_train,dnn=c("Predicted","Observed"))
par(mfrow=c(1,2))
image(x_train,main="Train")
image(recon,main="Reconstruction")
深度信念网络
深度信念网络(DBN) 是一个概率生成模型的多层神经网络,由多个限制玻尔兹曼机堆叠组成。在一个深度信念网络中,每两个连续的隐藏层构成一个RBM。当前RBM的输入实际上是前一个RBM的输出特征,每个RMB对输入向量进行非线性变化,产生输出,然后输出向量作为下一个RBM的输入向量。
#深度信念网络
y<-apply(cbind(data[,4],data[,6]),1,max,na.rm=TRUE)
y_train<-as.numeric(y[train])
temp<-ifelse(y_train==0,1,0)
y_train<-cbind(y_train,temp)
head(y_train)
y_test<-as.numeric(y[-train])
temp1<-ifelse(y_test==0,1,0)
y_test<-cbind(y_test,temp1)
head(y_test)
nrow(y_train)
nrow(y_test)
hidden=c(12,10)
fit<-Rdbn(x_train,y_train,hidden)
#构建两个隐藏层的模型。先进行预训练
summary(fit)
pretrain(fit)
finetune(fit)
#用训练好的模型来预测测试样本的分类结果
predProb<-predict(fit,x_test)
head(predProb,6)
pred1<-ifelse(predProb[,1]>=0.5,1,0)
table(pred1,y_test[,1],dnn=c("Predicted","Observed"))
继续学习,本书end。
|