自动编码器和SVD:矩阵应用



在我的研究中,我使用了所谓的Lee Carter模型(死亡率模型(,在该模型中,您可以通过使用(对数死亡率-平均年龄特定死亡率模式(矩阵上的奇异值分解来获得模型参数。我正试图找到奇异值分解的替代品,我发现一个好的选择可以是由递归神经网络应用的自动编码。事实上,SVD可以收敛到自动编码器,其中激活函数是线性函数。为此,我会尝试使用非线性激活函数,以获得通过具有非线性形状的SVD获得的相同项目。让我们使用这些步骤来获得数据:年龄和年份的死亡率

rm(list = ls())
library(MortalitySmooth)
ages <- 0:100
years <- 1960:2009
D <- as.matrix(selectHMDdata("Japan", "Deaths",
"Females", ages,
years))
D[D==0] <- 1
E <- as.matrix(selectHMDdata("Japan", "Exposures",
"Females", ages,
years))
E[E==0] <- 1

lMX <- log(D/E)
alpha <- apply(lMX, 1, mean)`
cent.logMXMatrix <- sweep(lMX, 1, alpha)

现在我们在cent.logMXMatrix上应用SVD当我在R中使用SVD时,我得到的是:

SVD <- svd(cent.logMXMatrix)

我需要得到SVD:的组件

SVD$d
SVD$v
SVD$u 

我想得到SVD组件使用自动编码器。。。有可能吗?我想听听你的意见,你的一些建议,以及是否可能我需要一个用于"cent.logMXMatrix"上自动编码器的基本python代码公式

非常感谢,Andrea

一层自动编码器将数据点线性映射到低维潜在空间,然后应用非线性激活将结果投影到原始空间,同时最小化重建误差
如果我们用线性激活(恒等式(代替非线性激活,并使用L2范数作为重建误差,则您将执行与SVD相同的操作。

# use keras with tensorflow backend
# This is a vanilla autoencoder with one hidden layer
from keras.layers import Input, Dense
from keras.models import Model
input_dim = Input(shape = (nfeat, )) # nfeat=the number of initial features
encoded1 = Dense(layer_size1, activation='linear')(input_dim) # layer_size1:size of your encoding layer
decoded1 = Dense(nfeat, activation='linear')
autoencoder = Model(inputs = input_dim, outputs = decoded1)
autoencoder.compile(loss='mean_squared_error', optimizer='adam')

最新更新