【问题标题】:How to evaluate the autoencoder used for dimensionality reduction如何评估用于降维的自动编码器
【发布时间】:2020-12-13 23:11:15
【问题描述】:

我正在使用自动编码器作为一种降维技术,将学习到的表示用作可用于进一步分析的低维特征。

代码sn-p:

# Note: implementation --> based on keras 
encoding_dim = 32

# Define input layer
X_input = Input(shape=(X_train.shape[1],))
# Define encoder:
encoded = Dense(encoding_dim, activation='relu')(X_input)
# Define decoder:
decoded = Dense(X_train.shape[1], activation='sigmoid')(encoded)
# Create the autoencoder model
AE_model = Model(X_input, decoded)
#Compile the autoencoder model
AE_model.compile(optimizer='adam', loss='mse')
#Extract learned representation
learned_feature = Model(X_input, encoded)

history = AE_model.fit(X_train, X_train, epochs=10, batch_size=32)

我一直在寻找一种方法来衡量学习表示的质量。我发现一种方法是测量重建误差。我使用以下代码:

import math
reconstr_error = AE_model.evaluate(X_train, X_train, verbose=0)
print('The reconstruction error: %.2f MSE (%.2f RMSE)' % (reconstr_error , math.sqrt(reconstr_error )))

我得到了 0.00 MSE (0.05 RMSE) 作为结果。但是,我不确定上面的代码在测量重构误差方面是否正确? 另外,如果有其他方法可以做到这一点,请告诉我。

【问题讨论】:

  • 您输入的维度是多少?可能是你的压缩不够。另外,您在训练期间的损失是多少?
  • 感谢您的回复,维度在113左右,损失是“mse - 均方误差”。
  • 你在训练过程中得到了什么mse值?
  • 我得到了 (0.0081)。我只是想知道我用来计算重构误差的方法是否正确。
  • 这样做会得到什么print('The reconstruction error: %.6f MSE (%.6f RMSE)' % (reconstr_error , math.sqrt(reconstr_error )))

标签: python machine-learning neural-network autoencoder dimensionality-reduction


【解决方案1】:

您进行压缩的目的是什么?如果您的项目中有以下分类器模型,您可以使用正常(未输入 AE)数据来训练该模型,并查看准确性或您正在测量的任何内容。然后训练相同的模型,但在使用 AE 压缩数据之后。那么如果你也得到了比较好的结果,这意味着你正在使用自动编码器提取一些有用的东西。特别是如果您不使用所有数据来训练 AE,并查看 AE 在其训练中未看到的示例压缩将如何影响准确性。

例如,在 PCA 等其他技术中,主成分是特征向量,这些特征向量的相应特征值实际上非常有意义,它们告诉您数据中的信息在每个方向上有多少变化,就像方差一样。但是在 AE 中,尤其是 Deep 中,这样的分析并不直观,或者至少超出我的知识范围(如果存在的话)。但是在 1 层 AE 中也许你仍然可以做一些类似的事情,实际上,以 MSE 为目标的 1 层 AE 非常接近 PCA。您可以在隐藏层中提取这些权重,还可以在数据协方差矩阵上应用 PCA 或特征分解。然后计算这些隐藏层权重和特征向量之间的余弦距离,看看它是否保留了一些有意义的东西。

我不知道是否可以做更多的事情,但是如果这对您很重要,也许您可​​以找到一些论文来解决这些问题。

【讨论】:

  • 感谢您的见解。这是有道理的,我同意你的看法。在隐藏层方面,我计划添加更多层,但我只想从一个层开始。
  • 正如@leo 所建议的,我在自动编码器之后使用了以下分类器模型。我用精确召回和 f 分数评估了分类器。然而,分类器结果并没有改善(因为我在使用和不使用自动编码器的情况下对其进行了测试)。我担心我的自动编码器网络可能有一些问题。任何建议我使用的自动编码器可能有什么问题?所以我可以改进它。谢谢。
  • 使用自动编码器压缩数据后,结果通常不会有任何改善。您正在丢弃一些信息。但是如果准确率与你使用整个数据集的情况相似,并且压缩率很好,比如将图像转换为 32d 向量之类的,那么这实际上是一个好兆头。这意味着自动编码器减少了输入大小但没有丢弃任何有用的东西,所以它做得很好。
  • 现在更有意义了。非常感谢,@leo。
猜你喜欢
  • 2022-01-14
  • 1970-01-01
  • 2018-04-02
  • 2019-10-01
  • 2023-03-16
  • 2020-01-23
  • 2021-11-12
  • 2015-03-20
  • 1970-01-01
相关资源
最近更新 更多