數(shù)據(jù)降維是一件困難的事情,而難點(diǎn)通常集中在主成分分析上。此前,我介紹過(guò) 一種基于自動(dòng)編碼器的降維方法 。然而,在那一段時(shí)間里,我專(zhuān)注于如何使用自動(dòng)編碼作為預(yù)測(cè)器,而現(xiàn)在我想把它們看作是一種降維技術(shù)。
這篇文章的目的是解釋一下自動(dòng)編碼器是如何工作的。它是從將原始數(shù)據(jù)壓縮成一個(gè)忽略噪聲的短代碼開(kāi)始的。然后,該算法對(duì)該代碼進(jìn)行解壓縮,以生成盡可能接近原始輸入的圖像。
自動(dòng)編碼的過(guò)程
實(shí)際案例
我們來(lái)談?wù)劷鹑诮绲囊粋€(gè)熱門(mén)話(huà)題:利率模型。我們已經(jīng)嘗試了主成分分析技術(shù),發(fā)現(xiàn)總結(jié)起來(lái),利率信息主要有三個(gè)因素,這三個(gè)因素代表零息曲線(xiàn)的等級(jí)、斜率和曲率,它們保留了大約 95% 的信息。
我想知道自動(dòng)編碼器是否能夠通過(guò)只使用「編碼過(guò)程」來(lái)捕獲與 PCA 相同的信息,因?yàn)檫@部分是關(guān)于數(shù)據(jù)壓縮的。那么,讓我們來(lái)演示如何得到一個(gè)降維的自動(dòng)編碼器。
進(jìn)入主題
首先,你應(yīng)該導(dǎo)入一些庫(kù):
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
下載完數(shù)據(jù)后,你就可以開(kāi)始了。所以,讓我們看看要使用什么樣的數(shù)據(jù)。記住,這里的想法是使用自動(dòng)編碼器來(lái)減少利率數(shù)據(jù)的維數(shù)。所以,數(shù)據(jù)集是:1995 年至 2018 年美國(guó)的零息曲線(xiàn)。
# Normalise
scaler = MinMaxScaler
data_scaled = scaler.fit_transform(data)
# Normalise
scaler = MinMaxScaler
data_scaled = scaler.fit_transform(data)
現(xiàn)在,創(chuàng)建一個(gè)自動(dòng)編碼器模型來(lái)降低利率的維度只需幾秒鐘的時(shí)間。此時(shí),你應(yīng)該確定在「編碼過(guò)程」中需要多少層。由于目標(biāo)是得到三個(gè)成分,以建立與 PCA 的關(guān)系,因此需要分別創(chuàng)建 8(原始序列數(shù)量)、6、4 和 3(我們正在尋找的成分?jǐn)?shù)量)個(gè)神經(jīng)元。
# 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)
在下一步中,你將創(chuàng)建模型并使用它來(lái)預(yù)測(cè)壓縮數(shù)據(jù)。該數(shù)據(jù)應(yīng)包含原始數(shù)據(jù)的所有相關(guān)信息,且忽略噪聲。
# 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']
現(xiàn)在,我留下一些問(wèn)題:自動(dòng)編碼器捕獲的信息比主成分分析多嗎?這種創(chuàng)建自動(dòng)編碼器的方法是降低維度的最佳方法嗎?
降維和自動(dòng)編碼還能干什么?
這種技術(shù)可以用來(lái)降低任何機(jī)器學(xué)習(xí)問(wèn)題的維數(shù)。只要使用它,你就可以處理高維問(wèn)題,降低訓(xùn)練和測(cè)試集的維度。這樣,你就可以減少問(wèn)題的維數(shù),更重要的是,你可以將數(shù)據(jù)集中的噪聲去除。
via: https://quantdare/dimensionality-reduction-method-through-autoencoders/
雷鋒網(wǎng)雷鋒網(wǎng)雷鋒網(wǎng)


