数据降维是一件困难的事情,而难点通常集中在主成分分析上。此前,我介绍过 一种基于自动编码器的降维方法 。然而,在那一段时间里,我专注于如何使用自动编码作为预测器,而现在我想把它们看作是一种降维技术。
这篇文章的目的是解释一下自动编码器是如何工作的。它是从将原始数据压缩成一个忽略噪声的短代码开始的。然后,该算法对该代码进行解压缩,以生成尽可能接近原始输入的图像。
自动编码的过程
实际案例
我们来谈谈金融界的一个热门话题:利率模型。我们已经尝试了主成分分析技术,发现总结起来,利率信息主要有三个因素,这三个因素代表零息曲线的等级、斜率和曲率,它们保留了大约 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/
雷锋网雷锋网雷锋网