介紹
主成分分析(PCA)的核心思想是減少由大量相互關(guān)聯(lián)的變量組成的數(shù)據(jù)集的維度,同時(shí)盡可能地保留數(shù)據(jù)集中存在的變化。這是通過(guò)轉(zhuǎn)換為一組新的變量(主要組件 (PC)來(lái)實(shí)現(xiàn)的,這些變量是不相關(guān)的,并且是有序的,因此前幾個(gè)變量保留了所有原始變量中存在的大部分變化。
PCA背后的數(shù)學(xué)
PCA可以被認(rèn)為是一種無(wú)監(jiān)督的學(xué)習(xí)。從原始數(shù)據(jù)集中獲取主成分的整個(gè)過(guò)程可以簡(jiǎn)化為六個(gè)部分:
- 獲取由d + 1維組成的整個(gè)數(shù)據(jù)集,并忽略標(biāo)簽,以便我們的新數(shù)據(jù)集變?yōu)?span style="-webkit-tap-highlight-color: transparent; box-sizing: border-box; font-weight: 700;">d維。
- 計(jì)算整個(gè)數(shù)據(jù)集的每個(gè)維度的均值。
- 計(jì)算整個(gè)數(shù)據(jù)集的協(xié)方差矩陣。
- 計(jì)算特征向量和相應(yīng)的特征值。
- 通過(guò)減小特征值對(duì)特征向量進(jìn)行排序,并選擇具有最大特征值的k個(gè)本征向量,以形成d×k維矩陣W.
- 使用此d×k特征向量矩陣將樣本轉(zhuǎn)換到新的子空間。
所以,讓我們逐一展開每一個(gè)背后的數(shù)學(xué)。
- 獲取由d + 1維組成的整個(gè)數(shù)據(jù)集,并忽略標(biāo)簽,以便我們的新數(shù)據(jù)集變?yōu)?span style="-webkit-tap-highlight-color: transparent; box-sizing: border-box;">d維。
假設(shè)我們有一個(gè)d + 1維的數(shù)據(jù)集。在現(xiàn)代機(jī)器學(xué)習(xí)范式中,d可以被認(rèn)為是X_train,1可以被認(rèn)為是X_test(標(biāo)簽)。因此,X_train + X_test組成了我們的完整數(shù)據(jù)集。
因此,在我們刪除標(biāo)簽之后,我們留下了d維數(shù)據(jù)集,這將是我們將用于查找主要組件的數(shù)據(jù)集。另外,假設(shè)我們?cè)诤雎詷?biāo)簽后留下了三維數(shù)據(jù)集,即d = 3。
我們假設(shè)樣本來(lái)自兩個(gè)不同的類,其中我們數(shù)據(jù)集的一半樣本標(biāo)記為類1,另一半標(biāo)記為類2。
讓我們的數(shù)據(jù)矩陣X是三個(gè)學(xué)生的得分:
2.計(jì)算整個(gè)數(shù)據(jù)集的每個(gè)維度的平均值。
上表中的數(shù)據(jù)可以用矩陣A表示,矩陣中的每列顯示測(cè)試的分?jǐn)?shù),每行顯示學(xué)生的分?jǐn)?shù)。
矩陣A.
那么,矩陣A的平均值就是
矩陣A的平均值
3.計(jì)算整個(gè)數(shù)據(jù)集的協(xié)方差矩陣(有時(shí)也稱為方差 - 協(xié)方差矩陣)
因此,我們可以使用以下公式計(jì)算兩個(gè)變量X和Y的協(xié)方差
使用上面的公式,我們可以找到A的協(xié)方差矩陣。此外,結(jié)果將是d×d維的方陣。
讓我們像這樣重寫我們的原始矩陣
矩陣A.
它的協(xié)方差矩陣是
A的協(xié)方差矩陣
這里可以注意到的幾點(diǎn)是:
- 沿對(duì)角線顯示為藍(lán)色,我們看到每個(gè)測(cè)試的分?jǐn)?shù)方差。藝術(shù)測(cè)試的差異最大(720); 和英語(yǔ)測(cè)試,最小的(360)。所以我們可以說(shuō)藝術(shù)考試成績(jī)比英語(yǔ)考試成績(jī)更具可變性。
- 協(xié)方差在矩陣A的非對(duì)角線元素中以黑色顯示
a)數(shù)學(xué)和英語(yǔ)之間的協(xié)方差是正的(360),數(shù)學(xué)和藝術(shù)之間的協(xié)方差是正的(180)。這意味著分?jǐn)?shù)趨向于以一種積極的方式共變。隨著數(shù)學(xué)成績(jī)的提高,藝術(shù)和英語(yǔ)成績(jī)也有上升的趨勢(shì);反之亦然。
b)然而,英語(yǔ)和藝術(shù)之間的協(xié)方差為零。這意味著英語(yǔ)和藝術(shù)分?jǐn)?shù)之間往往沒(méi)有可預(yù)測(cè)的關(guān)系。
4.計(jì)算特征向量和相應(yīng)的特征值
直觀地,特征向量是當(dāng)向其應(yīng)用線性變換時(shí)其方向保持不變的向量。
現(xiàn)在,我們可以根據(jù)上面的協(xié)方差矩陣輕松計(jì)算特征值和特征向量。
A是矩陣, ν矢量和標(biāo)量λ滿足Aν=λν,然后λ被稱為特征值與特征向量的ν有關(guān)。
A的特征值是特征方程的根
首先計(jì)算det(A-λI),這是一個(gè)單位矩陣:
首先簡(jiǎn)化矩陣,我們可以稍后計(jì)算行列式,
現(xiàn)在我們有了簡(jiǎn)化矩陣,我們可以找到相同的行列式:


我們現(xiàn)在有了等式,我們需要求解λ,以便得到矩陣的特征值。所以,將上面的等式等于零:

在為λ的值求解該等式之后,我們得到以下值
λ≈44.81966...λ≈629.11039....λ≈910.06995
特征值
現(xiàn)在,我們可以計(jì)算出與上述特征值對(duì)應(yīng)的特征向量。
因此,在求解特征向量之后,我們將得到相應(yīng)特征值的以下解

5.通過(guò)減小特征值對(duì)特征向量進(jìn)行排序,并選擇具有最大特征值的k個(gè)本征向量,以形成d×k維矩陣W.
我們的目標(biāo)是減少特征空間的維數(shù),即通過(guò)PCA將特征空間投影到較小的子空間,其中特征向量將形成這個(gè)新特征子空間的軸。但是,特征向量?jī)H定義新軸的方向,因?yàn)樗鼈兙哂邢嗤膯挝婚L(zhǎng)度1。
因此,為了確定我們想要為我們的低維子空間丟棄哪些特征向量,我們必須看一下特征向量的相應(yīng)特征值。粗略地說(shuō),具有最低特征值的特征向量具有關(guān)于數(shù)據(jù)分布的最少信息,并且那些是我們想要丟棄的那些。
常見的方法是將特征向量從最高到最低的對(duì)應(yīng)特征值進(jìn)行排序,并選擇前k個(gè)特征向量。
因此,在按遞減順序?qū)μ卣髦颠M(jìn)行排序后,我們得到了

對(duì)于我們的簡(jiǎn)單的例子,其中我們正在減少的3維特征空間的2維特征空間中,我們結(jié)合兩個(gè)特征向量具有最高特征值來(lái)構(gòu)建我們的d×K維特征向量矩陣W.
因此,特征向量對(duì)應(yīng)于兩個(gè)最大特征值是:

6.將樣本轉(zhuǎn)換到新子空間
在最后一步中,我們使用我們剛剛計(jì)算的2×3維矩陣W,通過(guò)方程y = W'×x將我們的樣本變換到新的子空間,其中W'是矩陣W的轉(zhuǎn)置。
最后,我們計(jì)算了兩個(gè)主要組件并將數(shù)據(jù)點(diǎn)投影到新的子空間。
線性回歸-簡(jiǎn)要說(shuō)明
線性回歸廣泛用于通過(guò)將線性方程擬合到數(shù)據(jù)來(lái)觀察兩個(gè)或更多個(gè)變量之間的關(guān)系。
線性回歸用于對(duì)一個(gè)或多個(gè)對(duì)輸出變量有影響的自變量進(jìn)行預(yù)測(cè)分析。輸出必須是連續(xù)的并且取決于輸入變量。

有兩種類型的線性回歸:
如果只有一個(gè)自變量,那么線性回歸稱為單變量線性回歸
但是,如果有多個(gè)獨(dú)立變量對(duì)因變量產(chǎn)生影響,則回歸稱為多變量線性回歸。
示例:
假設(shè)房屋的價(jià)格取決于房屋的大小,房屋大小是自變量,價(jià)格是因變量,取決于房屋的大?。?/p>
然而,可能有多個(gè)變量會(huì)影響房子的價(jià)格。樓層、位置、周圍環(huán)境等..
線性回歸/假設(shè)的等式具有以下形式:
假設(shè)(單變量):

對(duì)于多個(gè)變量:

(其中x0始終為1)
函數(shù)h(θ)是基于輸入變量的預(yù)測(cè)。θ0和θ1是學(xué)習(xí)參數(shù)(回歸系數(shù)),從等式中,可以注意到它與斜率截距方程相同。
因此,數(shù)據(jù)必須顯示一些趨勢(shì)以適合分析的最佳線。如果數(shù)據(jù)沒(méi)有顯示任何趨勢(shì),那么使用其他模型是明智的。
預(yù)測(cè)基于回歸系數(shù)的值。為了通過(guò)數(shù)據(jù)擬合最佳線,我們必須定義一種衡量模型效率的方法。這是成本概念發(fā)揮作用的時(shí)候。
成本是定義模型執(zhí)行方式的術(shù)語(yǔ)。成本越高,預(yù)測(cè)就越差。目標(biāo)是盡可能降低成本。
費(fèi)用公式:

回歸系數(shù)的值可以從正規(guī)方程計(jì)算:

如果數(shù)據(jù)集較小且具有較少的特征或變量,則正規(guī)方程是有用的,但如果變量的大小變得高于1000,那么最好使用其他方法,如梯度下降。
梯度下降 :
正規(guī)方程的復(fù)雜性使得梯度下降對(duì)于具有大特征變量的數(shù)據(jù)非常有用。
梯度下降是通過(guò)獲取函數(shù)的導(dǎo)數(shù)然后沿著方向采取迭代步驟并同時(shí)更新參數(shù)來(lái)找到函數(shù)的最小值的方法。

成本函數(shù)的導(dǎo)數(shù)將為我們提供函數(shù)最小值的方向。

對(duì)于θ0:

對(duì)于θ1:

請(qǐng)注意,漸變只會(huì)向我們提供函數(shù)最小值的方向。我們將不得不通過(guò)在斜率/梯度方向上采取迭代步驟來(lái)更新權(quán)重。
更新參數(shù)的公式為:

這里α是學(xué)習(xí)率。學(xué)習(xí)將步長(zhǎng)決定為函數(shù)的最小值。如果學(xué)習(xí)速率太小,函數(shù)將永遠(yuǎn)不會(huì)收斂或收斂將花費(fèi)大量時(shí)間。而且,如果學(xué)習(xí)率太高,優(yōu)化可能會(huì)不穩(wěn)定(跳到最佳狀態(tài),甚至可能變得更差而不是更好)。最好選擇像0.01,0.1的學(xué)習(xí)率...
為了找到最好的參數(shù),我們需要通過(guò)多次迭代來(lái)運(yùn)行梯度下降算法。
可視化梯度下降的最佳方法是繪制每個(gè)步驟的成本函數(shù)。

經(jīng)過(guò)一定次數(shù)的迭代后,圖形處于最低位置。這解釋了一旦函數(shù)處于最小值,無(wú)論梯度下降算法采用多少次迭代,它都將保持在最小值。
線性回歸和梯度下降的介紹
線性回歸用于找到特定數(shù)據(jù)集的最佳擬合線。如果目標(biāo)是預(yù)測(cè),預(yù)測(cè)或減少誤差,則可以使用線性回歸將預(yù)測(cè)模型擬合到響應(yīng)值的觀察數(shù)據(jù)集(例如測(cè)試結(jié)果)和解釋性(例如研究測(cè)試的時(shí)間)變量。在從訓(xùn)練的數(shù)據(jù)集中獲得擬合模型之后,我們可以對(duì)任何新的解釋變量進(jìn)行預(yù)測(cè)(例如,根據(jù)研究學(xué)生的學(xué)習(xí)時(shí)間來(lái)預(yù)測(cè)學(xué)生的考試成績(jī))。
但是我們的程序如何在隨機(jī)數(shù)據(jù)集中找到最合適的線條,如果我們有兩組數(shù)據(jù)怎么辦?一個(gè)是中學(xué)生考試成績(jī)和學(xué)習(xí)時(shí)間的數(shù)據(jù),另一個(gè)是高中學(xué)生的數(shù)據(jù)集。人工智能的目的是給程序一個(gè)問(wèn)題并讓他來(lái)為我們解決。但是我們還需要一些東西來(lái)讓我們的程序找到數(shù)據(jù)本身的最佳擬合線。
解決方案是使用梯度下降算法。梯度下降算法是用于找到函數(shù)最小值的一階迭代優(yōu)化算法。通俗地說(shuō),算法將允許我們遍歷梯度,這最終將幫助我們找到最佳擬合線,無(wú)論使用哪個(gè)數(shù)據(jù)集。
線性回歸示例
假設(shè)我們有以下數(shù)據(jù)集:

數(shù)據(jù)集
如果我們想通過(guò)這個(gè)數(shù)據(jù)繪制一條直線,我們將使用斜率截距公式y = mx + b ,其中m代表斜率值,b代表截距。為了找到我們數(shù)據(jù)的最佳線,我們需要找到最佳的m和b值。
誤差函數(shù)
為了找到上述數(shù)據(jù)的最佳擬合線,我們需要定義一個(gè)誤差函數(shù)。這種類型的誤差函數(shù)更具體地稱為殘差平方和或預(yù)測(cè)誤差平方和。誤差函數(shù)衡量數(shù)據(jù)集與估計(jì)模型(我們預(yù)測(cè)的最佳擬合線)之間的差異。

從線到典型數(shù)據(jù)點(diǎn)的垂直距離等于線與該y值之間的誤差,也稱為殘差。

殘余平方和誤差函數(shù)
y是被預(yù)測(cè)變量的第i個(gè)值,x是解釋變量的第i個(gè)值,mx + b是y的預(yù)測(cè)值。這個(gè)函數(shù)是平方的,以確保在求和之前值是正數(shù)。然后平方估計(jì)值的總和除以數(shù)據(jù)集中N個(gè)值的總數(shù)。下面的代碼是python中的錯(cuò)誤函數(shù)。

python中的錯(cuò)誤函數(shù)
參數(shù)包括y軸截距b,斜率m和(x,y)點(diǎn)的2D數(shù)組points
為了得到誤差,函數(shù)將斜率m和截距b作為參數(shù)。然后通過(guò)它的2D數(shù)組points,并存儲(chǔ)在誤差平方的totalError,具有以下的預(yù)測(cè)值m和b ,x和y在for循環(huán)后每一次迭代。然后在退出for循環(huán)之后,除以totalErrorpoints數(shù)組中的值的數(shù)量float(len(points)),并將其作為浮點(diǎn)數(shù)返回?,F(xiàn)在我們需要找出如何讓我們的程序找到b和m的最佳值,這就是梯度下降的作用。
利用梯度下降法可以最大限度地減少誤差函數(shù)
下面的圖像是我們數(shù)據(jù)集的漸變。為了計(jì)算梯度,我們需要區(qū)分我們的誤差函數(shù)。梯度圖記錄了3個(gè)值,誤差函數(shù)中計(jì)算的誤差,y軸截距b 和斜率m 。梯度上的每個(gè)點(diǎn)代表y軸截距b和斜率m,用于匯總數(shù)據(jù)集中的所有值x和y值。我們可以看到占據(jù)誤差最小的區(qū)域是梯度斜率最平坦的地方(底部的藍(lán)色區(qū)域)。

漸變的示例
為了找到最適合我們數(shù)據(jù)集的行,我們的程序?qū)⑿枰钚』e(cuò)誤函數(shù)計(jì)算的誤差。這可以通過(guò)對(duì)誤差函數(shù)對(duì)m和b求偏導(dǎo)數(shù)來(lái)實(shí)現(xiàn)。通過(guò)這樣做,我們將獲得梯度特定點(diǎn)處的斜率。這意味著如果斜率接近于零,則它們必須接近具有提供最適合我們數(shù)據(jù)集的線的m和b值。要使用梯度下降找到函數(shù)的局部最小值,它將采用與當(dāng)前點(diǎn)處函數(shù)的梯度的負(fù)值成比例的步驟。所以它總是從梯度的最陡部分移動(dòng)到最平的部分。

關(guān)于m和b的誤差函數(shù)的偏導(dǎo)數(shù)
梯度下降的代碼發(fā)布在下圖中。在這里你可以看到step_gradient函數(shù)接受4個(gè)參數(shù)b的當(dāng)前值b_current,m的當(dāng)前值m_current,我們數(shù)據(jù)集的2D數(shù)組points,以及l(fā)earning_rate。learning_rate決定了我們的學(xué)習(xí)速度。如果learning_rate太高,在梯度中將采取過(guò)大的步驟,但可能會(huì)錯(cuò)過(guò)最小值。另一方面,如果learning_rate太低,則需要很長(zhǎng)時(shí)間才能達(dá)到最小值(如果有的話)。
step_gradient函數(shù)遍歷整個(gè)數(shù)據(jù)集,每次迭代使用x和y的值,分別求出b和m的梯度。然后,梯度的值與learning_rate相乘,分別從b_current和m_current中減去,賦值給new_b和new_m,然后返回gradient_descent_runner函數(shù)。

gradient_descent_runner允許程序找到函數(shù)本身的最小值。該函數(shù)接受以下參數(shù)點(diǎn):starting_b = 0、starting_m = 0、learning_rate和num_iteration = 1000。然后for循環(huán)將為num_interations設(shè)置的任何值重復(fù)調(diào)用step_gradient。

程序不斷更新的新值b和m直到他們發(fā)現(xiàn)具有最低梯度,從而產(chǎn)生對(duì)數(shù)據(jù)進(jìn)行最佳擬合線的值。在我們的程序運(yùn)行完所有迭代之后,它將把b和m的值返回給我們的main函數(shù)。

每次迭代的梯度下降誤差
全盤分析
在我們的main函數(shù)中,我們聲明了以下變量; points,learning_rate,initial_b,initial_m,num_iterations,和數(shù)組的最終值b和m。

main 函數(shù)
調(diào)用gradient_descent_runner啟動(dòng)梯度下降,因此我們可以實(shí)現(xiàn)數(shù)據(jù)集的線性回歸。在控制臺(tái)中打印值后。我們已經(jīng)實(shí)現(xiàn)了梯度下降的線性回歸。