回歸算法
線性回歸
線性回歸的定義是:目標(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)記如下:
代表訓(xùn)練集中實例的數(shù)量
代表特征/輸入變量
代表目標(biāo)變量/輸出變量
代表訓(xùn)練集中的實例
代表第
個觀察實例
代表學(xué)習(xí)算法的解決方案或函數(shù)也稱為假設(shè)(hypothesis)
例如:房價例子中房子的大小預(yù)測房子的價格嚷那。,其中x表示房子的大小杆煞,選擇合適的參數(shù)(parameters)
和
魏宽,在房價問題這個例子中便是直線的斜率和在
軸上的截距。
通用公式為:
那么我們可以通過向量的方式來表示就值與特征X值之間的關(guān)系:
兩向量相乘队询,結(jié)果為一個整數(shù)是估計值,其中所有特征集合的第一個特征值x0=1,那么我們可以通過通用的向量公式來表示線性模型:
一個列向量的轉(zhuǎn)置與特征的乘積,得出我們預(yù)測的結(jié)果构诚,但是顯然我們這個模型得到的結(jié)果可定會有誤差蚌斩,如下圖所示:
我們選擇的參數(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(θ) 誤差最小厦章,可以采用一下兩種方法:一種使正規(guī)方程解法(只適用于簡單的線性回歸),另一種使用梯度下降算法砰盐。
正規(guī)方程
求解:
X為特征值矩陣闷袒,y為目標(biāo)值矩陣
缺點:當(dāng)特征過于復(fù)雜,求解速度太慢
? 對于復(fù)雜的算法岩梳,不能使用正規(guī)方程求解(邏輯回歸等)
梯度下降算法
假設(shè)線性函數(shù)形式:
損失函數(shù)(又稱代價函數(shù)或成本函數(shù)):
梯度下降是一個用來求函數(shù)最小值的算法囊骤,將使用梯度下降算法來求出損失函數(shù) 的最小值晃择。
梯度下降思想:開始時我們隨機選擇一個參數(shù)的組合,計算損失函數(shù)也物,然后我們尋找下一個能讓損失函數(shù)值下降最多的參數(shù)組合宫屠。我們持續(xù)這么做直到找到一個局部最小值(local minimum),因為我們并沒有嘗試完所有的參數(shù)組合滑蚯,所以不能確定我們得到的局部最小值是否便是全局最小值(global minimum)浪蹂,選擇不同的初始參數(shù)組合,可能會找到不同的局部最小值告材。
梯度下降理解:想象你自己正站立在山的這一點上坤次,站立在你想象的公園這座紅色山上,在梯度下降算法中斥赋,我們要做的就是旋轉(zhuǎn)360度缰猴,看看我們的周圍,并問自己要在某個方向上疤剑,用小碎步盡快下山滑绒。這些小碎步需要朝什么方向?如果我們站在山坡上的這一點隘膘,你看一下周圍疑故,你會發(fā)現(xiàn)最佳的下山方向,你再看看周圍弯菊,然后再一次想想纵势,我應(yīng)該從什么方向邁著小碎步下山?然后你按照自己的判斷又邁出一步误续,重復(fù)上面的步驟吨悍,從這個新的點,你環(huán)顧四周蹋嵌,并決定從什么方向?qū)羁煜律接希缓笥诌~進了一小步栽烂,并依此類推躏仇,直到你接近局部最低點的位置。
批量梯度下降(batch gradient descent)算法的公式為:
其中是學(xué)習(xí)率(learning rate)腺办,它決定了我們沿著能讓代價函數(shù)下降程度最大的方向向下邁出的步子有多大焰手,在批量梯度下降中,我們每一次都同時讓所有的參數(shù)減去學(xué)習(xí)速率乘以代價函數(shù)的導(dǎo)數(shù)怀喉。
接下來书妻,對之前的線性回歸問題運用批量梯度下降算法,關(guān)鍵在于求出代價函數(shù)的導(dǎo)數(shù)躬拢,即:
時:
時:
則算法改寫成:
Repeat {
?
?
? }
當(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ù):
表示訓(xùn)練集中實例的數(shù)量惊橱。
表示用來控制的是對模型正則化的程度。
表示通過控制
來調(diào)節(jié)嶺回歸與套索回歸的混合比例叠骑。
嶺(Ridge)回歸的損失函數(shù):
套索(Lasso)回歸的損失函數(shù):
彈性網(wǎng)絡(luò)(Elastic Net)的損失函數(shù):
LinearRegression
-
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ù)粥烁,指定計算并行度贤笆。
-
-
模型屬性:
-
coef_
:權(quán)重向量。 -
intercept_
:值讨阻。
-
-
模型方法:
-
fit(X,y[,sample_weight])
:訓(xùn)練模型芥永。 -
predict(X)
:用模型進行預(yù)測,返回預(yù)測值钝吮。 -
score(X,y[,sample_weight])
:返回模型的預(yù)測性能得分埋涧。
-
SGDRegressor
-
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
, orsquared_epsilon_insensitive
-
penalty
: 字符串,懲罰項:none
,l2
,l1
, orelasticnet
-
alpha
: 浮點數(shù)棘催,默認(rèn):0.0001
用來控制的是對模型正則化的程度。 -
l1_ratio
:通過控制這個參數(shù)來調(diào)節(jié)嶺回歸與套索回歸的混合比例 耳标。 -
max_iter
: 指定最大迭代次數(shù)醇坝。 -
tol
:一個浮點數(shù),指定判斷迭代收斂與否的閾值次坡。 -
learning_rate
: 字符串, 學(xué)習(xí)率呼猪,可選項constant
画畅,optimal
,invscaling
郑叠,adaptive
-
-
模型屬性:
-
coef_
:權(quán)重向量夜赵。 -
intercept_
:值。
-
n_iter_
:實際迭代次數(shù)乡革。
3.模型方法: 參考
LinearRegression
-
Ridge(嶺回歸)
-
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
础锐。
-
模型屬性:
-
coef_
:權(quán)重向量。 -
intercept_
:值荧缘。
-
n_iter_
:實際迭代次數(shù)皆警。
-
模型方法: 參考
LinearRegression
。
Lasso(套索回歸)
-
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
趟薄。
-
模型屬性:參考
Ridge
。模型方法: 參考
LinearRegression
典徊。
ElasticNet(彈性網(wǎng)絡(luò))
-
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
羡铲。
-
模型屬性:參考
Lasso
。模型方法:參考
Lasso
儡毕。
參考資料:
《吳恩達(dá)機器學(xué)習(xí)》《sklearn官方文檔》《AI算法工程師手冊》