用sklearn 實(shí)踐PCA降維

用sklearn 實(shí)踐PCA

原文地址:

https://towardsdatascience.com/pca-using-python-scikit-learn-e653f8989e60

對于許多機(jī)器學(xué)習(xí)應(yīng)用程序,它有助于可視化你的數(shù)據(jù).可視化2或3維數(shù)據(jù)并不具有挑戰(zhàn)性.但是,即使本教程的這一部分中使用的Iris數(shù)據(jù)集也是4維的.你可以使用PCA將4維數(shù)據(jù)縮減為2維或3維,以便你可以繪制并希望更好地理解數(shù)據(jù).

加載Iris數(shù)據(jù)集

Iris數(shù)據(jù)集是scikit-learn附帶的數(shù)據(jù)集之一,不需要從某個(gè)外部網(wǎng)站下載任何文件.下面的代碼將加載iris數(shù)據(jù)集.

#將pandas導(dǎo)入為pd
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
#load dataset into Pandas DataFrame 
df = pd.read_csv(url,names = ['sepal length','sepal width','petal length','petal width','target'])
1.png

Original Pandas df (features + target)

標(biāo)準(zhǔn)化數(shù)據(jù)

PCA受比例影響,因此你需要在應(yīng)用PCA之前縮放數(shù)據(jù)中的功能.使用StandardScaler可幫助你將數(shù)據(jù)集的特征標(biāo)準(zhǔn)化為單位比例(均值= 0和方差= 1),這是許多機(jī)器學(xué)習(xí)算法的最佳性能要求.如果你希望看到不會縮放數(shù)據(jù)的負(fù)面影響,scikit-learn會有一節(jié)介紹不標(biāo)準(zhǔn)化數(shù)據(jù)效果.

#來自sklearn.preprocessing導(dǎo)入StandardScaler
features = ['sepal length', 'sepal width', 'petal length', 'petal width']
#分離出特征
x = df.loc[:,features].values
#分離目標(biāo)
y = df.loc[:,['target']].values
#標(biāo)準(zhǔn)化特征
x = StandardScaler().fit_transform(x)
2.png

標(biāo)準(zhǔn)化之前和之后的數(shù)組x(由pandas數(shù)據(jù)幀可視化)

PCA投影到2D

原始數(shù)據(jù)有4列(萼片長度,萼片寬度,花瓣長度和花瓣寬度).在本節(jié)中,代碼將4維原始數(shù)據(jù)投影到2維.我應(yīng)該注意,在減少維數(shù)之后,通常沒有為每個(gè)主成分分配特定含義.新組件只是變體的兩個(gè)主要維度.

#來自sklearn.decomposition導(dǎo)入PCA
pca = PCA(n_components = 2)
principalComponents = pca.fit_transform(x)
principalDf = pd.DataFrame(data = principalComponents 
             ,columns = ['principal component 1','principal component 2'])
3.png

PCA并保持前兩大主要組成部分

finalDf = pd.concat([principalDf,df [['target']]],axis = 1)

沿axis = 1連接DataFrame. finalDf是最終的DataFrame.

4.png

沿著列連接數(shù)據(jù)幀以在繪圖之前生成finalDf

可視化2D投影

本節(jié)僅繪制二維數(shù)據(jù).請注意下圖中的類似乎彼此分開.

import matplotlib.pyplot as plt
fig = plt.figure(figsize = (8,8))
ax = fig.add_subplot(1,1,1) 
ax.set_xlabel('Principal Component 1', fontsize = 15)
ax.set_ylabel('Principal Component 2', fontsize = 15)
ax.set_title('2 component PCA', fontsize = 20)
targets = ['Iris-setosa', 'Iris-versicolor', 'Iris-virginica']
colors = ['r', 'g', 'b']
for target, color in zip(targets,colors):
    indicesToKeep = finalDf['target'] == target
    ax.scatter(finalDf.loc[indicesToKeep, 'principal component 1']
               , finalDf.loc[indicesToKeep, 'principal component 2']
               , c = color
               , s = 50)
ax.legend(targets)
ax.grid()
plt.show()
5.png

解釋差異

解釋的方差告訴你可以將多少信息(方差)歸因于每個(gè)主要組件.這很重要,因?yàn)楫?dāng)你可以將4維空間轉(zhuǎn)換為2維空間時(shí),在執(zhí)行此操作時(shí)會丟失一些方差(信息).通過使用屬性explained_variance_ratio_,可以看到的是,第一主成分含有方差的72.77%和第二主成分含有方差的23.03%.這兩個(gè)組件一起包含95.80%的信息.

pca.explained_variance_ratio_

array([ 0.72770452, 0.23030523])

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市荆责,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌寒匙,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赡磅,死亡現(xiàn)場離奇詭異疑务,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)框往,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進(jìn)店門鳄抒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人椰弊,你說我怎么就攤上這事许溅。” “怎么了秉版?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵贤重,是天一觀的道長。 經(jīng)常有香客問我清焕,道長并蝗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任秸妥,我火速辦了婚禮滚停,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘粥惧。我一直安慰自己铐刘,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布影晓。 她就那樣靜靜地躺著镰吵,像睡著了一般。 火紅的嫁衣襯著肌膚如雪挂签。 梳的紋絲不亂的頭發(fā)上疤祭,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天,我揣著相機(jī)與錄音饵婆,去河邊找鬼勺馆。 笑死,一個(gè)胖子當(dāng)著我的面吹牛侨核,可吹牛的內(nèi)容都是我干的草穆。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼搓译,長吁一口氣:“原來是場噩夢啊……” “哼悲柱!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起些己,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤豌鸡,失蹤者是張志新(化名)和其女友劉穎嘿般,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涯冠,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡炉奴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蛇更。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瞻赶。...
    茶點(diǎn)故事閱讀 40,133評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖派任,靈堂內(nèi)的尸體忽然破棺而出砸逊,到底是詐尸還是另有隱情,我是刑警寧澤吨瞎,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布痹兜,位于F島的核電站,受9級特大地震影響颤诀,放射性物質(zhì)發(fā)生泄漏字旭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一崖叫、第九天 我趴在偏房一處隱蔽的房頂上張望遗淳。 院中可真熱鬧,春花似錦心傀、人聲如沸屈暗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽养叛。三九已至,卻和暖如春宰翅,著一層夾襖步出監(jiān)牢的瞬間弃甥,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工汁讼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留淆攻,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓嘿架,卻偏偏與公主長得像瓶珊,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子耸彪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評論 2 355