Task1 Linear_regression

線性回歸的原理


對于線性回歸缤至,其數(shù)據(jù)集是{(x1,y1),(x2,y2),,,,(xn,yn)},其中碎绎,xi=(xi1,,,,xid)略步, d表示的是數(shù)據(jù)的維度,n表示樣本數(shù)盯滚。對于線性回歸的一般形式為:
f(x)=\theta_0+\theta_1 x1 + ...+ \theta_d xd$ = \sum_i^d \theta_i Xi

對于θ的確定踢械,使得f(x)無限接近y酗电。我們采用均方誤差的方式進(jìn)行衡量f(x)和y的近似程度。即:


image.png

我們的目的就是學(xué)習(xí)θ内列,使得上面的損失最小撵术。
那為什么用均方誤差進(jìn)行衡量呢?

極大似然估計(概率角度的詮釋)
下面用極大似然估計德绿,來解釋為什么要用均方誤差作為性能度量荷荤。

先講一下什么是極大似然估計
極大似然估計,通俗理解來說移稳,利用已知的樣本結(jié)果信息蕴纳,反過來猜測最有可能(最大概率)導(dǎo)致樣本出現(xiàn)該結(jié)果的模型參數(shù)值。
也就是說在提供了一種給定觀察數(shù)據(jù)來評估模型參數(shù)的方法个粱。已知模型古毛,確定參數(shù)。

我們把目標(biāo)值和變量寫成如下等式:

image.png

表示預(yù)測值和真實值之間的差距都许,我們假設(shè)是獨(dú)立同分布稻薇,服從高斯分布。(根據(jù)中心極限定理)
image.png

所以帶入上面的公式


image.png

因此對于所有樣本胶征,我們?yōu)榱耸沟酶怕蕄最大化塞椎,因此有了如下:

image.png

我們?yōu)榱俗屵@個p達(dá)到最大,也就是L(θ)最大睛低。這就是上面說的極大似然估計案狠。為了方便計算,我們計算時通常對對數(shù)似然函數(shù)求最大值钱雷,所以會采用取對數(shù)的方式骂铁,將累乘轉(zhuǎn)化成累加:


可以看出最大化l(θ)其實就是最小化

因此用均方誤差來優(yōu)化模型參數(shù)是很合理的。

線性回歸損失函數(shù)罩抗、代價函數(shù)】目標(biāo)函數(shù)


  • 損失函數(shù)(Loss Function):
    損失函數(shù)度量的是樣本預(yù)測錯誤的程度(對于單個樣本)拉庵。損失函數(shù)越小,擬合的程度越好套蒂,模型也就越好钞支。

常用損失函數(shù)

  1. 0-1損失函數(shù)、
    0-1 loss 是最原始的loss操刀,它是一種較為簡單的損失函數(shù)伸辟,如果預(yù)測值與目標(biāo)值不相等,那么為1馍刮,否則為0,即:


0-1損失可用于分類問題窃蹋,但是由于該函數(shù)是非凸的卡啰,在最優(yōu)化過程中求解不方便静稻,有階躍,不連續(xù)匈辱。0-1 loss無法對x進(jìn)行求導(dǎo)振湾,在依賴于反向傳播的深度學(xué)習(xí)任務(wù)中,無法被使用亡脸,所以使用不多押搪。

2.平方損失函數(shù)、
平方損失函數(shù)標(biāo)準(zhǔn)形式如下:


image.png

特點(diǎn):
(1)經(jīng)常應(yīng)用與回歸問題

3.絕對損失函數(shù)浅碾、
絕對值損失函數(shù)是計算預(yù)測值與目標(biāo)值的差的絕對值:


image.png

4.對數(shù)損失函數(shù)等
log對數(shù)損失函數(shù)的標(biāo)準(zhǔn)形式如下:


image.png

邏輯回歸的損失函數(shù)就是log對數(shù)損失函數(shù)大州。

    1. 指數(shù)損失函數(shù)(exponential loss)



      特點(diǎn):
      (1)對離群點(diǎn)、噪聲非常敏感垂谢。經(jīng)常用在AdaBoost算法中厦画。

  1. Hinge 損失函數(shù)
    Hinge損失函數(shù)標(biāo)準(zhǔn)形式如下:


    特點(diǎn):
    (1)hinge損失函數(shù)表示如果被分類正確,損失為0滥朱,否則損失就為1-yf(x)
    SVM就是使用這個損失函數(shù)根暑。

7.交叉熵?fù)p失函數(shù) (Cross-entropy loss function)
交叉熵?fù)p失函數(shù)的標(biāo)準(zhǔn)形式如下:



本質(zhì)上也是一種對數(shù)似然函數(shù),可用于二分類和多分類任務(wù)中徙邻。

二分類問題中的loss函數(shù)(輸入數(shù)據(jù)是softmax或者sigmoid函數(shù)的輸出):

  • 代價函數(shù)(cost Function):
    代價函數(shù)是度量全部樣本的平均誤差排嫌。

    多分類問題中的loss函數(shù)(輸入數(shù)據(jù)是softmax或者sigmoid函數(shù)的輸出):

當(dāng)使用sigmoid作為激活函數(shù)的時候,常用交叉熵?fù)p失函數(shù)而不用均方誤差損失函數(shù)缰犁,因為它可以完美解決平方損失函數(shù)權(quán)重更新過慢的問題淳地,具有“誤差大的時候,權(quán)重更新快民鼓;誤差小的時候薇芝,權(quán)重更新慢”的良好性質(zhì).

常用的代價函數(shù)

  1. 均方誤差、

2.均方根誤差丰嘉、

3.平均絕對誤差

  • 目標(biāo)函數(shù)(Object Function):代價函數(shù)和正則化函數(shù)夯到,最終要優(yōu)化的函數(shù)。

線性回歸的優(yōu)化方法


  1. 梯度下降
    初始化參數(shù)θ 迭代使得J(θ)最小化:

    即:
    \theta_j = \theta_j + \alpha \sum_i^n(y^{(i)}-f_{\theta}(x^{(i)})) x^{(i)}_j
    注:下標(biāo)j表示第j個參數(shù)饮亏,上標(biāo)i表示第i個數(shù)據(jù)點(diǎn)耍贾。

將所有的參數(shù)以向量形式表示,可得:\theta = \theta + \alpha \sum_i^n(y^{(i)}-f_{\theta}(x^{(i)})) x^{(i)}

由于這個方法中路幸,參數(shù)在每個數(shù)據(jù)點(diǎn)負(fù)梯度方面進(jìn)行了移動荐开,因此稱為批梯度下降法對應(yīng)的,我們可以每一次讓參數(shù)只針對一個數(shù)據(jù)點(diǎn)進(jìn)行移動简肴,即:\theta = \theta + \alpha(y^{(i)}-f_{\theta}(x^{(i)})) x^{(i)}
每次只用一個樣本的梯度進(jìn)行更新晃听,不是用所有樣本的梯度進(jìn)行更新,因此也叫隨即梯度下降法。

隨機(jī)梯度下降法的好處是能扒,當(dāng)數(shù)據(jù)點(diǎn)很多時佣渴,運(yùn)行效率更高;

缺點(diǎn)是初斑,因為每次只針對一個樣本更新參數(shù)辛润,未必找到最快路徑達(dá)到最優(yōu)值,甚至有時候會出現(xiàn)參數(shù)在最小值附近徘徊而不是立即收斂见秤。但當(dāng)數(shù)據(jù)量很大的時候砂竖,隨機(jī)梯度下降法經(jīng)常優(yōu)于批梯度下降法。

當(dāng)J為凸函數(shù)時鹃答,梯度下降法相當(dāng)于讓參數(shù)θ不斷向J的最小值位置移動

梯度下降法的缺陷:如果函數(shù)為非凸函數(shù)乎澄,有可能找到的并非全局最優(yōu)值,而是局部最優(yōu)值挣跋。

  1. 最小二乘法矩陣求解

    對于x(i)

    hθ(x)可以得到:

對于向量來說三圆,有

因此可以把損失函數(shù)寫作

為最小化J(θ) ,對θ求導(dǎo)可得:

中間兩項互為轉(zhuǎn)置,由于求得的值是個標(biāo)量避咆,矩陣與轉(zhuǎn)置相同舟肉,因此可以寫成

令偏導(dǎo)數(shù)等于零,由于最后一項和θ無關(guān)查库,偏導(dǎo)數(shù)為0路媚。

因此,

利用矩陣求導(dǎo)性質(zhì)樊销,

令導(dǎo)數(shù)等于零整慎,


3、牛頓法


重復(fù)迭代围苫,可以讓逼近取到 ??(??) 的最小值
當(dāng)我們對損失函數(shù) ??(??) 進(jìn)行優(yōu)化的時候裤园,實際上是想要取到 ??′(??) 的最小值,因此迭代公式為:
??:=?????′(??)??″(??)

當(dāng)\theta是向量值的時候剂府,\theta :=\theta - H^{-1}\Delta_{\theta}l(\theta)

其中拧揽,\Delta_{\theta}l(\theta)l(\theta)\theta_i的偏導(dǎo)數(shù),HJ(\theta)的海森矩陣腺占,

H_{ij} = \frac{\partial ^2l(\theta)}{\partial\theta_i\partial\theta_j}

4淤袜、擬牛頓法
擬牛頓法的思路是用一個矩陣替代計算復(fù)雜的海森矩陣H,因此要找到符合H性質(zhì)的矩陣衰伯。

要求得海森矩陣符合的條件铡羡,同樣對泰勒公式求導(dǎo)f'(x) = f'(x_0) + f''(x_0)x -f''(x_0)x_0

令 ??=??1 ,即迭代后的值意鲸,代入可得:f'(x_1) = f'(x_0) + f''(x_0)x_1 - f''(x_0)x_0
更一般的烦周,
f'(x_{k+1}) = f'(x_k) + f''(x_k)x_{k+1} - f''(x_k)x_k
f'(x_{k+1}) - f'(x_k) = f''(x_k)(x_{k+1}- x_k)= H(x_{k+1}- x_k)
???? 為第k個迭代值

即找到矩陣G尽爆,使得它符合上式。 常用的擬牛頓法的算法包括DFP读慎,BFGS等教翩,作為選學(xué)內(nèi)容,有興趣者可自行查詢材料學(xué)習(xí)贪壳。

線性回歸的評價指標(biāo)

均方誤差(MSE):

均方根誤差(RMSE):

平均絕對誤差(MAE):

但以上評價指標(biāo)都無法消除量綱不一致而導(dǎo)致的誤差值差別大的問題,最常用的指標(biāo)是R2,可以避免量綱不一致問題

R2也叫擬合優(yōu)度蚜退,越接近1闰靴,表示可解釋力度越大,模型擬合的效果越好钻注。

  • R2_score = 1蚂且,樣本中預(yù)測值和真實值完全相等,沒有任何誤差幅恋,表示回歸分析中自變量對因變量的解釋越好杏死。

  • R2_score = 0。此時分子等于分母捆交,樣本的每項預(yù)測值都等于均值淑翼。

代碼展示


生成數(shù)據(jù):

 #生成數(shù)據(jù)
import numpy as np
#生成隨機(jī)數(shù)
np.random.seed(1234)
x = np.random.rand(500,3)
#構(gòu)建映射關(guān)系,模擬真實的數(shù)據(jù)待預(yù)測值,映射關(guān)系為y = 4.2 + 5.7*x1 + 10.8*x2品追,可自行設(shè)置值進(jìn)行嘗試
y = x.dot(np.array([4.2,5.7,10.8]))

先嘗試調(diào)用sklearn的線性回歸模型訓(xùn)練數(shù)據(jù):

import numpy as np
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
%matplotlib inline
 
lr = LinearRegression(fit_intercept=True) 
lr.fit(x,y)
print("估計的參數(shù)值為:%s" %(lr.coef_)) 
print('R2:%s' %(lr.score(x,y))) 
x_test = np.array([2,4,5]).reshape(1,-1)
y_hat = lr.predict(x_test)
print("預(yù)測值為: %s" %(y_hat))

估計的參數(shù)值為:[ 4.2 5.7 10.8]
R2:1.0
預(yù)測值為: [85.2]

最小二乘法的矩陣求解

class LR_LS():
    def __init__(self):
        self.w = None      
    def fit(self, X, y):
        # 最小二乘法矩陣求解
       
        self.w = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)
        
        
    def predict(self, X):
        y_pred = X.dot(self.w)
        
        return y_pred

if __name__ == "__main__":
    lr_ls = LR_LS()
    lr_ls.fit(x,y)
    print("估計的參數(shù)值:%s" %(lr_ls.w))
    x_test = np.array([2,4,5]).reshape(1,-1)
    print("預(yù)測值為: %s" %(lr_ls.predict(x_test)))

梯度下降法:

class LR_GD():
    def __init__(self):
        self.w = None     
    def fit(self,X,y,alpha=0.02,loss = 1e-10): # 設(shè)定步長為0.002,判斷是否收斂的條件為1e-10
        y = y.reshape(-1,1) #重塑y值的維度以便矩陣運(yùn)算
        [m,d] = np.shape(X) #自變量的維度
        self.w = np.zeros((d)) #將參數(shù)的初始值定為0
        tol = 1e5
        #============================= show me your code =======================
        while tol > loss:
            h_f = X.dot(self.w).reshape(-1,1) 
            theta = self.w + alpha*np.mean(X*(y - h_f),axis=0) #計算迭代的參數(shù)值
            tol = np.sum(np.abs(theta - self.w))
            self.w = theta
        #============================= show me your code =======================
    def predict(self, X):
        # 用已經(jīng)擬合的參數(shù)值預(yù)測新自變量
        y_pred = X.dot(self.w)
        return y_pred  

if __name__ == "__main__":
    lr_gd = LR_GD()
    lr_gd.fit(x,y)
    print("估計的參數(shù)值為:%s" %(lr_gd.w))
    x_test = np.array([2,4,5]).reshape(1,-1)
    print("預(yù)測值為:%s" %(lr_gd.predict(x_test)))

思考

  1. 思考題:既然代價函數(shù)已經(jīng)可以度量樣本集的平均誤差玄括,為什么還要設(shè)定目標(biāo)函數(shù)?

當(dāng)模型復(fù)雜度增加時肉瓦,有可能對訓(xùn)練集可以模擬的很好遭京,但是預(yù)測測試集的效果不好,出現(xiàn)過擬合現(xiàn)象泞莉,這就出現(xiàn)了所謂的“結(jié)構(gòu)化風(fēng)險”哪雕。結(jié)構(gòu)風(fēng)險最小化即為了防止過擬合而提出來的策略

  1. 問題:請用泰勒展開法推導(dǎo)牛頓法公式

將 ??(??) 用泰勒公式展開到第二階,
f(x) = f(x_0) + f'(x_0)(x - x_0)+\frac{1}{2}f''(x_0)(x - x_0)^2
對上式求導(dǎo)鲫趁,并令導(dǎo)數(shù)等于0斯嚎,求得x值
f'(x) = f'(x_0) + f''(x_0)x -f''(x_0)x_0 = 0
可以求得,
x = x_0 - \frac{f'(x_0)}{f''(x_0)}
牛頓法的收斂速度非骋快孝扛,但海森矩陣的計算較為復(fù)雜,尤其當(dāng)參數(shù)的維度很多時幽崩,會耗費(fèi)大量計算成本苦始。我們可以用其他矩陣替代海森矩陣,用擬牛頓法進(jìn)行估計慌申,

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末陌选,一起剝皮案震驚了整個濱河市理郑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌咨油,老刑警劉巖您炉,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異役电,居然都是意外死亡赚爵,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門法瑟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來冀膝,“玉大人,你說我怎么就攤上這事霎挟∥哑剩” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵酥夭,是天一觀的道長赐纱。 經(jīng)常有香客問我,道長熬北,這世上最難降的妖魔是什么疙描? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮蒜埋,結(jié)果婚禮上淫痰,老公的妹妹穿的比我還像新娘。我一直安慰自己整份,他們只是感情好待错,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著烈评,像睡著了一般火俄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上讲冠,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天瓜客,我揣著相機(jī)與錄音,去河邊找鬼竿开。 笑死谱仪,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的否彩。 我是一名探鬼主播疯攒,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼列荔!你這毒婦竟也來了敬尺?” 一聲冷哼從身側(cè)響起枚尼,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎砂吞,沒想到半個月后署恍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蜻直,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年盯质,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片概而。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡唤殴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出到腥,到底是詐尸還是另有隱情,我是刑警寧澤蔚袍,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布乡范,位于F島的核電站,受9級特大地震影響啤咽,放射性物質(zhì)發(fā)生泄漏晋辆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一宇整、第九天 我趴在偏房一處隱蔽的房頂上張望瓶佳。 院中可真熱鬧,春花似錦鳞青、人聲如沸霸饲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽厚脉。三九已至,卻和暖如春胶惰,著一層夾襖步出監(jiān)牢的瞬間傻工,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工孵滞, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留中捆,地道東北人。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓坊饶,卻偏偏與公主長得像泄伪,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子幼东,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355

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

  • http://www.cnblogs.com/pinard/p/5970503.html 在求解機(jī)器學(xué)習(xí)算法的模型...
    吃番茄的土撥鼠閱讀 1,651評論 0 5
  • 什么是梯度下降臂容?在求解機(jī)器學(xué)習(xí)算法的模型參數(shù)科雳,即無約束優(yōu)化問題時,梯度下降(Gradient Descent)是最...
    燁楓_邱閱讀 2,130評論 0 7
  • 主要內(nèi)容 自然語言輸入編碼 前饋網(wǎng)絡(luò) 卷積網(wǎng)絡(luò) 循環(huán)網(wǎng)絡(luò)(recurrent networks ) 遞歸網(wǎng)絡(luò)(re...
    JackHorse閱讀 4,133評論 0 2
  • 一脓杉、概述 1糟秘、背景 最近幾十年,人工智能經(jīng)歷了一輪又一輪的高潮和低谷球散;今天尿赚,機(jī)器學(xué)習(xí)、深度學(xué)習(xí)再一次被賦予強(qiáng)人工智...
    南華coder閱讀 2,230評論 0 3
  • 背景 學(xué)習(xí)深度學(xué)習(xí)已經(jīng)一段時間了蕉堰,但是學(xué)習(xí)過程中總覺得缺了點(diǎn)什么凌净,無從動手編程。因此屋讶,我還是希望使用寫文章的方式來...
    yjy239閱讀 2,224評論 0 7