python_numpy_用直線擬合理解主元素分析(PCA)

主成分分析(PCA)

矩陣A中有100個(gè)樣本數(shù)據(jù)圃伶,每個(gè)數(shù)據(jù)是二維平面上的一個(gè)點(diǎn)泻拦。如下圖所示毙芜。求出矩陣A的特征值λ1,λ2争拐,可以看出A矩陣其實(shí)是特征值方向上的拉伸成都腋粥,λ1>λ2,說(shuō)明λ1方向上的延展要多一下架曹,如果要壓縮A矩陣隘冲,則最能體現(xiàn)A特征的特征是讓?duì)?。V1绑雄,V2分別是特征λ1展辞,λ2對(duì)應(yīng)的特征向量。

例子

因?yàn)?strong>λ1>λ2万牺,所以選擇v1進(jìn)行降維纵竖,
A'--------->V1'A'---------->1x100(二維向量變成了一維樣本)
2X100 ——>1X2X2X100
V1'A'則為被壓縮的樣本,如果要恢復(fù)成原來(lái)的矩陣:
V1V1'A'---------->A
(因?yàn)镾=[V1,V2]是標(biāo)準(zhǔn)正交的杏愤,之間點(diǎn)乘為0,和自己點(diǎn)乘為1)

在對(duì)A做PCA之前還有一個(gè)步奏已脓,需要將A矩陣化為均值為0的矩陣珊楼。
這樣做的原因是為了讓?duì)?,λ2的方向經(jīng)過(guò)原點(diǎn)度液,因?yàn)椴唤?jīng)過(guò)原點(diǎn)的直線是不能用一個(gè)二維向量表示的厕宗,如下圖所示:

Paste_Image.png

要表示直線AB上的點(diǎn)A,B的方向必須用
OA=0A'+A'A
OB=OB'+B'B
其中,A'A=B'B=[0,b]'堕担,OA'與OB'為過(guò)原點(diǎn)的方向向量已慢。
所以不過(guò)原點(diǎn)的直線上的點(diǎn),必須用一個(gè)固定截距向量和一個(gè)過(guò)原點(diǎn)的方向向量表示霹购,所以需要將A矩陣化為均值為0的矩陣佑惠。
編寫一個(gè)對(duì)100X2的數(shù)據(jù)進(jìn)行PCA的程序,主要部分如下:

def PCA(dataMat,topNfeat=5):
#topNfeat=5 默認(rèn)選擇前五個(gè)最大的特征值
#減去均值 
    meanVals = np.mean(dataMat,axis = 0)
    dataMean = dataMat - meanVals
#求協(xié)方差方陣 
    conMat = dataMean.T.dot(dataMean)
#求特征值和特征向量
    eigVals,eigVects = np.linalg.eig(conMat)  
#對(duì)特征值進(jìn)行排序  
    eigValInd = np.argsort(eigVals)
    #得到的eigValInd是從小到大的排列,對(duì)應(yīng)的原數(shù)據(jù)中該元素的索引
    #x = np.array([3, 1, 2])
    #np.argsort(x)
    #array([1, 2, 0])
    #從小到大依次是1,2,3,1對(duì)應(yīng)的索引是1,2對(duì)應(yīng)的索引是2,3對(duì)應(yīng)的索引是0
    eigValInd = eigValInd[:-(topNfeat+1):-1]
    #逆序膜楷,從最大到最小的前topNfeat個(gè)
#除去不需要的特征向量
    redeigVects=eigVects[:,eigValInd]  
#求新的數(shù)據(jù)矩陣
    lowdataMat = dataMean.dot(redeigVects)
#求從低維還原回來(lái)的數(shù)據(jù)
    condata = (lowdataMat.dot(redeigVects.T)) + meanVals
#輸出降完維德數(shù)據(jù)加均值
        #因?yàn)榻稻S后的數(shù)據(jù)是一維的了旭咽,所以只能加上dataMat整體的平均數(shù)進(jìn)行恢復(fù)了
    reducedata=lowdataMat+np.mean(dataMat)
    return reducedata,condata

結(jié)果:

結(jié)果

藍(lán)色點(diǎn)是原始數(shù)據(jù)
黑色點(diǎn)是被降維后的數(shù)據(jù)
紅色點(diǎn)是由被降維的數(shù)據(jù)恢復(fù)的數(shù)據(jù)
綠色直線是理想的直線

將結(jié)果放大,如下圖


結(jié)果放大

我們可以看到每一個(gè)紅色點(diǎn)都可以找到一個(gè)藍(lán)色的原始數(shù)據(jù)與它對(duì)應(yīng)赌厅。

常用的主元素分析法穷绵,除了PCA還有SVD,SVD一般用在矩陣的協(xié)方差矩陣不可逆時(shí)特愿。
完整代碼下載:
http://pan.baidu.com/s/1boU0rG7
提取碼:va4v

補(bǔ)充:
python自帶PCA函數(shù)介紹:

from sklearn.decomposition import PCA#從sklearn中導(dǎo)入PCA
pca = PCA(n_components=0.8,whiten=True)#設(shè)置PCA參數(shù)#n_components:
#設(shè)為大于零的整數(shù)仲墨,會(huì)自動(dòng)的選取n個(gè)主成分,
#設(shè)為分?jǐn)?shù)時(shí),選擇特征值占總特征值大于n的揍障,作為主成分
#whiten:
#True表示做白化處理目养,白化處理主要是為了使處理后的數(shù)據(jù)方差都一致
pca.fit_transform(data)
pca.transform(data)
#對(duì)數(shù)據(jù)data進(jìn)行主成分分析

sklearn PCA 官方文檔
http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市亚兄,隨后出現(xiàn)的幾起案子混稽,更是在濱河造成了極大的恐慌,老刑警劉巖审胚,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件匈勋,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡膳叨,警方通過(guò)查閱死者的電腦和手機(jī)洽洁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)菲嘴,“玉大人饿自,你說(shuō)我怎么就攤上這事×淦海” “怎么了昭雌?”我有些...
    開(kāi)封第一講書人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)健田。 經(jīng)常有香客問(wèn)我烛卧,道長(zhǎng),這世上最難降的妖魔是什么妓局? 我笑而不...
    開(kāi)封第一講書人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任总放,我火速辦了婚禮,結(jié)果婚禮上好爬,老公的妹妹穿的比我還像新娘局雄。我一直安慰自己,他們只是感情好存炮,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布炬搭。 她就那樣靜靜地躺著蜈漓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪尚蝌。 梳的紋絲不亂的頭發(fā)上迎变,一...
    開(kāi)封第一講書人閱讀 51,692評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音飘言,去河邊找鬼衣形。 笑死,一個(gè)胖子當(dāng)著我的面吹牛姿鸿,可吹牛的內(nèi)容都是我干的谆吴。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼苛预,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼句狼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起热某,我...
    開(kāi)封第一講書人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤腻菇,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后昔馋,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體筹吐,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年秘遏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了丘薛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡邦危,死狀恐怖洋侨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情倦蚪,我是刑警寧澤希坚,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站陵且,受9級(jí)特大地震影響裁僧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜滩报,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望播急。 院中可真熱鬧脓钾,春花似錦、人聲如沸桩警。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至握截,卻和暖如春飞崖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背谨胞。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工固歪, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人胯努。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓牢裳,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親叶沛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蒲讯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容