為什么需要降維呢?
因?yàn)閿?shù)據(jù)個數(shù) N 和每個數(shù)據(jù)的維度 p 不滿足 N >> p,造成了模型結(jié)果的“過擬合”。有兩種方法解決上述問題:
增加N;減小p。
這里我們講解的 PCA 屬于方法2。
""" -*- coding: utf-8 -*- @ Time : 2021/8/15 22:19 @ Author : Raymond @ Email : wanght2316@163.com @ Editor : Pycharm """ from sklearn.datasets import load_digits from sklearn.decomposition import PCA import pandas as pd import matplotlib.pyplot as plt digits = load_digits() print(digits.keys()) print("數(shù)據(jù)的形狀為: {}".format(digits['data'].shape)) # 構(gòu)建模型 - 降到10 d pca = PCA(n_components=10) pca.fit(digits.data) projected=pca.fit_transform(digits.data) print('降維后主成分的方差值為:',pca.explained_variance_) print('降維后主成分的方差值占總方差的比例為:',pca.explained_variance_ratio_) print('降維后最大方差的成分為:',pca.components_) print('降維后主成分的個數(shù)為:',pca.n_components_) print('original shape:',digits.data.shape) print('transformed shape:',projected.shape) s = pca.explained_variance_ c_s = pd.DataFrame({'b': s,'b_sum': s.cumsum() / s.sum()}) c_s['b_sum'].plot(style= '--ko',figsize= (10, 4)) plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默認(rèn)字體 plt.rcParams['axes.unicode_minus'] = False # 解決保存圖像是負(fù)號'-'顯示為方塊的問題 plt.axhline(0.85, color= 'r',linestyle= '--') plt.text(6, c_s['b_sum'].iloc[6]-0.08, '第7個成分累計貢獻(xiàn)率超過85%', color='b') plt.title('PCA 各成分累計占比') plt.grid() plt.savefig('./PCA.jpg') plt.show()
結(jié)果展示:
本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
標(biāo)簽:盤錦 南平 林芝 寧夏 漯河 大同 普洱 海南
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《(手寫)PCA原理及其Python實(shí)現(xiàn)圖文詳解》,本文關(guān)鍵詞 手寫,PCA,原理,及其,Python,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。