您好,登錄后才能下訂單哦!
PCA簡(jiǎn)介
主成分分析(Principal Component Analysis,PCA)是最常用的一種降維方法,通常用于高維數(shù)據(jù)集的探索與可視化,還可以用作數(shù)據(jù)壓縮和預(yù)處理等。矩陣的主成分就是其協(xié)方差矩陣對(duì)應(yīng)的特征向量,按照對(duì)應(yīng)的特征值大小進(jìn)行排序,最大的特征值就是第一主成分,其次是第二主成分,以此類推。
基本步驟:
具體實(shí)現(xiàn)
我們通過(guò)Python的sklearn庫(kù)來(lái)實(shí)現(xiàn)鳶尾花數(shù)據(jù)進(jìn)行降維,數(shù)據(jù)本身是4維的降維后變成2維,可以在平面中畫出樣本點(diǎn)的分布。樣本數(shù)據(jù)結(jié)構(gòu)如下圖:
其中樣本總數(shù)為150,鳶尾花的類別有三種,分別標(biāo)記為0,1,2
代碼
import matplotlib.pyplot as plt #加載matplotlib用于數(shù)據(jù)的可視化 from sklearn.decomposition import PCA #加載PCA算法包 from sklearn.datasets import load_iris data=load_iris() y=data.target x=data.data pca=PCA(n_components=2) #加載PCA算法,設(shè)置降維后主成分?jǐn)?shù)目為2 reduced_x=pca.fit_transform(x)#對(duì)樣本進(jìn)行降維 red_x,red_y=[],[] blue_x,blue_y=[],[] green_x,green_y=[],[] for i in range(len(reduced_x)): if y[i] ==0: red_x.append(reduced_x[i][0]) red_y.append(reduced_x[i][1]) elif y[i]==1: blue_x.append(reduced_x[i][0]) blue_y.append(reduced_x[i][1]) else: green_x.append(reduced_x[i][0]) green_y.append(reduced_x[i][1]) #可視化 plt.scatter(red_x,red_y,c='r',marker='x') plt.scatter(blue_x,blue_y,c='b',marker='D') plt.scatter(green_x,green_y,c='g',marker='.') plt.show()
結(jié)果圖
知識(shí)拓展:python sklearn PCA 實(shí)例代碼-主成分分析
python sklearn decomposition PCA 主成分分析
主成分分析(PCA)
1、主成分分析(Principal Component Analysis,PCA)是最常用的一種降維方法,
通常用于高維數(shù)據(jù)集的探索與可視化,還可以用作數(shù)據(jù)壓縮和預(yù)處理
2、PCA可以把具有相關(guān)性的高維變量合成為線性無(wú)關(guān)的低維變量,稱為主成分。
主成分能夠盡可能保留原始數(shù)據(jù)的信息
3、概念
方差:用來(lái)度量一組數(shù)據(jù)的分散程度
協(xié)方差:用來(lái)度量?jī)蓚€(gè)變量之間的線性相關(guān)性程度,若兩個(gè)變量的協(xié)議差為0,二者線性無(wú)關(guān)
協(xié)方差矩陣:矩陣的特征向量是描述數(shù)據(jù)集結(jié)構(gòu)的非零向量,?? ⃗=?? ⃗
特征向量和特征值:? ⃗ 特征向量,?是特征值
4、提?。?/strong>
矩陣的主成分是其協(xié)方差矩陣對(duì)應(yīng)的特征向量,按照對(duì)應(yīng)的特征值大小進(jìn)行排序,最大的特征值就是第一主成分,其次是第二主成分
5、原理:
1、對(duì)所有樣本進(jìn)行中心化:xi-(x1+x2…xm)/m
2、計(jì)算樣本的協(xié)方差矩陣X(X.T)
3、對(duì)協(xié)方差矩陣X(X.T)做特征值分解
4、取最大的d個(gè)特征值所對(duì)應(yīng)的特征向量w1,w2…wd
輸出投影矩陣W=(w1,w2,…,wd)
6、參數(shù)說(shuō)明
sklearn.decomposition.PCA(n_components=None,copy=True,whithen=False,svd_solver=‘a(chǎn)uto',tol=0.0,
iterated_power=‘a(chǎn)uto',random_state=None)
n_components:指定主成分的個(gè)數(shù),即降維后數(shù)據(jù)的維度
svd_slover:設(shè)置特征值分解的方法:‘full',‘a(chǎn)rpack',‘randomized'
PCA實(shí)現(xiàn)高維度數(shù)據(jù)可視化 實(shí)例
目標(biāo):
已知鳶尾花數(shù)據(jù)是4維的,共三類樣本,使用PCA實(shí)現(xiàn)對(duì)鳶尾花數(shù)據(jù)進(jìn)行降維,實(shí)現(xiàn)在二維平面上的可視化
實(shí)例程序編寫
import matplotlib.pyplot as plt import sklearn.decomposition as dp from sklearn.datasets.base import load_iris x,y=load_iris(return_X_y=True) #加載數(shù)據(jù),x表示數(shù)據(jù)集中的屬性數(shù)據(jù),y表示數(shù)據(jù)標(biāo)簽 pca=dp.PCA(n_components=2) #加載pca算法,設(shè)置降維后主成分?jǐn)?shù)目為2 reduced_x=pca.fit_transform(x) #對(duì)原始數(shù)據(jù)進(jìn)行降維,保存在reduced_x中 red_x,red_y=[],[] blue_x,blue_y=[],[] green_x,green_y=[],[] for i in range(len(reduced_x)): #按鳶尾花的類別將降維后的數(shù)據(jù)點(diǎn)保存在不同的表表中 if y[i]==0: red_x.append(reduced_x[i][0]) red_y.append(reduced_x[i][1]) elif y[i]==1: blue_x.append(reduced_x[i][0]) blue_y.append(reduced_x[i][1]) else: green_x.append(reduced_x[i][0]) green_y.append(reduced_x[i][1]) plt.scatter(red_x,red_y,c='r',marker='x') plt.scatter(blue_x,blue_y,c='b',marker='D') plt.scatter(green_x,green_y,c='g',marker='.') plt.show()
以上這篇Python sklearn庫(kù)實(shí)現(xiàn)PCA教程(以鳶尾花分類為例)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持億速云。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。