本篇內(nèi)容主要講解“python如何使用PCA可視化數(shù)據(jù)”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“python如何使用PCA可視化數(shù)據(jù)”吧!
成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比堆龍德慶網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式堆龍德慶網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋堆龍德慶地區(qū)。費(fèi)用合理售后完善,十年實(shí)體公司更值得信賴。
我們先復(fù)習(xí)一下這個(gè)理論。如果你想確切了解PCA是如何工作的,我們不會(huì)詳細(xì)介紹,網(wǎng)上有大量學(xué)習(xí)資源。
PCA用于減少用于訓(xùn)練模型的特征的數(shù)量。它通過從多個(gè)特征構(gòu)造所謂的主成分(PC)來實(shí)現(xiàn)這一點(diǎn)。
PC的構(gòu)造方式使得PC1方向在最大變化上盡可能地解釋了你的特征。然后PC2在最大變化上盡可能地解釋剩余特征,等等……PC1和PC2通??梢越忉尶傮w特征變化中的很大一部分。
另一種思考方法是,前兩個(gè)PC可以很好地概括大部分特征。這很重要,因?yàn)檎缥覀儗⒖吹降?,它允許我們?cè)诙S平面上可視化數(shù)據(jù)的分類能力。
讓我們來看看一個(gè)實(shí)際的例子。我們將使用PCA來探索乳腺癌數(shù)據(jù)集(http://archive.ics.uci.edu/ml/datasets/breast+cancer+wisconsin+(diagnostic)),我們使用下面的代碼導(dǎo)入該數(shù)據(jù)集。
import numpy as np import pandas as pd from sklearn.datasets import load_breast_cancer cancer = load_breast_cancer() data = pd.DataFrame(cancer['data'],columns=cancer['feature_names']) data['y'] = cancer['target']
目標(biāo)變量是乳腺癌檢測(cè)的結(jié)果,惡性或良性。每次測(cè)試,都要取多個(gè)癌細(xì)胞。然后從每個(gè)癌細(xì)胞中采取10種不同的措施。這些測(cè)量包括細(xì)胞半徑和細(xì)胞對(duì)稱性。最后,為了得到特征值,我們計(jì)算了每個(gè)度量值的平均值、標(biāo)準(zhǔn)誤差和最大值(不太好的),這樣我們總共得到30個(gè)特征值。
在圖中,我們仔細(xì)觀察了其中兩個(gè)特征——細(xì)胞的平均對(duì)稱性(Benign)和最差平滑度(worst smoothness)。
在圖中,我們看到這兩個(gè)特征可以幫助區(qū)分這兩個(gè)類。那就是良性腫瘤往往更為對(duì)稱和光滑。但是,仍然有很多重疊,所以僅僅使用這些特征的模型不會(huì)做得很好。
我們可以創(chuàng)建這樣的圖來了解每個(gè)特征的預(yù)測(cè)能力。但是有30個(gè)特征,這意味著有相當(dāng)多的圖要分析,他們也沒有告訴我們?nèi)绾巫鳛橐粋€(gè)整體來預(yù)測(cè)數(shù)據(jù)集。這我們可以引入PCA。
首先,我們對(duì)整個(gè)數(shù)據(jù)集進(jìn)行主成分分析。我們使用下面的代碼。
from sklearn.preprocessing import StandardScaler from sklearn.decomposition import PCA #標(biāo)準(zhǔn)化 scaler = StandardScaler() scaler.fit(data) scaled = scaler.transform(data) #PCA pca = PCA().fit(scaled) pc = pca.transform(scaled) pc1 = pc[:,0] pc2 = pc[:,1] #畫出主成分 plt.figure(figsize=(10,10)) colour = ['#ff2121' if y == 1 else '#2176ff' for y in data['y']] plt.scatter(pc1,pc2 ,c=colour,edgecolors='#000000') plt.ylabel("Glucose",size=20) plt.xlabel('Age',size=20) plt.yticks(size=12) plt.xticks(size=12) plt.xlabel('PC1')
我們首先標(biāo)準(zhǔn)化特征,使它們的平均值為0,方差為1。這一點(diǎn)很重要,因?yàn)橹鞒煞址治鐾ㄟ^最大化主成分分析所解釋的方差來工作。
一些特征由于其沒有經(jīng)過標(biāo)準(zhǔn)化自然會(huì)有更高的方差。例如,以厘米為單位測(cè)量的距離將比以公里為單位測(cè)量的相同距離具有更高的方差。在不縮放特征的情況下,主成分分析將被那些高方差特征“吸引”。
縮放完成后,我們會(huì)擬合PCA模型,并將我們的特征轉(zhuǎn)換為PC。由于我們有30個(gè)特征,我們最多可以有30個(gè)PC。但是,對(duì)于可視化,我們只對(duì)前兩個(gè)感興趣。然后使用PC1和PC2創(chuàng)建如圖所示的散點(diǎn)圖。
在圖2中,我們可以看到兩個(gè)不同的簇。雖然仍然有一些重疊,但是簇比我們?cè)谥暗膱D中要清晰得多。這告訴我們,作為一個(gè)整體,這個(gè)數(shù)據(jù)集在區(qū)分惡性腫瘤和良性腫瘤方面會(huì)做得很好。
我們還應(yīng)該考慮到,我們只關(guān)注前兩個(gè)PC,因此并不是所有特征的變化都被捕獲。這意味著使用所有特征訓(xùn)練的模型仍然可以正確預(yù)測(cè)異常值(即聚類中不清楚的點(diǎn))。
在這一點(diǎn)上,我們應(yīng)該提到這種方法的一個(gè)警告。我們提到PC1和PC2可以解釋你的特征中很大一部分的差異。然而,這并不總是真的。在這種情況下,這些PC可以被認(rèn)為是對(duì)你的特征的錯(cuò)誤總結(jié)。這意味著,即使你的數(shù)據(jù)能夠很好地分離,你也可能無法獲得如上圖所示的清晰的簇。
我們可以通過查看PCA-scree圖來確定。我們使用下面的代碼為這個(gè)分析創(chuàng)建scree圖,
var = pca.explained_variance_[0:10] #percentage of variance explained labels = ['PC1','PC2','PC3','PC4','PC5','PC6','PC7','PC8','PC9','PC10'] plt.figure(figsize=(15,7)) plt.bar(labels,var,) plt.xlabel('Pricipal Component') plt.ylabel('Proportion of Variance Explained')
它本質(zhì)上是一個(gè)柱狀圖,其中每個(gè)柱狀圖的高度是相關(guān)PC解釋的方差百分比。我們看到,總共只有大約20%的特征方差是由PC1和PC2解釋的。即使只解釋了20%,我們?nèi)匀坏玫絻蓚€(gè)不同的集群。這強(qiáng)調(diào)了數(shù)據(jù)的預(yù)測(cè)能力。
到目前為止,我們已經(jīng)使用主成分分析來了解整個(gè)特征集對(duì)數(shù)據(jù)的分類效果。我們也可以使用這個(gè)過程來比較不同的特征組。例如,假設(shè)我們想知道細(xì)胞的對(duì)稱性和光滑性是否比細(xì)胞的周長(zhǎng)和凹陷性更好。
group_1 = ['mean symmetry', 'symmetry error','worst symmetry', 'mean smoothness','smoothness error','worst smoothness'] group_2 = ['mean perimeter','perimeter error','worst perimeter', 'mean concavity','concavity error','worst concavity']
我們首先創(chuàng)建兩組特征。第一組包含所有與對(duì)稱性和光滑性有關(guān)的特征,第二組包含所有與周長(zhǎng)和凹陷性有關(guān)的特征。然后,除了使用這兩組特征外,我們以與之前相同的方式進(jìn)行主成分分析。這個(gè)過程的結(jié)果如下圖所示。
我們可以看到,對(duì)于第一組,有一些分離,但仍然有很多重疊。相比之下,第2組有兩個(gè)不同的簇。因此,從這些圖中,我們可以預(yù)期第2組的特征(即細(xì)胞周長(zhǎng)和凹陷)將是更好的預(yù)測(cè)腫瘤是惡性還是良性的指標(biāo)。
最終,這將意味著使用組2中的特征的模型比使用組1中的特征的模型具有更高的精度?,F(xiàn)在,讓我們來驗(yàn)證這個(gè)假設(shè)。
我們使用下面的代碼來訓(xùn)練一個(gè)使用兩組特征的logistic回歸模型。在每種情況下,我們使用70%的數(shù)據(jù)來訓(xùn)練模型,剩下的30%用來測(cè)試模型。
from sklearn.model_selection import train_test_split import sklearn.metrics as metric import statsmodels.api as sm for i,g in enumerate(group): x = data[g] x = sm.add_constant(x) y = data['y'] x_train, x_test, y_train, y_test = train_test_split(x,y,test_size=0.3, random_state = 101) model = sm.Logit(y_train,x_train).fit() #fit logistic regression model predictions = np.around(model.predict(x_test)) accuracy = metric.accuracy_score(y_test,predictions) print("Accuracy of Group {}: {}".format(i+1,accuracy))
第一組測(cè)試集的準(zhǔn)確率為74%,相比之下,第二組的準(zhǔn)確率為97%。因此,組2的特征明顯是更好的預(yù)測(cè)因子,這正是我們從主成分分析結(jié)果中所看到的。
最后,我們將了解如何在開始建模之前使用PCA來加深對(duì)數(shù)據(jù)的理解。了解哪些特征是可預(yù)測(cè)的,將在特征選擇方面給你帶來優(yōu)勢(shì)。此外,查看特征的總體分類能力將使你了解預(yù)期的分類精度。
如前所述,這種方法并不能完全證明,因此應(yīng)與其他數(shù)據(jù)勘探圖和匯總統(tǒng)計(jì)一起使用。一般來說,在開始建模之前,最好從盡可能多的不同角度查看數(shù)據(jù)。
到此,相信大家對(duì)“python如何使用PCA可視化數(shù)據(jù)”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!