新浪科技

自编码器数据降维实践

leiphone_com

关注

原标题:自编码器数据降维实践

数据降维是一件困难的事情,而难点通常集中在主成分分析上。此前,我介绍过一种基于自动编码器的降维方法 。然而,在那一段时间里,我专注于如何使用自动编码作为预测器,而现在我想把它们看作是一种降维技术。

这篇文章的目的是解释一下自动编码器是如何工作的。它是从将原始数据压缩成一个忽略噪声的短代码开始的。然后,该算法对该代码进行解压缩,以生成尽可能接近原始输入的图像。

自动编码的过程

实际案例

我们来谈谈金融界的一个热门话题:利率模型。我们已经尝试了主成分分析技术,发现总结起来,利率信息主要有三个因素,这三个因素代表零息曲线的等级、斜率和曲率,它们保留了大约 95% 的信息。

我想知道自动编码器是否能够通过只使用「编码过程」来捕获与 PCA 相同的信息,因为这部分是关于数据压缩的。那么,让我们来演示如何得到一个降维的自动编码器。

进入主题

首先,你应该导入一些库:

from keras.models import Model

from keras.layers import Input, Dense

from keras import regularizers

from sklearn.preprocessing import MinMaxScaler

import pandas as pd

下载完数据后,你就可以开始了。所以,让我们看看要使用什么样的数据。记住,这里的想法是使用自动编码器来减少利率数据的维数。所以,数据集是:1995 年至 2018 年美国的零息曲线。

# Normalise

scaler = MinMaxScaler()

data_scaled = scaler.fit_transform(data)

现在,创建一个自动编码器模型来降低利率的维度只需几秒钟的时间。此时,你应该确定在「编码过程」中需要多少层。由于目标是得到三个成分,以建立与 PCA 的关系,因此需要分别创建 8(原始序列数量)、6、4 和 3(我们正在寻找的成分数量)个神经元。

# Fixed dimensionsinput_dim = data.shape[1]  # 8encoding_dim = 3# Number of neurons in each Layer [8, 6, 4, 3, ...] of encodersinput_layer = Input(shape=(input_dim, ))encoder_layer_1 = Dense(6, activation="tanh", activity_regularizer=regularizers.l1(10e-5))(input_layer)encoder_layer_2 = Dense(4, activation="tanh")(encoder_layer_1)encoder_layer_3 = Dense(encoding_dim, activation="tanh")(encoder_layer_2)

在下一步中,你将创建模型并使用它来预测压缩数据。该数据应包含原始数据的所有相关信息,且忽略噪声。

# Crear encoder modelencoder = Model(inputs=input_layer, outputs=encoder_layer_3)# Use the model to predict the factors which sum up the information of interest rates.encoded_data = pd.DataFrame(encoder.predict(data_scaled))encoded_data.columns = ['factor_1', 'factor_2', 'factor_3']

现在,我留下一些问题:自动编码器捕获的信息比主成分分析多吗?这种创建自动编码器的方法是降低维度的最佳方法吗?

降维和自动编码还能干什么?

这种技术可以用来降低任何机器学习问题的维数。只要使用它,你就可以处理高维问题,降低训练和测试集的维度。这样,你就可以减少问题的维数,更重要的是,你可以将数据集中的噪声去除。

via:https://quantdare.com/dimensionality-reduction-method-through-autoencoders/

雷锋网版权文章,未经授权禁止转载。详情见转载须知。

加载中...