99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀機(jī)器學(xué)習(xí)實(shí)戰(zhàn)之PCA
機(jī)器學(xué)習(xí)實(shí)戰(zhàn)之PCA
2017-03-14
收藏

機(jī)器學(xué)習(xí)實(shí)戰(zhàn)之PCA

1.  向量及其基變換

1.1 向量?jī)?nèi)積

(1)兩個(gè)維數(shù)相同的向量的內(nèi)積定義如下: 內(nèi)積運(yùn)算將兩個(gè)向量映射為一個(gè)實(shí)數(shù).

(2) 內(nèi)積的幾何意義

假設(shè)A\B是兩個(gè)n維向量, n維向量可以等價(jià)表示為n維空間中的一條從原點(diǎn)發(fā)射的有向線段, 為方便理解, 在這里假設(shè)A和B都是二維向量.A=(x1,y1) , B=(x2,y2),在二維平面上A/B可以用兩條發(fā)自原點(diǎn)的有向線段表示,如下圖:

在上圖中,從A點(diǎn)向B所在的直線引一條垂線.垂線與B的交點(diǎn)叫A在B上的投影.A與B的夾角是a,則投影的矢量長(zhǎng)度為

* 矢量長(zhǎng)度可能為負(fù),其絕對(duì)值是線段長(zhǎng)度. 符號(hào)取決于其方向與標(biāo)準(zhǔn)方向相同或相反. 標(biāo)量長(zhǎng)度總是大于等于0,值就是線段的長(zhǎng)度.

內(nèi)積另外一種表示形式:

A和B的內(nèi)積等于A到B的投影長(zhǎng)度乘以B的模.設(shè)向量B的模為1的話,則A和B的內(nèi)積值等于A向B所在直線投影的矢量長(zhǎng)度.

1.2 基

(1) 一個(gè)二維向量對(duì)應(yīng)二維直角坐標(biāo)系中從原點(diǎn)出發(fā)的一個(gè)有向線段, 代數(shù)方面, 常使用線段終點(diǎn)的點(diǎn)坐標(biāo)表示向量, 例如(3,2), 但是一個(gè)(3,2)并不能精確的表示一個(gè)向量,. 分析可得: "3"實(shí)際表示的是向量在x軸上的投影值是3,在y軸的投影值是2, 也就是隱式的引入了一個(gè)定義: 以x軸和y軸正方向長(zhǎng)度為1的向量為標(biāo)準(zhǔn). 更具體地,向量(x,y)實(shí)際可以表示線性組合:. 此處(1,0)/(0,1)為二維空間中的一組基.

結(jié)論: 為了準(zhǔn)確描述向量,首先確定一組基,然后給出在基所在的各個(gè)直線上的投影值即可.

(2) 任何兩個(gè)線性無關(guān)的二維向量都可以成為一組基.一般假設(shè)基的模為1, 例如一組基為,則點(diǎn)(3,2)在新基上的坐標(biāo)為,形象的從下圖中可以觀察:

(3) 基變換的矩陣表示

第二節(jié)中的例子轉(zhuǎn)為矩陣表示為:

矩陣的兩行分別為兩個(gè)基.乘以原向量恰好是新坐標(biāo); 若是有多個(gè)二維向量要轉(zhuǎn)換到新基下的坐標(biāo),即將這些二維向量按列排成一個(gè)矩陣,例如點(diǎn)(1,1)/(2,2)/(3,3)

*結(jié)論: 如果有m個(gè)n維向量,想將其變換為r個(gè)n維空間表示的新空間中,首先將r個(gè)基按行組成矩陣A,然后將向量按列組成矩陣B, 那么兩矩陣的乘積AB就是變換結(jié)果,其中AB的第m列為B中第m列的變換結(jié)果. r決定了變換后數(shù)據(jù)的維數(shù).即可以將一n維數(shù)據(jù)變換到更低維的空間中去,變換后的維數(shù)取決于基的數(shù)量.

兩個(gè)矩陣相乘的意義就是將右邊矩陣中的每一列列向量轉(zhuǎn)換到左邊每一行行向量為基表示的空間中去.

2. 協(xié)方差矩陣

2.1 基礎(chǔ)準(zhǔn)備

前面討論了不同的基可以對(duì)同一組數(shù)據(jù)給出不同的表示,如果基的數(shù)量少于向量自身的維數(shù), 則可以達(dá)到降維的目標(biāo). 如何選擇k個(gè)n維向量(k個(gè)基)使得最大程度上保留原有的信息?

下面舉例說明:

數(shù)據(jù)的5條記錄組成, 將它們表示成矩陣形式:

其中每一列為一條數(shù)據(jù)記錄,一行對(duì)應(yīng)一個(gè)字段,為了處理方便,首先將每個(gè)字段內(nèi)所有值減去字段均值,其結(jié)果就是將每個(gè)字段的均值都變?yōu)?,上述矩陣變換后的結(jié)果為:

其在坐標(biāo)系中對(duì)應(yīng)的位置為:

問題: 現(xiàn)在要用一維來表示這些數(shù)據(jù),又希望盡可能的保留原始的信息,該怎么選擇基? 

答案: 希望投影后的投影值盡可能分散. 

上述圖所將數(shù)據(jù)點(diǎn)向第一象限和第三象限的斜線投影,則上述5個(gè)點(diǎn)在投影后還是可以區(qū)分的.

2.2.  方差

希望投影后得到的數(shù)據(jù)值盡可能分散, 分散程度可以用數(shù)學(xué)上的方差來表述.

一個(gè)字段的方差可以看作是每個(gè)元素與字段均值差的平方和的均值,即

由于上面已將數(shù)據(jù)的每個(gè)字段平均化了,因此方差可以直接用每個(gè)元素的平方和除以元素個(gè)數(shù),即

于是上述問題被形式化表示為:尋找一個(gè)基,使得所有數(shù)據(jù)變換為這個(gè)基上的坐標(biāo)后,方差最大.

2.3 協(xié)方差

對(duì)于將二維變?yōu)橐痪S的問題,找到使得方差最大的方向即可; 但是對(duì)于更高維,需要考慮更多,例如三維降到二維, 與之前相同,首先希望找到一個(gè)方向使得投影后方差最大,這樣就完成了地一個(gè)方向的選擇,繼續(xù)我們還需要選擇第二個(gè)投影方向.

若繼續(xù)選擇方差最大的方向,則這個(gè)方向和第一個(gè)方向應(yīng)該是幾乎重合的, 顯然這樣是不行的,. 從直觀上看,為了讓這兩個(gè)字段盡可能的表示更多的原始信息,希望它們之間是線性不相關(guān)的,因?yàn)橄嚓P(guān)性意味這兩個(gè)字段不是完全獨(dú)立,存在重復(fù)表示的信息.

數(shù)學(xué)上用兩個(gè)字段的協(xié)方差來表示其相關(guān)性,由于已經(jīng)讓每個(gè)字段的均值為0,則其協(xié)方差計(jì)算公式如下:

由式子可以得出, 在字段均值為0的情況下, 兩個(gè)字段的協(xié)方差簡(jiǎn)潔的表示為其內(nèi)積除以元素?cái)?shù).

當(dāng)協(xié)方差為0時(shí), 表示兩個(gè)字段完全獨(dú)立. 為了讓協(xié)方差為0, 選擇第二個(gè)基只能在與第一個(gè)基正交的方向上選擇.因此最終選擇的兩個(gè)方向一定是正交的.

***降維的優(yōu)化目標(biāo): 將一組n維向量降為k維,其目標(biāo)是選擇k個(gè)單位(模為1)正交基,使得原始數(shù)據(jù)變換到這組基上后, 個(gè)字段兩兩間協(xié)方差為0,且字段的方差盡可能大(在正交的約束下,取最大的k個(gè)方差)

2.4 協(xié)方差矩陣

最終目的與字段內(nèi)方差和字段間的協(xié)方差密切相關(guān),現(xiàn)在想做的就是使得兩者統(tǒng)一.

假設(shè)我們有a和b兩個(gè)字段,m個(gè)向量,將其按行組成矩陣X:

然后用X乘以X的轉(zhuǎn)置,并除以向量個(gè)數(shù):

可以發(fā)現(xiàn),這個(gè)矩陣對(duì)角線上的兩個(gè)元素分別是來那個(gè)個(gè)字段的方差,而其它元素是a和b的協(xié)方差.即方差和協(xié)方差被統(tǒng)一到了一個(gè)矩陣中.

***推廣得到一般結(jié)論: 若有m個(gè)n維數(shù)據(jù),將其按列拍成n*m的矩陣X,,則C是一個(gè)對(duì)稱矩陣,其對(duì)角線分別是各個(gè)字段對(duì)應(yīng)的方差,第i行j列與第j行i列的元素一樣,表示i和j兩個(gè)字段的協(xié)方差.

2.5 協(xié)方差矩陣對(duì)角化

為了達(dá)到使得字段內(nèi)方差盡可能大,字段間的協(xié)方差為0的目標(biāo), 等于將協(xié)方差矩陣對(duì)角化:即除對(duì)角線外的其它元素均為0,并且對(duì)角線上的元素按從大到小的順序排列,這樣就達(dá)到了優(yōu)化目的.

令原始數(shù)據(jù)矩陣X對(duì)應(yīng)的協(xié)方差矩陣為C,P是一組基按行組成的矩陣,Y=PX,則Y為X對(duì)P做基變換后的數(shù)據(jù).設(shè)Y的協(xié)方差矩陣為D,推導(dǎo)D與C的關(guān)系:

顯然, 變換后的矩陣Y的協(xié)方差矩陣D應(yīng)該除對(duì)角線外的元素為0.我們尋找的P是能讓原始協(xié)方差矩陣對(duì)角化的P.

即優(yōu)化目標(biāo)變?yōu)?尋找一個(gè)矩陣P, 滿足是一個(gè)對(duì)角矩陣,且對(duì)角元素按從大到小依次排列,那么P的前k行就是尋找的基,用P的前k行組成的矩陣乘以C就使得X從n維降到了k維并滿足上述優(yōu)化條件.

2.6 協(xié)方差對(duì)角化

協(xié)方差矩陣C是一個(gè)對(duì)稱矩陣,實(shí)對(duì)稱矩陣有很好的性質(zhì):

3. 降維方法

3.1 降維目的:

使得數(shù)據(jù)集更易使用

降低很多算法的計(jì)算開銷

去除噪聲

使得結(jié)果易懂

3.2 三種降維方法

(1) 主成分分析法 (principal component analysis, PCA)

PCA中,數(shù)據(jù)從原來的坐標(biāo)系轉(zhuǎn)換到了新的坐標(biāo)系,新坐標(biāo)系的選擇由數(shù)據(jù)本身決定. 第一個(gè)新坐標(biāo)軸選擇的是原始數(shù)據(jù)中方差最大的方向,第二個(gè)新坐標(biāo)軸的選擇是和第一個(gè)新坐標(biāo)軸正交且具有最大方差的方向.過程一直重復(fù),重復(fù)次數(shù)為原始數(shù)據(jù)中特征的數(shù)目.

(2) 因子分析(factor analysis)

在因子分析中,假設(shè)在觀察數(shù)據(jù)的生成中有一些觀察不到的隱變量.假設(shè)觀察數(shù)據(jù)是這些隱變量和某些噪聲的線性組合.

(3) 獨(dú)立成分分析(independent component analysis,ICA)

在ICA中, 假設(shè)數(shù)據(jù)是從N個(gè)數(shù)據(jù)源生成的.即數(shù)據(jù)為多個(gè)數(shù)據(jù)源的混合觀察結(jié)果,這些數(shù)據(jù)源之間在統(tǒng)計(jì)上是相互獨(dú)立的,在PCA中只假設(shè)數(shù)據(jù)是不相關(guān)的.同因子分析一樣,若數(shù)據(jù)源的數(shù)目小于觀察數(shù)據(jù)的數(shù)目,就可以實(shí)現(xiàn)降維.


4. PCA(principal component analysis,主成分分析)

4.1 性能評(píng)價(jià)

優(yōu)點(diǎn): 降低數(shù)據(jù)的復(fù)雜性,識(shí)別到最重要的幾個(gè)特征

缺點(diǎn):不一定需要,且可能損失有用信息

4.2 PCA實(shí)現(xiàn)

將數(shù)據(jù)轉(zhuǎn)換成前N個(gè)主成分的偽代碼如下:

去除平均值(將數(shù)據(jù)的每一維特征減去其平均值)

計(jì)算由數(shù)據(jù)構(gòu)成矩陣的協(xié)方差矩陣

計(jì)算協(xié)方差矩陣的特征值和特征向量

特征值從大到小排序

保留最上面的N個(gè)特征向量

將數(shù)據(jù)轉(zhuǎn)換到上述N個(gè)特征向量構(gòu)建的新空間中

其實(shí)現(xiàn)代碼如下:

<span style="font-size:18px;"><span style="font-size:18px;">def pca(dataMat,topNfeat = 999999):
    #每一行對(duì)應(yīng)一個(gè)數(shù)據(jù)點(diǎn),求每一列的平均值(即每個(gè)特征的均值)
    meanVal = mean(dataMat,axis = 0)
    #數(shù)據(jù)均值化
    meanData = dataMat - meanVal
    
    #求數(shù)據(jù)的協(xié)方差矩陣
    covMat = cov(meanData,rowvar = 0)
    #協(xié)方差矩陣的特征向量和特征
    eigVal,eigVec = linalg.eig(mat(covMat))
    
    eigValIndex = argsort(eigVal)
    eigValIndex = eigValIndex[:-(topNfeat+1):-1]
    redEigVec = eigVec[:,eigValIndex]
    #得到降維后的數(shù)據(jù)
    lowDataMat = meanData * redEigVec

    #原始數(shù)據(jù)被重構(gòu)后返回用于調(diào)試
    reconMat = (lowDataMat * redEigVec.T) + meanVal

    return lowDataMat,reconMat</span></span>

4.3 重構(gòu)

還原原始數(shù)據(jù)的過程就是獲得樣本點(diǎn)映射以后在原空間中的估計(jì)位置的過程.

檢驗(yàn):在命令行輸入以下代碼:將降維后的數(shù)據(jù)和原始數(shù)據(jù)一起畫出來.得到圖片如下:

<span style="font-size:18px;">>>> lowdata,recon = pca.pca(datas,1)
[[ 1.]]
>>> import matplotlib.pyplot as plt
>>> fig = plt.figure()
>>> ax = fig.add_subplot(111)
>>> ax.scatter(datas[:,0].flatten().A[0],datas[:,1].flatten().A[0],marker='^',s=90)
<matplotlib.collections.PathCollection object at 0x7f8b84d70590>
>>> ax.scatter(recon[:,0].flatten().A[0],recon[:,1].flatten().A[0],marker='o',s=50,c='red')
<matplotlib.collections.PathCollection object at 0x7f8b84d40290>
>>> plt.show()
</span>

c
即紅色的線表示原始數(shù)據(jù)沿著這條線投影.即第一新坐標(biāo)軸.

數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測(cè)極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請(qǐng)參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }