PCA是一種常用於處理多重共線性的特徵提取方法。PCA的最大優點是,在應用它之後,每個“新”變數將彼此獨立。
第2步將資料分為因變數(Y)和特徵或自變數(X)。
import pandas as pd
features = ['WindSpeed', 'RotorRPM', 'ReactivePower', 'GeneratorWinding1Temperature', 'GeneratorWinding2Temperature', 'GeneratorRPM', 'GearboxBearingTemperature', 'GearboxOilTemperature']
將資料分離為Y和Xy = data['ActivePower']X = data[features]第3步取自變數X的矩陣,對於每一列,從每個特徵中減去該列的平均值。(這樣可以確保每列的平均值為零。)也可以透過除以每列的標準差來標準化X。此步驟的目的是標準化特徵,使其平均值等於零,標準偏差等於1。
減去均值X = X - X.mean()
標準化Z = X / X.std()第4步這是一個健全性檢查步驟。讓我們確保平均值和標準差分別為0和1。
檢驗均值= 0和標準差= 1print('MEAN:')print(Z.mean())print('---'*15)print('STD:')print(Z.std())第5步取矩陣Z,轉置它,然後將轉置後的矩陣乘以Z,這就是Z的協方差矩陣。
import numpy as np
Z = np.dot(Z.T, Z)第6步計算的特徵值陣列和一個特徵矩陣,特徵矩陣的列是與特徵值對應的歸一化特徵向量。
在這一步中,重要的是要確保特徵值及其特徵向量按降序排序(從大到小)。對特徵值進行排序,然後對特徵向量進行相應排序。
eigenvalues, eigenvectors = np.linalg.eig(Z)第7步把特徵向量的矩陣賦給P,把對角矩陣賦給D,特徵值在對角線上,其它地方的值都為零。D對角線上的特徵值將與P中相應的列相關聯。
D = np.diag(eigenvalues)P = eigenvectors第8步計算Z* = ZP。這個新的矩陣,Z*,是X的中心或標準化版本,但現在每個觀測值都是原始變數的組合,其中權重由特徵向量確定。
關於這個新矩陣Z的一個重要的事情是,因為P中的特徵向量彼此獨立,所以Z中的列也是相互獨立的!
左邊的曲線圖顯示了從每個主成分中得出的變化量,以及為模型新增或考慮另一個主成分而產生的累積變化量。
選擇多少個主成分,歸根結底是一個經驗法則:所選的主成分應該能夠描述至少80-85%的方差。在本例中,僅第一個主成分就解釋了大約82%的方差。加上第二個主成分,這個數字幾乎達到90%。
#1. 計算每個特徵解釋的方差的比例sum_eigenvalues = np.sum(eigenvalues)
prop_var = [i/sum_eigenvalues for i in eigenvalues]
#2. 計算累積方差cum_var = [np.sum(prop_var[:i+1]) for i in range(len(prop_var))]
匯入pltimport matplotlib.pyplot as plt
x_labels = ['PC{}'.format(i+1) for i in range(len(prop_var))]
感謝閱讀!