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

Python 自动编码器和SVD:矩阵应用,python,matrix,autoencoder,svd,Python,Matrix,Autoencoder,Svd,在我的研究中,我使用了所谓的Lee-Carter模型死亡率模型,在该模型中,你可以通过对数死亡率矩阵上的奇异值分解来获得模型参数,对数死亡率是特定年龄段的平均死亡率模式。 我试图找到奇异值分解的替代方法,我发现一个很好的选择是由递归神经网络应用的自动编码。事实上,SVD可以收敛到激活函数为线性函数的自动编码器。为此,我将尝试使用一个非线性激活函数,以获得由SVD获得的具有非线性形状的相同项。 让我们使用这些步骤来获得数据:年龄和年龄的死亡率 rm(list = ls()) library(Mo

在我的研究中,我使用了所谓的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)
我想得到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')

奇异值分解是一个线性代数问题。当然,你可以使用一个只有两层线性的伪自动编码器来获得它。谢谢,你能告诉我吗?线性编码器中不需要更多层。但是谢谢你展示了OP的代码。即使在这里,你也应该只有两层,而不是三层。这就是为什么我没有投票。@MatthieuBrucher你是对的。由于我们有线性激活,无需添加更多层。对不起!谢谢你修理这个!
SVD$d
SVD$v
SVD$u 
# 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')