PCA為常見的降維方法,然而對於不同資料透過PCA降至多少維度則是一個需要考量的問題。
利用PCA會根據資料的分佈狀況求得個成份的比例(以非原本的維度空間)
以下針對資料進行PCA轉換後,查看主成份的比例,以IRIS資料集為例,程式如下:
from sklearn.decomposition import PCA import matplotlib.pyplot as plt from sklearn import datasets iris = datasets.load_iris() X = iris.data pca = PCA(n_components=None) pca.fit(X) def calc(ratios): idx = [] accumulating_ratio = [] for i in range(len(ratios)+1): temp = 0 for j in range(0,i): temp += ratios[j] idx.append(i) accumulating_ratio.append(temp) return idx,accumulating_ratio px,py = calc(pca.explained_variance_ratio_) plt.plot(px,py) plt.show()
分析結果如下圖,從途中可以發現IRIS資料透過PCA轉換後,僅需要主成份1和主成份2即可以涵蓋超過95%成份.
因此可以透過PCA轉換後僅保留主成份1和主成份2,將資料從原本4維降低至3維。
若以知要保留多少成份成份的比例,可以透過以下程式直接求得:
def getIdx(x,y,T=0.95): for i in range(len(x)): if y[i] > 0.95: return i return -1 print (getIdx(px,py))
T 參數為希望保留的成份比例,預設為95%。
文章標籤
全站熱搜