線性回歸模型

回歸算法

線性回歸

線性回歸的定義是:目標(biāo)值預(yù)期是輸入變量的線性組合供屉。線性模型形式簡單往产、易于建模,但卻蘊含著機器學(xué)習(xí)中一些重要的基本思想渊啰。線性回歸探橱,是利用數(shù)理統(tǒng)計中回歸分析,來確定兩種或兩種以上變量間相互依賴的定量關(guān)系的一種統(tǒng)計分析方法绘证,運用十分廣泛。

優(yōu)點:結(jié)果易于理解哗讥,計算不復(fù)雜

缺點:對非線性的數(shù)據(jù)擬合不好

適用數(shù)據(jù)類型:數(shù)值型和標(biāo)稱型

將要用來描述這個回歸問題的標(biāo)記如下:

m 代表訓(xùn)練集中實例的數(shù)量

x 代表特征/輸入變量

y 代表目標(biāo)變量/輸出變量

\left( x,y \right) 代表訓(xùn)練集中的實例

({{x}^{(i)}},{{y}^{(i)}}) 代表第i 個觀察實例

h 代表學(xué)習(xí)算法的解決方案或函數(shù)也稱為假設(shè)(hypothesis

例如:房價例子中房子的大小預(yù)測房子的價格嚷那。h(\theta)=\theta_{0}+\theta_{1} x,其中x表示房子的大小杆煞,選擇合適的參數(shù)parameters\theta_{0}\theta_{1}魏宽,在房價問題這個例子中便是直線的斜率和在y 軸上的截距。

通用公式為:
h(\theta)=\theta_{0}+\theta_{1} x
那么我們可以通過向量的方式來表示\theta就值與特征X值之間的關(guān)系:
\theta=\left( \begin{array}{l}{\theta_{0}} \\ {\theta_{1}} \\ \end{array}\right) 决乎;X=\left( \begin{array}{l}{x_{0}} \\ {x_{1}} \end{array}\right)
兩向量相乘队询,結(jié)果為一個整數(shù)是估計值,其中所有特征集合的第一個特征值x0=1,那么我們可以通過通用的向量公式來表示線性模型:
h_\theta(x) = \theta^T X
一個列向量的轉(zhuǎn)置與特征的乘積,得出我們預(yù)測的結(jié)果构诚,但是顯然我們這個模型得到的結(jié)果可定會有誤差蚌斩,如下圖所示:

最小二乘法.jpg

我們選擇的參數(shù)決定了我們得到的直線相對于我們的訓(xùn)練集的準(zhǔn)確程度,模型所預(yù)測的值與訓(xùn)練集中實際值之間的差距(下圖中紅線所指)就是建模誤差modeling error)范嘱。

損失函數(shù)

損失函數(shù)在機器學(xué)習(xí)中是個重要的概念送膳,大部分機器學(xué)習(xí)算法都會有誤差,我們得通過顯性的公式來描述這個誤差丑蛤,并且將這個誤差優(yōu)化到最小值叠聋。

對于線性回歸模型,將模型與數(shù)據(jù)點之間的距離差之和做為衡量匹配好壞的標(biāo)準(zhǔn)受裹,誤差越小,匹配程度越大碌补。我們要找的模型就是需要將f(x)和我們的真實值之間最相似的狀態(tài)。于是我們就有了誤差公式棉饶,模型與數(shù)據(jù)差的平方和最小(又稱最小二乘法):
J(\theta)=\frac{1}{2 m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2}
要使 J(θ) 誤差最小厦章,可以采用一下兩種方法:一種使正規(guī)方程解法(只適用于簡單的線性回歸)另一種使用梯度下降算法砰盐。

正規(guī)方程

求解:
\theta=\left(X^{T} X\right)^{-1} X^{T} y
X為特征值矩陣闷袒,y為目標(biāo)值矩陣

缺點:當(dāng)特征過于復(fù)雜,求解速度太慢

? 對于復(fù)雜的算法岩梳,不能使用正規(guī)方程求解(邏輯回歸等)

梯度下降算法

假設(shè)線性函數(shù)形式:h_\theta \left( x \right)=\theta_{0}+\theta_{1}x

損失函數(shù)(又稱代價函數(shù)或成本函數(shù)):
J(\theta)=\frac{1}{2 m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2}
梯度下降是一個用來求函數(shù)最小值的算法囊骤,將使用梯度下降算法來求出損失函數(shù)J(\theta_{0}, \theta_{1}) 的最小值晃择。

梯度下降思想:開始時我們隨機選擇一個參數(shù)的組合\left( {\theta_{0}},{\theta_{1}},......,{\theta_{n}} \right),計算損失函數(shù)也物,然后我們尋找下一個能讓損失函數(shù)值下降最多的參數(shù)組合宫屠。我們持續(xù)這么做直到找到一個局部最小值(local minimum),因為我們并沒有嘗試完所有的參數(shù)組合滑蚯,所以不能確定我們得到的局部最小值是否便是全局最小值(global minimum)浪蹂,選擇不同的初始參數(shù)組合,可能會找到不同的局部最小值告材。

梯度下降理解:想象你自己正站立在山的這一點上坤次,站立在你想象的公園這座紅色山上,在梯度下降算法中斥赋,我們要做的就是旋轉(zhuǎn)360度缰猴,看看我們的周圍,并問自己要在某個方向上疤剑,用小碎步盡快下山滑绒。這些小碎步需要朝什么方向?如果我們站在山坡上的這一點隘膘,你看一下周圍疑故,你會發(fā)現(xiàn)最佳的下山方向,你再看看周圍弯菊,然后再一次想想纵势,我應(yīng)該從什么方向邁著小碎步下山?然后你按照自己的判斷又邁出一步误续,重復(fù)上面的步驟吨悍,從這個新的點,你環(huán)顧四周蹋嵌,并決定從什么方向?qū)羁煜律接希缓笥诌~進了一小步栽烂,并依此類推躏仇,直到你接近局部最低點的位置。

梯度下降2.png

批量梯度下降(batch gradient descent)算法的公式為:
\theta_{j} :=\theta_{j}-\alpha \frac{\partial}{\partial \theta_{j}} J(\theta)
其中\alpha是學(xué)習(xí)率(learning rate)腺办,它決定了我們沿著能讓代價函數(shù)下降程度最大的方向向下邁出的步子有多大焰手,在批量梯度下降中,我們每一次都同時讓所有的參數(shù)減去學(xué)習(xí)速率乘以代價函數(shù)的導(dǎo)數(shù)怀喉。

接下來书妻,對之前的線性回歸問題運用批量梯度下降算法,關(guān)鍵在于求出代價函數(shù)的導(dǎo)數(shù)躬拢,即:

\frac{\partial }{\partial {{\theta }_{j}}}J({{\theta }_{0}},{{\theta }_{1}})=\frac{\partial }{\partial {{\theta }_{j}}}\frac{1}{2m}{{\sum\limits_{i=1}^{m}{\left( {{h}_{\theta }}({{x}^{(i)}})-{{y}^{(i)}} \right)}}^{2}}

j=0 時:\frac{\partial }{\partial {{\theta }_{0}}}J({{\theta }_{0}},{{\theta }_{1}})=\frac{1}{m}{{\sum\limits_{i=1}^{m}{\left( {{h}_{\theta }}({{x}^{(i)}})-{{y}^{(i)}} \right)}}}

j=1 時:\frac{\partial }{\partial {{\theta }_{1}}}J({{\theta }_{0}},{{\theta }_{1}})=\frac{1}{m}\sum\limits_{i=1}^{m}{\left( \left( {{h}_{\theta }}({{x}^{(i)}})-{{y}^{(i)}} \right)\cdot {{x}^{(i)}} \right)}

則算法改寫成:

Repeat {

? {\theta_{0}}:={\theta_{0}}-\alpha\frac{1}{m}\sum\limits_{i=1}^{m}{ \left({{h}_{\theta }}({{x}^{(i)}})-{{y}^{(i)}} \right)}

? {\theta_{1}}:={\theta_{1}}-\alpha\frac{1}{m}\sum\limits_{i=1}^{m}{\left( \left({{h}_{\theta }}({{x}^{(i)}})-{{y}^{(i)}} \right)\cdot {{x}^{(i)}} \right)}

? }

當(dāng)然躲履,梯度下降算法還有:隨機梯度下降算法见间,小批量梯度下降算法等,詳情請參考《吳恩達(dá)機器學(xué)習(xí)公開課》《深度學(xué)習(xí)500問》工猜。

線性回歸算法比較:

(m訓(xùn)練樣本數(shù)米诉,n特征數(shù)量)

算法 m很大 是否支持核外 n很大 超參數(shù) 是否需要縮放 sklearn
正規(guī)方程 0 LinearRegression
批量梯度下降(BGD) 2
隨機梯度下降(SGD) >=2 SGDRegression
小批量梯度下降(Mini-batch GD) >=2
過擬合處理方法:
1.增加訓(xùn)練數(shù)據(jù) 可以有限的避免過擬合
2.特征選擇 手動有選擇性刪除特征;使用模型進行特征選擇(例如PCA)
3.正則化 保留所有特征篷帅,但減少參數(shù)的大小

正則化:

為了防止線性回歸中出現(xiàn)過擬合現(xiàn)象史侣,我們通常采用正則化方法進行處理(在損失函數(shù)中添加一個正則項)。

接下來魏身,用以下標(biāo)記來描述這個損失函數(shù):

m 表示訓(xùn)練集中實例的數(shù)量惊橱。

\lambda 表示用來控制的是對模型正則化的程度。

r 表示通過控制r來調(diào)節(jié)嶺回歸與套索回歸的混合比例叠骑。

嶺(Ridge)回歸的損失函數(shù):
J(\theta)=\frac{1}{2 m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2}+\lambda \frac{1}{2} \sum_{j=1}^{n} \theta_{j}^{2}
套索(Lasso)回歸的損失函數(shù):
J(\theta)=\frac{1}{2 m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2}+\lambda \sum_{j=1}^{n}\left|\theta_{j}\right|
彈性網(wǎng)絡(luò)(Elastic Net)的損失函數(shù):
J(\theta)=\frac{1}{2 m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2}+r \lambda \sum_{j=1}^{n}\left|\theta_{j}\right|+\frac{1-r}{2} \lambda \sum_{j=1}^{n} \theta_{j}^{2}

LinearRegression
  1. LinearRegression是線性回歸模型李皇,它的原型為:

    class sklearn.linear_model.LinearRegression(fit_intercept=True, normalize=False,copy_X=True, n_jobs=1)
    
    • fit_intercept:一個布爾值,偏置項宙枷,指定是否需要計算截距項。
    • normalize:一個布爾值茧跋。如果為True慰丛,那么訓(xùn)練樣本會在訓(xùn)練之前會被歸一化。
    • copy_X:一個布爾值瘾杭。如果為True诅病,則會拷貝X
    • n_jobs:一個整數(shù)粥烁,指定計算并行度贤笆。
  2. 模型屬性:

    • coef_:權(quán)重向量。
    • intercept_b 值讨阻。
  3. 模型方法:

    • fit(X,y[,sample_weight]):訓(xùn)練模型芥永。
    • predict(X):用模型進行預(yù)測,返回預(yù)測值钝吮。
    • score(X,y[,sample_weight]):返回模型的預(yù)測性能得分埋涧。
SGDRegressor
  1. SGD類實現(xiàn)了SGD線性回歸模型。其原型為:

    class sklearn.linear_model.SGDRegressor(loss='squared_loss', penalty='l2', alpha=0.0001, l1_ratio=0.15, fit_intercept=True, max_iter=None, tol=None, shuffle=True, verbose=0, epsilon=0.1, random_state=None, learning_rate='invscaling', eta0=0.01, power_t=0.25, early_stopping=False, validation_fraction=0.1, n_iter_no_change=5, warm_start=False, average=False, n_iter=None)
    
    • loss :字符串, 默認(rèn): squared_loss奇瘦,可選項:squared_loss, huber, epsilon_insensitive, or squared_epsilon_insensitive
    • penalty: 字符串,懲罰項: none, l2, l1, or elasticnet
    • alpha : 浮點數(shù)棘催,默認(rèn):0.0001用來控制的是對模型正則化的程度。
    • l1_ratio:通過控制這個參數(shù)來調(diào)節(jié)嶺回歸與套索回歸的混合比例 耳标。
    • max_iter: 指定最大迭代次數(shù)醇坝。
    • tol:一個浮點數(shù),指定判斷迭代收斂與否的閾值次坡。
    • learning_rate: 字符串, 學(xué)習(xí)率呼猪,可選項 constant画畅,optimalinvscaling郑叠,adaptive
  2. 模型屬性:

    • coef_:權(quán)重向量夜赵。
    • intercept_b 值。
    • n_iter_:實際迭代次數(shù)乡革。

    3.模型方法: 參考LinearRegression

Ridge(嶺回歸)
  1. Ridge類實現(xiàn)了嶺回歸模型寇僧。其原型為:

    class sklearn.linear_model.Ridge(alpha=1.0, fit_intercept=True, normalize=False, copy_X=True, max_iter=None, tol=0.001, solver='auto', random_state=None)
    
    • alpha: 控制的是對模型正則化的程度。

    • max_iter: 指定最大迭代次數(shù)沸版。

    • tol:一個浮點數(shù)嘁傀,指定判斷迭代收斂與否的閾值。

    • solver:一個字符串视粮,指定求解最優(yōu)化問題的算法细办。可以為:

      • 'auto':根據(jù)數(shù)據(jù)集自動選擇算法蕾殴。

      • 'svd':使用奇異值分解來計算回歸系數(shù)笑撞。

      • 'cholesky':使用scipy.linalg.solve函數(shù)來求解。

      • 'sparse_cg':使用scipy.sparse.linalg.cg函數(shù)來求解钓觉。

      • 'lsqr':使用scipy.sparse.linalg.lsqr函數(shù)求解茴肥。

        它運算速度最快,但是可能老版本的scipy不支持荡灾。

      • 'sag':使用Stochastic Average Gradient descent算法求解最優(yōu)化問題瓤狐。

    • random_state:用于設(shè)定隨機數(shù)生成器,它在solver=sag時使用批幌。

    • 其它參數(shù)參考LinearRegression 础锐。

  2. 模型屬性:

    • coef_:權(quán)重向量。
    • intercept_b 值荧缘。
    • n_iter_:實際迭代次數(shù)皆警。
  3. 模型方法: 參考LinearRegression

Lasso(套索回歸)
  1. Lasso類實現(xiàn)了Lasso回歸模型胜宇。其原型為:

    lass sklearn.linear_model.Lasso(alpha=1.0, fit_intercept=True, normalize=False,precompute=False, copy_X=True, max_iter=1000, tol=0.0001, warm_start=False, positive=False, random_state=None, selection='cyclic')
    
    • alpha: 控制的是對模型正則化的程度耀怜。
    • precompute:一個布爾值或者一個序列。是否提前計算Gram矩陣來加速計算桐愉。
    • warm_start:是否從頭開始訓(xùn)練财破。
    • positive:一個布爾值。如果為True从诲,那么強制要求權(quán)重向量的分量都為正數(shù)左痢。
    • selection:一個字符串,可以為'cyclic'或者'random'。它指定了當(dāng)每輪迭代的時候俊性,選擇權(quán)重向量的哪個分量來更新略步。
      • 'random':更新的時候,隨機選擇權(quán)重向量的一個分量來更新
      • 'cyclic':更新的時候定页,從前向后依次選擇權(quán)重向量的一個分量來更新
    • 其它參數(shù)參考Ridge 趟薄。
  2. 模型屬性:參考Ridge

  3. 模型方法: 參考LinearRegression 典徊。

ElasticNet(彈性網(wǎng)絡(luò))
  1. ElasticNet類實現(xiàn)了ElasticNet回歸模型杭煎。其原型為:

    class sklearn.linear_model.ElasticNet(alpha=1.0, l1_ratio=0.5, fit_intercept=True,normalize=False, precompute=False, max_iter=1000, copy_X=True, tol=0.0001,warm_start=False, positive=False, random_state=None, selection='cyclic')
    
    • alpha: 控制的是對模型正則化的程度。
    • l1_ratio:通過控制這個參數(shù)來調(diào)節(jié)嶺回歸與套索回歸的混合比例 卒落。
    • 其它參數(shù)參考 Lasso 羡铲。
  2. 模型屬性:參考 Lasso

  3. 模型方法:參考 Lasso 儡毕。

參考資料:
《吳恩達(dá)機器學(xué)習(xí)》《sklearn官方文檔》《AI算法工程師手冊》

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末也切,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子腰湾,更是在濱河造成了極大的恐慌雷恃,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件费坊,死亡現(xiàn)場離奇詭異褂萧,居然都是意外死亡,警方通過查閱死者的電腦和手機葵萎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來唱凯,“玉大人羡忘,你說我怎么就攤上這事】闹纾” “怎么了卷雕?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長票从。 經(jīng)常有香客問我漫雕,道長,這世上最難降的妖魔是什么峰鄙? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任浸间,我火速辦了婚禮,結(jié)果婚禮上吟榴,老公的妹妹穿的比我還像新娘魁蒜。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布兜看。 她就那樣靜靜地躺著锥咸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪细移。 梳的紋絲不亂的頭發(fā)上搏予,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天,我揣著相機與錄音弧轧,去河邊找鬼雪侥。 笑死,一個胖子當(dāng)著我的面吹牛劣针,可吹牛的內(nèi)容都是我干的校镐。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼捺典,長吁一口氣:“原來是場噩夢啊……” “哼鸟廓!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起襟己,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤引谜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后擎浴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體员咽,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年贮预,在試婚紗的時候發(fā)現(xiàn)自己被綠了贝室。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡仿吞,死狀恐怖滑频,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情唤冈,我是刑警寧澤峡迷,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站你虹,受9級特大地震影響绘搞,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜傅物,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一夯辖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧挟伙,春花似錦楼雹、人聲如沸模孩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽榨咐。三九已至,卻和暖如春谴供,著一層夾襖步出監(jiān)牢的瞬間块茁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工桂肌, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留数焊,地道東北人。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓崎场,卻偏偏與公主長得像佩耳,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子谭跨,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,044評論 2 355

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