自编码器数据降维实践

放大字体  缩小字体 发布日期:2019-12-22  来源:来自互联网  作者:来自互联网  浏览次数:65
导读

由于目标是得到三个成分,以建立与 PCA 的关系,因此需要分别创建 8(原始序列数量)、6、4 和 3(我们正在寻找的成分数量)个神经元。 input

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

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

自动编码的过程

实际案例

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

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)

# Normalise

scaler = MinMaxScaler

data_scaled = scaler.fit_transform(data)

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

# Fixed dimensions

input_dim = data.shape[1] # 8

encoding_dim = 3

# Number of neurons in each Layer [8, 6, 4, 3, ...] of encoders

input_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)

# Fixed dimensions

input_dim = data.shape[1] # 8

encoding_dim = 3

# Number of neurons in each Layer [8, 6, 4, 3, ...] of encoders

input_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 model

encoder = 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']

# Crear encoder model

encoder = 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/dimensionality-reduction-method-through-autoencoders/

雷锋网雷锋网雷锋网

 
 
免责声明
• 
本文为会员免费发布,仅代表发布者个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,作者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们删除处理。