回歸(一):線性回歸

回歸

通常對(duì)于一組特征數(shù)據(jù)和其標(biāo)記值:(x_1, y_1), (x_2, y_2), ..., (x_n, y_n)?,在使用特征值x_i?對(duì)y_i?進(jìn)行預(yù)測(cè)時(shí),根據(jù)習(xí)慣,如果y_i?是連續(xù)的,則稱這種操作或者技術(shù)為回歸;如果y_i?是離散的,則通常稱為分類。

線性回歸

以根據(jù)房屋的屬性來(lái)預(yù)測(cè)價(jià)格為例,假設(shè)房屋的價(jià)格與房屋的面積和居室的數(shù)目有關(guān),如下表所示;

Living area(feet^2) bedrooms Prices
2104 3 400
1600 3 330
2400 3 369
1416 2 232
3000 4 540

把房屋的面積記為特征x_1?,把居室的數(shù)目記為特征x_2?,價(jià)格記為y?。我們猜測(cè)x_1, x_2?y?之間,滿足關(guān)系:

y = \theta_0 + \theta_1x_1 + \theta_2x_2

因此我們可以建立模型:

h_{\theta}(x) = \theta_0 + \theta_1x_1 + \theta_2x_2?

我們也可以把上式寫成向量的形式

h_{\theta}(x) = \sum_{i=0}^{n}\theta_ix_i = \theta^Tx?

其中,\theta是參數(shù),x是我們的訓(xùn)練數(shù)據(jù)和檢測(cè)數(shù)據(jù)中的特征值。實(shí)際上,\theta是未知量,我們的目標(biāo)就是通過(guò)訓(xùn)練數(shù)據(jù)調(diào)整\theta,來(lái)使得輸出的結(jié)果更接近真實(shí)值。

在將訓(xùn)練的數(shù)據(jù)中的x_1代入,都會(huì)得到一個(gè)輸出\theta^Tx_i,這個(gè)值和真實(shí)的y_i之間會(huì)存在一個(gè)隨機(jī)的誤差\epsilon_i

y^{(i)} = \theta^Tx^{(i)} + \epsilon^{(i)}

我們假定所有的房屋都是獨(dú)立的,我們可以認(rèn)為,誤差的存在可能是房屋中的價(jià)格還會(huì)受到一些其他的因素的影響,而這些因素在建模的過(guò)程中沒(méi)有體現(xiàn),這些細(xì)枝末節(jié)可能使得房屋的價(jià)格有一些震蕩。如果把這些因素看成隨機(jī)變量,當(dāng)足夠多的隨機(jī)變量疊加之后,根據(jù)中心極限定理,形成的分布就是正態(tài)分布。因此:

誤差\epsilon^{(i)}(1\leq i \leq m)是獨(dú)立同分布的,服從均值為0,方差為某定值\sigma^2?的高斯分布。

我們做一些推導(dǎo):

根據(jù)高斯分布:

p(\epsilon^{(i)}) = \frac{1}{\sqrt{2\pi}\sigma}exp(-\frac{(\epsilon^{(i)})^2}{2\sigma^2})

\epsilon^{(i)}用訓(xùn)練數(shù)據(jù)替換:

p(y^{(i)}|x^{(i)};\theta) = \frac{1}{\sqrt{2\pi}\sigma}exp(-\frac{(y^{(i)} - \theta^Tx^{(i)})^2}{2\sigma^2})?

因?yàn)槲覀冋J(rèn)為這些數(shù)據(jù)是獨(dú)立同分布的,因此所有的訓(xùn)練數(shù)據(jù)的聯(lián)合概率就是各自的邊緣概率的乘積,得到似然函數(shù):

L(\theta) = \prod_{i=1}^m p(y^{(i)}|x^{(i)}; \theta) = \prod_{i=1}^m \frac{1}{\sqrt{2\pi}\sigma}exp(-\frac{(y^{(i)} - \theta^Tx^{(i)})^2}{2\sigma^2})

為了簡(jiǎn)化計(jì)算,我們對(duì)L(\theta)?取對(duì)數(shù),得到對(duì)數(shù)似然函數(shù):

l(\theta) = logL(\theta)\\ = log\prod_{i=1}^m \frac{1}{\sqrt{2\pi}\sigma}exp(-\frac{(y^{(i)} - \theta^Tx^{(i)})^2}{2\sigma^2}) \\ = \sum_{i=1}^m log\frac{1}{\sqrt{2\pi}\sigma}exp(-\frac{(y^{(i)} - \theta^Tx^{(i)})^2}{2\sigma^2}) \\ = mlog\frac{1}{\sqrt{2\pi}\sigma} - \frac{1}{\sigma^2} \centerdot \frac{1}{2}\sum_{i=1}^m (y^{(i)} - \theta^Tx^{(i)})^2?

當(dāng)我們使用極大似然估計(jì)的方法,則l(\theta)取最大值的時(shí)候,去掉式子中的定值部分,就是

J(\theta) = \frac{1}{2}\sum_{i=1}^m(h_{\theta}(x^{(i)}) - y^{(i)})^2

取最小值,這就是最小二乘法的目標(biāo)函數(shù)。

求解\theta的解析式

將M個(gè)N維的樣本組成矩陣X:

  • X的每一行對(duì)應(yīng)一個(gè)樣本,共有M個(gè)樣本
  • X的每一列對(duì)應(yīng)樣本的一個(gè)維度,共N維
    • 還有一個(gè)額外的常數(shù)項(xiàng),全為1

目標(biāo)函數(shù):J(\theta) = \frac{1}{2}\sum_{i=1}^m(h_{\theta}(x^{(i)} - y^{(i)}))^2 = \frac{1}{2}(X\theta - y)^T(X\theta - y)?

求梯度:\nabla J(\theta) = \nabla_{\theta} (\frac{1}{2}(X\theta - y)^T(X\theta - y) \\= \nabla_{\theta} (\frac{1}{2}(\theta^TX^T - y^T)(X\theta - y))\\ = \nabla_{\theta}(\frac{1}{2}(\theta^TX^TX\theta -\theta^TX^Ty - y^T(X\theta + y^Ty ))\\ = \frac{1}{2}(2X^TX\theta - X^Ty - (y^TX)^T) \\ = X^TX\theta - X^Ty?

其中用到了線性代數(shù)的公式:

  • \frac{\partial A\theta}{\partial \theta} = A^T?\frac{\partial \theta^TA}{\partial \theta} = A?;
  • \frac{\partial \theta^TA\theta}{\partial \theta} = (A + A^T)\theta?;對(duì)于對(duì)稱方陣A,\frac{\partial \theta^TA\theta}{\partial \theta} = 2A\theta?;

求駐點(diǎn):令\nabla J(\theta) = 0 \Rightarrow \theta = (X^TX)^{-1}X^Ty?

如果X^TX不可逆或者防止過(guò)擬合,可以加入\lambda擾動(dòng):

\theta = (X^TX+\lambda I)^{-1}X^Ty

加入復(fù)雜度懲罰因子

有時(shí),當(dāng)我們認(rèn)為y不僅和x有關(guān)系,還可能和x^2, x^3, ..., x^n有關(guān)系時(shí),我們也可以在上面的式子中加入這些項(xiàng)。例如,考慮二階的情況,上面的目標(biāo)函數(shù)會(huì)更改為:

h_{\theta}(x) = \theta_0 + \theta_{11}x_1 + \theta_{12}x_2 + \theta_{21}x_1^2 + \theta_{22}x_2^2

而且,在處理的過(guò)程中,通常會(huì)把x, x^2, x^3, ..., x^n?也當(dāng)作相互獨(dú)立的隨機(jī)變量處理。以此類推,我們也可以加入logx, a^x, sinx?等。實(shí)際上,以我個(gè)人的理解,線性回歸中,線性指的其實(shí)是死參數(shù)\theta?的線性。

假設(shè)現(xiàn)在有九個(gè)點(diǎn)(x_i, y_i) , i\in\{0, 1, 2, 3, 4, 5, 6, 7, 8\},那么我們就一定可以用一個(gè)最高次不超過(guò)8次的表達(dá)式去擬合它。

隨機(jī)產(chǎn)生九個(gè)點(diǎn),然后進(jìn)行實(shí)驗(yàn),得到了如下結(jié)果:


image-20190122210356583.png

系數(shù)如下:


image-20190122210453756.png

可以看到,雖然8階的曲線可以完美地通過(guò)所有的點(diǎn),但是8的曲線的參數(shù)值都很大,也就很不穩(wěn)定。而且從曲線圖中很容易就可以看出,8階的曲線雖然完美的通過(guò)了所有的點(diǎn),但是并不能很好地反映九個(gè)點(diǎn)的分布。這里就存在過(guò)擬合。為了放著這種現(xiàn)象的發(fā)生,一種通常的做法是,在式子中加入一個(gè)懲罰因子,來(lái)限制參數(shù)大?。?/p>

J(\theta) = \frac{1}{2}(h_{\theta}(x^{(i)}) - y^{(i)} )^2 + \lambda\sum_{j=1}^{n}\theta_j^2?

其中\lambda是一個(gè)可調(diào)的參數(shù)。

這種操作稱為正則化,因?yàn)槲覀冇玫氖?img class="math-inline" src="https://math.jianshu.com/math?formula=%5Ctheta" alt="\theta" mathimg="1">的平方求和,因此稱為L(zhǎng)2正則化。如果是\theta的絕對(duì)值求和,則稱為L(zhǎng)1正則化:

J(\theta) = \frac{1}{2}(h_{\theta}(x^{(i)}) - y^{(i)} )^2 + \lambda\sum_{j=1}^{n}|\theta_j|?

在Elastic Net中將兩種正則化整合:

J(\theta) = \frac{1}{2}(h_{\theta}(x^{(i)}) - y^{(i)} )^2 + \lambda(\rho\sum_{j=1}^{n}|\theta_j| + (1-\rho)\sum_{j=1}^{n}\theta_j^2)

梯度下降算法(gradient descent)

在實(shí)際的應(yīng)用中,并不是所有的情況下都會(huì)有最優(yōu)解的解析解,而且也沒(méi)有必要去求解析解,有的時(shí)候有數(shù)值解就夠了。梯度下降算法就是一種應(yīng)用非常廣泛的求最有參數(shù)數(shù)值解的方法,步驟如下:

  • 初始化\theta(隨機(jī)初始化)

  • 沿著負(fù)梯度的方向迭代,更新后的\theta使J(\theta)更小

    \theta = \theta - \alpha \centerdot \frac{\partial J(\theta)}{\partial \theta}

就是讓\theta沿著讓J(\theta)下降最快的方向移動(dòng)。求一下梯度方向;

\frac{\partial}{\partial\theta_j}J(\theta) = \frac{\partial}{\partial\theta_j}\frac{1}{2}(h_{\theta}(x) - y)^2\\ = 2 \times \frac{1}{2} (h_{\theta}(x) - y) \centerdot \frac{\partial}{\partial\theta_j}(h_{\theta}(x) - y)\\ = (h_{\theta}(x) - y) \centerdot \frac{\partial}{\partial\theta_j}(\sum_{i = 0}^n\theta_ix_i - y)\\ = (h_{\theta}(x) - y)x_j?

上面的結(jié)果是對(duì)一個(gè)樣本求的,實(shí)際中的損失函數(shù)是J(\theta) = \frac{1}{2}\sum_{i=1}^m(h_{\theta}(x^{(i)} - y^{(i)}))^2? 。因此可以得到:

\frac{\partial}{\partial\theta_j}J(\theta) = \sum_{i = 1}^m(h_{\theta}(x^{(i)}) - y^{(i)})x_j^{(i)}?

對(duì)梯度加上學(xué)習(xí)率\alpha?,就可以的到梯度下降的過(guò)程:

Repeat until convergence{

??\theta_j := \theta_j + \alpha\sum_{i = 1}^m(y^{(i)} - h_{\theta}(x^{(i)}))x_j^{(i)}

}

上面的梯度下降算法存在兩個(gè)問(wèn)題,一個(gè)是在每一次訓(xùn)練的過(guò)程中都要對(duì)所有的訓(xùn)練數(shù)據(jù)求一次梯度然后進(jìn)行求和,在訓(xùn)練數(shù)據(jù)量動(dòng)則上萬(wàn)甚至上百萬(wàn)的時(shí)候,這樣的開銷無(wú)疑是非常大的;第二點(diǎn)就是,梯度下降算法并不能保證每次都能找到全局最小值,因?yàn)樵谙陆档倪^(guò)程中,參數(shù)可能會(huì)陷于某個(gè)局部極值點(diǎn)而使得梯度為零。

因此有了隨機(jī)梯度下降算法(stocastic gradient descent, SGD),每次只對(duì)一個(gè)訓(xùn)練樣本求梯度,然后讓參數(shù)值變化一次:

Loop{

??for i = 1 to m {

????\theta_j := \theta_j + \alpha(y^{(i)} - h_{\theta}(x^{(i)}))x_j^{(i)}

??}

}

這種方式一方面可以減少一定的運(yùn)算量,另一方面增加了隨機(jī)性,是的\theta?有可能跳出局部最小值。

應(yīng)用最多的是以上兩種方法的一個(gè)折中:mini-batch SGD,就是將訓(xùn)練數(shù)據(jù)分成很多的batch,然后每次使用一個(gè)batch做訓(xùn)練,這樣既可以規(guī)避梯度下降算法的一些缺陷,又不想隨機(jī)梯度下降(SGD)那樣激進(jìn)(隨機(jī)性太大)。實(shí)際上,mini-batch SGD也是用的最多的方法。

模型的評(píng)價(jià)

在訓(xùn)練的到一個(gè)模型之后,我們就要來(lái)評(píng)估一個(gè)模型。其實(shí),損失函數(shù)本身就可以用來(lái)評(píng)估一個(gè)模型,因?yàn)閾p失函數(shù)表征的就是預(yù)測(cè)值和真實(shí)值之間的一種誤差,我們抽取出主要部分,的到:

MSE = \frac{1}{m}\sum_{i=1}^{m}(\hat{y_i} - y_i)^2?

其中\hat{y}?表示預(yù)測(cè)值,這個(gè)數(shù)值就是通常所說(shuō)的均方誤差。也可以使用他的算術(shù)平方根:

RMSE = \sqrt{\frac{1}{m}\sum_{i=1}^{m}(\hat{y_i} - y_i)^2}

但是這個(gè)數(shù)值的大小與模型和應(yīng)用場(chǎng)景有很大的關(guān)系,不能建立一套統(tǒng)一的標(biāo)準(zhǔn)。因此就定義了另一個(gè)指標(biāo):

R^2 = 1-\frac{RSS}{TSS} = 1-\frac{\sum_{i=1}^{m}(\hat{y_i} - y_i)^2}{\sum_{i=1}^{m}(y_i - \overline{y_i})^2}

其中,TSS就是訓(xùn)練樣本方差的(m-1)倍,RSS就是殘差的平方和。分析可得R^2具有以下性質(zhì):

  • R^2?越大,擬合的效果越好
  • R^2的最優(yōu)值為1,并且模型的效果很離譜時(shí),R^2可能為負(fù)
最后編輯于
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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