我对自动编码器进行了一些研究,并且我了解到它们也可以用于特征提取(请参阅本网站上的这个问题作为示例)。那里的大多数示例似乎都集中在应用于图像数据的自动编码器上,但我想将它们应用于更通用的数据集。
因此,我使用keras
Python 中的框架实现了一个自动编码器。为简单起见,为了测试我的程序,我已经针对Iris Data Set对其进行了测试,告诉它将我的原始数据从 4 个特征压缩到 2 个,以查看它的行为。
编码器似乎在压缩数据方面发挥了作用(编码器层的输出确实只显示了两列)。然而,这两列的值并没有出现在原始数据集中,这让我觉得自动编码器在后台做一些事情,选择/组合特征以获得压缩表示。
这是完整的工作示例:
from pandas import read_csv
from numpy.random import seed
from sklearn.model_selection import train_test_split
from keras.layers import Input, Dense
from keras.models import Model
# Get input data and separate features from labels
df = read_csv("iris.data")
Y = df.iloc[:,4]
X = df.iloc[:, : 4]
# Split data set in train and test data
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, train_size=0.5, random_state=seed(1234))
# Input information
col_num = X.shape[1]
input_dim = Input(shape=(col_num,))
# Encoding information
encoding_dim = 2
encoded = Dense(encoding_dim, activation='relu')(input_dim)
# Decoding information
decoded = Dense(col_num, activation='sigmoid')(encoded)
# Autoencoder information (encoder + decoder)
autoencoder = Model(input=input_dim, output=decoded)
# Train the autoencoder
autoencoder.compile(optimizer='adadelta', loss='mean_squared_error')
autoencoder.fit(X_train, X_train, nb_epoch=50, batch_size=100, shuffle=True, validation_data=(X_test, X_test))
# Encoder information for feature extraction
encoder = Model(input=input_dim, output=encoded)
encoded_input = Input(shape=(encoding_dim,))
encoded_output = encoder.predict(X_test)
# Show the encoded values
print(encoded_output[:5])
这是此示例的输出:
[[ 0.28065908 6.151131 ]
[ 0.8104178 5.042427 ]
[-0. 6.4602194 ]
[ 3.0278277 2.7351477 ]
[ 0.06134868 5.064625 ]]
基本上,我的想法是使用自动编码器从原始数据集中提取最相关的特征。然而,到目前为止,我只设法让自动编码器压缩数据,但并没有真正了解最重要的功能是什么。
因此,我的问题是:有什么方法可以了解自动编码器正在考虑哪些特征来压缩数据,以及它们究竟是如何用于获得 2 列压缩表示的?