之前總結(jié)了聚類算法,然后我們這一課來(lái)簡(jiǎn)單學(xué)習(xí)一下降維算法,常用的降維算法有PCA算法。
主成分分析
Principal Component Analysis,簡(jiǎn)稱PCA,通常用于高位數(shù)據(jù)集的降維和可視化,還可以用數(shù)據(jù)壓縮和數(shù)據(jù)降維等,可用于數(shù)據(jù)壓縮和預(yù)處理。
相關(guān)術(shù)語(yǔ):
1.方差:是各個(gè)樣本和樣本均值的差的平方和的均值,用來(lái)度量一組
數(shù)據(jù)的分散程度。
2.協(xié)方差:用于度量?jī)蓚€(gè)變量之間的線性相關(guān)性程度,若兩個(gè)變量的
協(xié)方差為0,則可認(rèn)為二者線性無(wú)關(guān)。
3.協(xié)方差矩陣:由變量的協(xié)方差值構(gòu)成的矩陣
4.特征向量和特征值:矩陣的特征向量是描述數(shù)據(jù)集結(jié)構(gòu)的非零向量,并滿足如下公式:Av = λv,A是方陣, v是特征向量,λ是特征值。
原理:
矩陣的主成分就是其協(xié)方差矩陣對(duì)應(yīng)的特征向量,按照對(duì)應(yīng)的特征值大小進(jìn)行排序,最大的特征值就是第一主成分,其次是第二主成分,以此類推。
算法過(guò)程:

image.png
目標(biāo):
已知鳶尾花數(shù)據(jù)是4維的,共三類樣本。使用PCA實(shí)現(xiàn)對(duì)鳶尾花數(shù)據(jù)進(jìn)行降維,實(shí)現(xiàn)在二維平面上的可視化。
具體算法:
#-*- coding:utf-8 -*-
import matplotlib.pyplot as plt#加載matplotlib用于數(shù)據(jù)的可視化
from sklearn.decomposition import PCA#加載PCA算法包
from sklearn.datasets import load_iris#加載鳶尾花數(shù)據(jù)集導(dǎo)入函數(shù)
data=load_iris()#以字典形式加載鳶尾花數(shù)據(jù)集
x=data.data#使用X表示數(shù)據(jù)集中的屬性數(shù)據(jù)
y=data.target#使用y表示數(shù)據(jù)集中的標(biāo)簽
pca=PCA(n_components=2)#加載PCA算法,設(shè)置降維后主成分?jǐn)?shù)目為2
reduce_x=pca.fit_transform(x)#對(duì)原始數(shù)據(jù)進(jìn)行降維,保存在reduced_X中
red_x,red_y=[],[] #第一類數(shù)據(jù)點(diǎn)
blue_x,blue_y=[],[] #第二類數(shù)據(jù)點(diǎn)
green_x,green_y=[],[] #第三類數(shù)據(jù)點(diǎn)
# print(reduce_x[:][:])
for i in range(len(reduce_x)):
if y[i]==0:
red_x.append(reduce_x[i][0]) #將分類后的鳶尾花數(shù)據(jù)加入到不同的列表中
red_y.append(reduce_x[i][1])
elif y[i]==1:
blue_x.append(reduce_x[i][0])
blue_y.append(reduce_x[i][1])
else:
green_x.append(reduce_x[i][0])
green_y.append(reduce_x[i][1])
plt.scatter(red_x,red_y,c='r',marker='X') #畫(huà)出散點(diǎn)圖
plt.scatter(blue_x,blue_y,c='b',marker='D')
plt.scatter(green_x,green_y,c='g',marker='.')
plt.show()
輸出結(jié)果:

Figure_1.png