[機(jī)器學(xué)習(xí)] Regression

Regression

Input & output (Data set)

??首先來(lái)看一下我們的數(shù)據(jù)集的形式。假設(shè)我們有一個(gè)數(shù)據(jù)集包含 m 個(gè)數(shù)據(jù) \{(\boldsymbol{x}^{(1)},y^{(1)}),(\boldsymbol{x}^{(2)},y^{(2)}),...,(\boldsymbol{x}^{(m)},y^{(m)})\} ,上標(biāo)表示第 i 個(gè)數(shù)據(jù)的輸入或輸出。其中第 i 個(gè)數(shù)據(jù)的輸入 \boldsymbol x^{(i)} 是含 n 個(gè)特征的,記成一個(gè)向量,則他的第 j 個(gè)特征為 x^{(i)}_j ,整個(gè)向量記為:
\boldsymbol x^{(i)} = \begin{bmatrix} x^{(i)}_1 \\ x^{(i)}_2 \\ \vdots \\ x^{(i)}_n \end{bmatrix}_{n \times 1}
??若用 \pmb x 矩陣來(lái)表示整個(gè)數(shù)據(jù)集的輸入值,則矩陣的第 i 行為 \boldsymbol x^{(i)} 的轉(zhuǎn)置,整個(gè)矩陣如下表示:
\boldsymbol x = \begin{bmatrix} ---(\boldsymbol x^{(1)})^T--- \\ ---(\boldsymbol x^{(2)})^T--- \\ \vdots \\ ---(\boldsymbol x^{(m)})^T--- \end{bmatrix}_{m\times n}
??若每個(gè)數(shù)據(jù)集的輸出 y^{(i)} 只是一個(gè)數(shù)值的話,則所有的輸出可以構(gòu)成一個(gè)向量 \boldsymbol y ,記為:
\boldsymbol y = \begin{bmatrix} y^{(1)} \\ y^{(2)} \\ \vdots \\ y^{(m)} \end{bmatrix}_{m \times 1}

Linear regression model

??在說(shuō)線性回歸之前,先來(lái)談一談更為宏觀的概念——回歸,其實(shí)在高中數(shù)學(xué)中我們就已經(jīng)接觸過(guò)了回歸,我們學(xué)過(guò)用最小二乘法來(lái)構(gòu)建回歸方程的表達(dá)式,那個(gè)時(shí)候我只是單純的記住了那個(gè)計(jì)算公式,而并沒(méi)有思考其中的原理。我們想做回歸其實(shí)是想利用一部分已知的數(shù)據(jù)來(lái)對(duì)未知的數(shù)據(jù)做預(yù)測(cè)。其實(shí)這里面有一個(gè)隱含的前提條件,就是我們想用回歸來(lái)解決的這個(gè)問(wèn)題是有規(guī)律的,也就是說(shuō)是有一個(gè)函數(shù)能夠大體表現(xiàn)出這個(gè)問(wèn)題的輸入與輸出的關(guān)系的。比如說(shuō)一個(gè)房?jī)r(jià)預(yù)測(cè),輸入是房子的大小、地理位置、建造商等等參數(shù),輸出就是這個(gè)房子的房?jī)r(jià)。這個(gè)問(wèn)題的輸入和輸出是有一個(gè)映射關(guān)系的,回歸的目的就是根據(jù)一些已知的數(shù)據(jù)來(lái)盡可能的找出這個(gè)映射關(guān)系。所以這里還隱含了第二個(gè)條件才能盡可能好的找到這個(gè)整體的模型 (我們拿到的數(shù)據(jù)只是整體的一個(gè)子集) ,那就是我們擁有的數(shù)據(jù)與整體的分布應(yīng)該是類(lèi)似的,因?yàn)檎w的分布是不可知的,樣本的分布是可知的。

??接下來(lái)來(lái)談一談什么是線性回歸。線性回歸其實(shí)就是首先假設(shè)了模型的輸入輸出關(guān)系是線性的,然后在讓模型在訓(xùn)練集的輸出與標(biāo)注的輸出之間的誤差最小時(shí)得到的模型。下面來(lái)具體解釋?zhuān)?/p>

Linear model (hypothesis)

??首先是線性模型,假設(shè)一個(gè)樣本有 n 個(gè)特征,那么輸入輸出的線性關(guān)系的函數(shù)則為:
y_{pred} = \theta_0 + \theta_1 x_1 + \cdots + \theta_n x_n
??其中, \theta_i 是特征 x_i 的系數(shù),所有的系數(shù)構(gòu)成了一個(gè)系數(shù)向量 \boldsymbol \theta ,上面的式子寫(xiě)成向量的形式則為:
y^{(i)}_{pred} = \boldsymbol \theta^T \boldsymbol x^{(i)}
??因?yàn)?\pmb \theta 的取值有無(wú)窮多種,所以我們的線性模型其實(shí)也是有無(wú)窮多種的,所以問(wèn)題的關(guān)鍵是,如何找到我們所想要的 \boldsymbol \theta 呢?那么回想我們的目的,其實(shí)我們想要的是我們的預(yù)測(cè)值 y^{(i)}_{pred} 和我們的實(shí)際值 y^{(i)} 盡可能的類(lèi)似,所以我們可以定義一個(gè)表示預(yù)測(cè)值與實(shí)際值相偏離的程度的函數(shù),然后找到這個(gè)函數(shù)取值最小時(shí)所對(duì)應(yīng)的 \boldsymbol \theta 應(yīng)該就是我們想要的了,這樣也就得到了我們想要的線性模型,這個(gè)偏離程度的函數(shù)也被稱(chēng)為損失函數(shù) (loss function) J(\boldsymbol \theta) (也有記為 L 的),我們的模型也被記為假設(shè)函數(shù) (Hypothesis) h_{\boldsymbol \theta} (\boldsymbol x) ,對(duì) \boldsymbol x^{(i)} 的預(yù)測(cè)結(jié)果 y^{(i)}_{pred} 就是 h_{\boldsymbol \theta} (\boldsymbol x^{(i)}) 的結(jié)果。

Loss function

??我們稱(chēng)預(yù)測(cè)結(jié)果與實(shí)際結(jié)果的偏差為損失,那么如何度量這個(gè)損失呢?最簡(jiǎn)單的我們可以想到用差值來(lái)度量,還可以用差的絕對(duì)值來(lái)度量,還可以用差的平方來(lái)度量,用差的平方來(lái)度量的損失記為:
cost(h_{\boldsymbol \theta}(\boldsymbol x^{(i)}),y^{(i)}) = (h_{\boldsymbol \theta}(\boldsymbol x^{(i)})-y^{(i)})^2
??我們不能只讓 \boldsymbol \theta 使某一個(gè)樣本的損失最小,而應(yīng)該讓整個(gè)測(cè)試集的所有樣本的數(shù)據(jù)的整體損失最小,很容易想到的一個(gè)樸素的度量整體損失方法那就是取每個(gè)樣本的損失的均值,即:
J(\boldsymbol \theta) = \frac 1 m \sum_{i = 1}^m cost(h_{\boldsymbol \theta}(\boldsymbol x^{(i)}),y^{(i)})
??那么我們選哪種損失的度量方法來(lái)計(jì)算整體的損失呢?我們來(lái)一個(gè)一個(gè)看,首先是差值,差值可能不太好,因?yàn)檎?fù)差值可能會(huì)抵消掉而使總體差值看起來(lái)不錯(cuò)而每個(gè)樣本的偏差都很大。接下來(lái)是差值的絕對(duì)值,差值的絕對(duì)值不會(huì)有上面的問(wèn)題,是個(gè)備選項(xiàng),差值的平方看起來(lái)也是一個(gè)不錯(cuò)的選擇。其實(shí)具體用哪個(gè)還是要根據(jù)使用場(chǎng)景的,沒(méi)有單純的說(shuō)哪個(gè)一定比另一個(gè)好,常用的還是差值的平方,所以整個(gè)損失函數(shù)就是(有的還會(huì)再除以一個(gè)2,我猜是為了后面計(jì)算偏導(dǎo)的時(shí)候與產(chǎn)生的一個(gè)乘2相抵消而設(shè)的):
J(\boldsymbol \theta) = \frac 1 {2m} \sum_{i = 1}^m (h_{\boldsymbol \theta}(\boldsymbol x^{(i)})-y^{(i)})^2
??所以我們的目標(biāo)就是找到是 J(\boldsymbol \theta) 最小時(shí)的 \boldsymbol \theta ,此時(shí)得到的模型 h_{\boldsymbol \theta}(\boldsymbol x) 就是我們想要的結(jié)果:
h_{\boldsymbol \theta}(\boldsymbol x) = \boldsymbol \theta^T \boldsymbol x

\min_{\boldsymbol \theta} J(\boldsymbol \theta)

Gradient descent

??有了模型,有了損失函數(shù)和優(yōu)化目標(biāo)后,接下來(lái)的問(wèn)題就是怎么求解這個(gè)最優(yōu)條件下的 \boldsymbol \theta 了。在微積分中,我們知道一個(gè)函數(shù)的最小值點(diǎn)可能在他的極小值點(diǎn)或者是取值范圍的邊界。這個(gè)函數(shù)取值范圍是無(wú)窮的,所以只可能在極小值點(diǎn),我們是可以通過(guò)求極小值點(diǎn)來(lái)找最優(yōu)條件下的 \boldsymbol \theta 的,但是這并不是一個(gè)“萬(wàn)能”的方法,因?yàn)閯e的模型會(huì)有別的函數(shù)表達(dá)式,當(dāng)函數(shù)表達(dá)式非常復(fù)雜的時(shí)候求解極小值點(diǎn)并不容易,所以這里介紹一種梯度下降的方法來(lái)找最優(yōu)解。

??在微積分中,梯度是函數(shù)在各個(gè)元上的偏導(dǎo),也就是該曲線上的斜率。我們想象在一個(gè)三維的平面上(在一座上上),我們只能看到自己腳下的路的情況,但我們想要走到山的谷底。很容易想到朝著下山最快的地方一步一步走是最有可能找到谷底的(貪心的思想)。在這個(gè)面上,我們能走的所有方向都可以分解為往前或后加上往左或右。在前后方向的偏導(dǎo)及在左右方向的偏導(dǎo)所構(gòu)成的向量就是我們應(yīng)該走的方向的反方向,然后我們朝著這個(gè)反方向走一步就實(shí)現(xiàn)了下降了一點(diǎn)。(注意:梯度下降的方向也可能會(huì)讓損失增加,見(jiàn) Gradient descent3 那里我的世界的拿個(gè)視頻),接下來(lái)是推導(dǎo)線性回歸下的偏導(dǎo)公式,首先是 {\partial J(\boldsymbol \theta)} / {\partial \theta_0}
\begin{aligned} \frac {\partial J(\boldsymbol \theta)} {\partial \theta_0} &= \frac 1 {2m} \sum_{i=1}^m 2(h_{\boldsymbol \theta}(\boldsymbol x^{(i)})-y^{(i)})(h_{\boldsymbol \theta}(\boldsymbol x^{(i)})-y^{(i)})' \\ \end{aligned}
??其中,因?yàn)?(h_{\boldsymbol \theta}(\boldsymbol x^{(i)})-y^{(i)}) = (\theta_0+\theta_1x_1^{(i)}+\cdots+\theta_nx_n^{(i)}-y^{(i)}) ,除 (\theta_0)'=1 外,其他的偏導(dǎo)都為0,所以 (h_{\boldsymbol \theta}(\boldsymbol x^{(i)})-y^{(i)})'=1 ,所以:
\begin{aligned} \frac {\partial J(\boldsymbol \theta)} {\partial \theta_0} &= \frac 1 {m} \sum_{i=1}^m (h_{\boldsymbol \theta}(\boldsymbol x^{(i)})-y^{(i)}) \\ \end{aligned}
??對(duì)于 j \neq 0 時(shí) {\partial J(\boldsymbol \theta)} / {\partial \theta_j} 為:
\begin{aligned} \frac {\partial J(\pmb\theta)} {\partial \theta_j} &= \frac 1 {m} \sum_{i=1}^m (h_{\boldsymbol \theta}(\boldsymbol x^{(i)})-y^{(i)})(h_{\boldsymbol \theta}(\boldsymbol x^{(i)})-y^{(i)})' \\ & =\frac 1 {m} \sum_{i=1}^m (h_{\boldsymbol \theta}(\boldsymbol x^{(i)})-y^{(i)})(\theta_0+\theta_1x_1^{(i)}+\cdots+\theta_jx^{(i)}_j+\cdots+\theta_nx_n^{(i)}-y^{(i)})' \\ & =\frac 1 {m} \sum_{i=1}^m (h_{\boldsymbol \theta}(\pmb x^{(i)})-y^{(i)})(0+0+\cdots+x^{(i)}_j+\cdots+0-0) \\ & =\frac 1 {m} \sum_{i=1}^m (h_{\boldsymbol \theta}(\pmb x^{(i)})-y^{(i)}) x^{(i)}_j \end{aligned}
??綜上,各個(gè)系數(shù)的梯度計(jì)算公式:
\begin{aligned} \frac {\partial J(\boldsymbol \theta)} {\partial \theta_0} &= \frac 1 {m} \sum_{i=1}^m (h_{\boldsymbol \theta}(\boldsymbol x^{(i)})-y^{(i)}) \\ \frac {\partial J(\boldsymbol \theta)} {\partial \theta_j}& =\frac 1 {m} \sum_{i=1}^m (h_{\boldsymbol \theta}(\boldsymbol x^{(i)})-y^{(i)}) x^{(i)}_j \ \ \ \ \ \ \ \ \ \ \ \ (j\neq 0) \end{aligned}
??有了梯度以后就是更新系數(shù)了,更新的方式就是新的位置等于原來(lái)的位置減去梯度,為了控制每步改變的大小,引入一個(gè)參數(shù) \alpha ,該參數(shù)也稱(chēng)為學(xué)習(xí)率,更新系數(shù)的公式如下:
\theta_j:=\theta_j - \alpha \frac {\partial J(\boldsymbol \theta)} {\partial \theta_j }
??從上式可以看出,每次更新改變的量不僅與 \alpha 有關(guān),也與梯度的取值有關(guān)。整個(gè)梯度下降的過(guò)程就是不斷的迭代計(jì)算梯度,更新系數(shù)的過(guò)程。可以想象,梯度下降每次都朝著當(dāng)前最優(yōu)的方向走一步,最終可以走到一個(gè)“谷底”,但這個(gè)谷底可能只是區(qū)域最低的地方,而不是全局最低的,所以梯度下降有陷入局部最優(yōu)的風(fēng)險(xiǎn)(這也是貪心思想的算法的特征之一),但是在線性回歸中,沒(méi)有這個(gè)風(fēng)險(xiǎn),因?yàn)榫€性函數(shù)是一個(gè)凸函數(shù),只有一個(gè)極小值點(diǎn),所以也是最小值點(diǎn)。

Polynomial regression

??輸入輸出用線性關(guān)系就能刻畫(huà)的情況還是非常少的,很多時(shí)候是非線性的關(guān)系,例如多項(xiàng)式的關(guān)系,那么怎么來(lái)回歸擬合一個(gè)多項(xiàng)式函數(shù)呢?例如對(duì)于一個(gè)二元函數(shù)有如下多項(xiàng)式時(shí):
h_{\boldsymbol \theta}(x_1,x_2) = \theta_0+\theta_1x_1+\theta_2x_2+\theta_3x_1x_2+\theta_4x_1^2+\theta_5x_2^2
??如何來(lái)擬合其中的 \boldsymbol \theta 呢,其實(shí)只需將后面的多項(xiàng)式部分看成是一個(gè)新的特征即可,即 \theta_3 是特征 (x_1x_2) 的系數(shù),將 (x_1x_2) 看成是一個(gè)整體,提前計(jì)算出 x_1x_2 作為一個(gè)新特征即可,\theta_4、\theta_5 同理。不知道會(huì)不會(huì)有人也和我一開(kāi)始一樣有這樣的疑問(wèn),將多次項(xiàng)提前計(jì)算出來(lái)作為一個(gè)新特征,其實(shí)會(huì)抹去一次項(xiàng)在這里的痕跡,那么進(jìn)行梯度下降求偏導(dǎo)的時(shí)候不會(huì)出問(wèn)題嗎?其實(shí)仔細(xì)觀察偏導(dǎo)的公式可以知道,不會(huì)有問(wèn)題的,因?yàn)榍蟮牟皇?x 項(xiàng)的偏導(dǎo)而是 \theta 的偏導(dǎo), x 在求偏導(dǎo)時(shí)會(huì)被看作是常數(shù)。

Generalization

??我們訓(xùn)練一個(gè)回歸模型的目的不是想要他在訓(xùn)練集上有很好的表現(xiàn),而是希望他在實(shí)際中能有很好的表現(xiàn),我們使用測(cè)試集來(lái)模擬在新數(shù)據(jù)上的表現(xiàn)。在測(cè)試集上的表現(xiàn)被稱(chēng)為泛化能力。所以我們希望的是一個(gè)泛化能力好的模型,既能在訓(xùn)練集上有好的表現(xiàn),也能在測(cè)試集上有好的表現(xiàn)。

??在測(cè)試集上有好的表現(xiàn)一般來(lái)說(shuō)很容易做到,將多項(xiàng)式的次數(shù)提高即可更好的擬合訓(xùn)練集。但是也可能造成過(guò)擬合,降低過(guò)擬合的一個(gè)方法就是正則化。

Regularization

??正則化的方法是在損失函數(shù)后面增加正則化項(xiàng),則損失函數(shù)變?yōu)椋?br> J(\boldsymbol \theta) = \frac 1 {2m} \sum_{i = 1}^m (h_{\boldsymbol \theta}(\pmb x^{(i)})-y^{(i)})^2 + \frac \lambda {2m} \sum_{j=1}^n\theta_j^2
??注意求和從 j = 1 開(kāi)始,偏執(zhí)項(xiàng)(常數(shù)\theta_0)不加入到正則化項(xiàng),因?yàn)榧恿诵Ч赡芊炊鴷?huì)不好。梯度下降的偏導(dǎo)公式變?yōu)椋?br> \begin{aligned} \frac {\partial J(\boldsymbol \theta)} {\partial \theta_0} &= \frac 1 {m} \sum_{i=1}^m (h_{\boldsymbol \theta}(\boldsymbol x^{(i)})-y^{(i)}) \\ \frac {\partial J(\boldsymbol \theta)} {\partial \theta_j}& =\frac 1 {m} \sum_{i=1}^m (h_{\boldsymbol \theta}(\boldsymbol x^{(i)})-y^{(i)}) x^{(i)}_j + \frac \lambda m \theta_j\ \ \ \ \ \ \ \ \ \ \ \ (j\neq 0) \end{aligned}
??仔細(xì)觀察正則化后的系數(shù)更新公式和正則化前的,若 \frac\lambda m 是一個(gè)很小的數(shù),那么正則化其實(shí)就是每次在更新 \theta_j 時(shí),都先讓 \theta_j 縮小一點(diǎn)點(diǎn),然后在減去原來(lái)的值。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容