嘉定區(qū)做網(wǎng)站seo類目鏈接優(yōu)化
目錄
一、前言
二、正文
Ⅰ.主成分分析
Ⅱ.核主成分分析
三、結(jié)語(yǔ)
一、前言
?
前面介紹的特征選擇方法獲得的特征,是從原始數(shù)據(jù)中抽取出來(lái)的,并沒(méi)有對(duì)數(shù)據(jù)進(jìn)行變換。而特征提取和降維,則是對(duì)原始數(shù)據(jù)的特征進(jìn)行相應(yīng)的數(shù)據(jù)變換,并且通常會(huì)選擇比原始特征數(shù)量少的特征,同時(shí)達(dá)到數(shù)據(jù)降維的目的。常用的數(shù)據(jù)特征提取和降維的方法有主成分分析,核成分分析,流行學(xué)習(xí),t-SNE,多維尺度分析等方法。
二、正文
?
from sklearn.decomposition import PCA,KernelPCA
from sklearn.manifold import Isomap,MDS,TSNE
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import load_wine
wine_x,wine_y=load_wine(return_X_y=True)
wine_x=StandardScaler().fit_transform(wine_x)
在介紹特征提取和降維的方法之前,我們先導(dǎo)包讀取相應(yīng)的數(shù)據(jù)。?通過(guò)標(biāo)準(zhǔn)化進(jìn)行數(shù)據(jù)特征變換的處理。
Ⅰ.主成分分析
?
pca=PCA(n_components=13,random_state=123)
pca.fit(wine_x)
exvar=pca.explained_variance_
plt.figure(figsize=(10,6))
plt.plot(exvar,'r-o')
plt.hlines(y=1,xmin=0,xmax=12)
plt.xlabel('number')
plt.ylabel('PCA')
plt.show()
?
主成分分析法(Principal Component Analysis,PCA)是采用一種數(shù)學(xué)降維的方法,在損失很少信息的前提下,找出幾個(gè)綜合變量為主成分,來(lái)代替原來(lái)眾多的變量,使這些主成分盡可能地代表原始數(shù)據(jù)的信息,其中每個(gè)主成分都是原始變量的線性組合,而且各個(gè)主成分之間不相關(guān)(即線性無(wú)關(guān))。通過(guò)主成分分析,我們可以從事物錯(cuò)綜復(fù)雜的關(guān)系中找到一些主要成分(通常選擇累積 貢獻(xiàn)率≥85%的前m個(gè)主成分),從而能夠有效利用大量統(tǒng)計(jì)信息進(jìn)行定性分析,揭示變量之間的內(nèi)在關(guān)系,得要一些事物特征及其發(fā)展規(guī)律的深層次信息和啟發(fā),推動(dòng)研究進(jìn)一步深入。通常使用主成分個(gè)數(shù)遠(yuǎn)小于原始特征個(gè)數(shù),使用起到特征提取和降維的目的。?
?
?
?從結(jié)果分析,使用數(shù)據(jù)的前三個(gè)主成分即可對(duì)其進(jìn)行良好的數(shù)據(jù)建模。
?
pca_wine_x=pca.transform(wine_x)[:,0:3]
print(pca_wine_x.shape)
#輸出結(jié)果
(178,3)
?
如上我們可以知道,前三個(gè)主成分可對(duì)其數(shù)據(jù)建模,于是我們pca進(jìn)行數(shù)據(jù)變換之后對(duì)其進(jìn)行切片,前三列的數(shù)據(jù)。?
?
colors=['red','blue','green']
shape=['o','s','*']
fig=plt.figure(figsize=(10,6))
ax1=fig.add_subplot(111,projection='3d')
for ii,y in enumerate(wine_y):ax1.scatter(pca_wine_x[ii,0],pca_wine_x[ii,1],pca_wine_x[ii,2],s=40,c=colors[y],marker=shape[y])ax1.set_xlabel('pca1',rotation=20)
ax1.set_ylabel('pca2',rotation=20)
ax1.set_zlabel('pca3',rotation=20)
ax1.azim=225
ax1.set_title('pca')
plt.show()
?
先將三種成分分別的顏色和標(biāo)記封裝在列表當(dāng)中,然后設(shè)置窗口,?111是設(shè)置位置即第一行第一列的第一個(gè)格子,則會(huì)也就意味著這里只有一個(gè)圖,projection(映射)參數(shù)設(shè)置為3d,然后將前三個(gè)主成分通過(guò)循環(huán)在三維空間畫出其數(shù)據(jù)分布。
?
?
?
這樣我們就能區(qū)分出三個(gè)主成分的數(shù)據(jù)分布情況,即不同類別的分布情況。?
?
Ⅱ.核主成分分析
?
PCA是線性的數(shù)據(jù)降維技術(shù),而核主成分分析則是針對(duì)非線性的數(shù)據(jù)表示,對(duì)其進(jìn)行特征提取并數(shù)據(jù)降維。
?
kpca=KernelPCA(n_components=13,kernel='rbf',gamma=0.2,random_state=123)
kpca.fit(wine_x)
eigenvalues=kpca.eigenvalues_
plt.figure(figsize=(10,6))
plt.plot(eigenvalues,'r-o')
plt.hlines(y=4,xmin=0,xmax=12)
plt.xlabel('number')
plt.ylabel('KernelPCA')
plt.show()
?
方法與主成分分析大差不大,但是這里注意一個(gè)KernelPCA類中的一個(gè)屬性:
eigenvalues_:Eigenvalues of the centered kernel matrix in decreasing order. If?
n_components
?and?remove_zero_eig
?are not set, then all values are stored.
翻譯過(guò)來(lái)就是:中心核向量的特征值按照降序排序,如果未設(shè)置n_components和remove_zero_eig,則存儲(chǔ)所有值。
原本這個(gè)屬性叫做lambdas_,但是被更改為eigenvalues_(特征值)。
?
?
同樣針對(duì)前三個(gè)核主成分,可以在三維空間將數(shù)據(jù)分布進(jìn)行可視化。
kpca_wine_x=kpca.transform(wine_x)[:,0:3]
print(kpca_wine_x.shape)
colors=['red','blue','green']
shape=['o','s','*']
fig=plt.figure(figsize=(10,6))
ax1=fig.add_subplot(111,projection='3d')
for ii,y in enumerate(wine_y):ax1.scatter(kpca_wine_x[ii,0],kpca_wine_x[ii,1],kpca_wine_x[ii,2],s=40,c=colors[y],marker=shape[y])ax1.set_xlabel('kpca1',rotation=20)
ax1.set_ylabel('kpca2',rotation=20)
ax1.set_zlabel('kpca3',rotation=20)
ax1.azim=225
ax1.set_title('kpca')
plt.show()
?
?做法跟主成分大差不差,利用散點(diǎn)在空間中的分布來(lái)發(fā)現(xiàn)其中的數(shù)據(jù)分布情況。
?
?
可以看出核主成分分析與主成分分析之間的主成分核成分之間的數(shù)據(jù)分布情況大有不同。
?
三、結(jié)語(yǔ)
?
?上篇我們先從線性與非線性入手,希望能對(duì)你提供幫助,點(diǎn)贊收藏以備不時(shí)之需,關(guān)注我,有關(guān)新的數(shù)據(jù)分析的文章第一時(shí)間告知于你