自編碼器數據降維實踐

  • 2019 年 12 月 24 日
  • 筆記

數據降維是一件困難的事情,而難點通常集中在主成分分析上。此前,我介紹過一種基於自動編碼器的降維方法(https://quantdare.com/outliers-detection-with-autoencoder-neural-network/)。然而,在那一段時間裡,我專註於如何使用自動編碼作為預測器,而現在我想把它們看作是一種降維技術。

這篇文章的目的是解釋一下自動編碼器是如何工作的。它是從將原始數據壓縮成一個忽略雜訊的短程式碼開始的。然後,該演算法對該程式碼進行解壓縮,以生成儘可能接近原始輸入的影像。

自動編碼的過程

實際案例


我們來談談金融界的一個熱門話題:利率模型。我們已經嘗試了主成分分析技術,發現總結起來,利率資訊主要有三個因素,這三個因素代表零息曲線的等級、斜率和曲率,它們保留了大約 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 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']

現在,我留下一些問題:自動編碼器捕獲的資訊比主成分分析多嗎?這種創建自動編碼器的方法是降低維度的最佳方法嗎?

降維和自動編碼還能幹什麼?


這種技術可以用來降低任何機器學習問題的維數。只要使用它,你就可以處理高維問題,降低訓練和測試集的維度。這樣,你就可以減少問題的維數,更重要的是,你可以將數據集中的雜訊去除。

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