如何评估用于降维的自动编码器
How to evaluate the autoencoder used for dimensionality reduction
我正在使用自动编码器作为降维技术,将学习到的表示用作可用于进一步分析的低维特征。
代码片段:
# 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)。然而,我不确定上面的代码在测量重构误差方面是否正确?
另外,如果有其他方法,请告诉我。
你压缩的目的是什么?如果您的项目中有以下分类器模型,您可以使用正常(未输入 AE)数据训练该模型并查看准确性或您正在测量的任何内容。然后训练相同的模型,但在使用 AE 压缩数据之后。那么如果你也得到了比较好的结果,这意味着你正在提取一些对自动编码器有用的东西。特别是如果您不使用所有数据来训练 AE,并查看 AE 在其训练中未看到的示例的压缩将如何影响准确性。
例如PCA等其他技术,主成分是特征向量,这些特征向量对应的特征值实际上很有意义,它们告诉你数据中有多少信息在每个方向上变化,就像方差一样。但在 AE 中,尤其是 Deep 中,这种分析并不直观,或者至少超出我的知识范围(如果存在的话)。但是在 1 层 AE 中也许你仍然可以做一些类似的事情,实际上,1 层 AE 和 MSE 因为 objective 非常接近 PCA。您可以在隐藏层中提取这些权重,也可以在数据协方差矩阵上应用 PCA 或特征分解。然后计算那些隐藏层权重和特征向量之间的余弦距离,看看它是否保留了一些有意义的东西。
我不知道是否可以做更多的事情,但如果这对您很重要,也许您可以找到一些论文来解决这些问题。
我正在使用自动编码器作为降维技术,将学习到的表示用作可用于进一步分析的低维特征。
代码片段:
# 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)。然而,我不确定上面的代码在测量重构误差方面是否正确? 另外,如果有其他方法,请告诉我。
你压缩的目的是什么?如果您的项目中有以下分类器模型,您可以使用正常(未输入 AE)数据训练该模型并查看准确性或您正在测量的任何内容。然后训练相同的模型,但在使用 AE 压缩数据之后。那么如果你也得到了比较好的结果,这意味着你正在提取一些对自动编码器有用的东西。特别是如果您不使用所有数据来训练 AE,并查看 AE 在其训练中未看到的示例的压缩将如何影响准确性。
例如PCA等其他技术,主成分是特征向量,这些特征向量对应的特征值实际上很有意义,它们告诉你数据中有多少信息在每个方向上变化,就像方差一样。但在 AE 中,尤其是 Deep 中,这种分析并不直观,或者至少超出我的知识范围(如果存在的话)。但是在 1 层 AE 中也许你仍然可以做一些类似的事情,实际上,1 层 AE 和 MSE 因为 objective 非常接近 PCA。您可以在隐藏层中提取这些权重,也可以在数据协方差矩阵上应用 PCA 或特征分解。然后计算那些隐藏层权重和特征向量之间的余弦距离,看看它是否保留了一些有意义的东西。
我不知道是否可以做更多的事情,但如果这对您很重要,也许您可以找到一些论文来解决这些问题。