机器学习线性回归算法实验报告_从零实现机器学习算法(九)线性回归
1. 回歸簡介
在客觀世界中普遍存在著變量與變量之間的關(guān)系。變量之間的關(guān)系一般可以分為確定關(guān)系和不確定關(guān)系。確定關(guān)系是指變量之間的關(guān)系可以通過函數(shù)關(guān)系來表達(dá)。非確定關(guān)系即所謂的相關(guān)關(guān)系。而回歸分析是研究非確定關(guān)系的方法,可以幫助我們從一個或一系列變量的值去估計另一個變量的值。
線性回歸模型為
通過最小化損失函數(shù)
求得最優(yōu)的
。具體的方法有線性回歸、局部加權(quán)回歸、嶺回歸、Lasso回歸和逐步線性回歸等。2. 回歸模型
線性回歸
線性回歸求解
有兩種方法,一種是使用梯度下降法求解,另一種是通過正規(guī)方程求解。梯度下降法前面已經(jīng)介紹過了,下面介紹下正規(guī)方程的解法。對損失函數(shù)求導(dǎo)
令導(dǎo)數(shù)等于0,得
解得
其中
為訓(xùn)練集, 為訓(xùn)練集標(biāo)簽。線性回歸代碼如下:def局部加權(quán)回歸
線性回歸容易出現(xiàn)欠擬合的現(xiàn)象,因為它求的是具有最小均方差的無偏估計。為了解決這一問題,局部加權(quán)回歸在待預(yù)測點附近的每一個點賦予一定的權(quán)重,然后在這個自己是基于最小均方差來進(jìn)行普通的回歸分析。對于局部加權(quán)回歸來說其損失函數(shù)為
和線性回歸類似,對損失函數(shù)求導(dǎo),然后令導(dǎo)數(shù)為零可得
對于局部加權(quán)回歸的權(quán)重
類似于支持向量機(jī)的核函數(shù),常用的為高斯核函數(shù)局部加權(quán)回歸代碼:
def嶺回歸
在做回歸分析時,有時候特征維度比樣本數(shù)量多,此時輸入的特征矩陣不是滿秩的,因此不存在其逆矩陣。為了解決這個問題,嶺回歸在矩陣
上加上一個 使得矩陣非奇異。實際上,對于嶺回歸來說,其損失函數(shù)加上一個L2正則化項,即和線性回歸類似,對損失函數(shù)求導(dǎo),然后令導(dǎo)數(shù)為零可得
嶺回歸代碼如下:
defLasso回歸
Lasso與嶺回歸類似,Lasso回歸也是在損失函數(shù)上增加正則化項。但是Lasso正價的是L1正則化項,即
由于L1范數(shù)采用的是絕對值導(dǎo)致Lasso不是處處可導(dǎo)的,因此不能使用梯度下降或者牛頓法來求解。這里使用坐標(biāo)下降法求得最優(yōu)的
值。坐標(biāo)下降法通過每次沿一個方向優(yōu)化獲取最小值,即坐標(biāo)下降法可以得到閉式解
其中
為系數(shù)。Lasso回歸代碼:
def逐步線性回歸
逐步線性回歸和Lasso算法類似,它采用貪心算法,每一次所做的決策是對權(quán)重增加或者減少一個很小的值。
逐步線性回歸代碼如下:
def3. 總結(jié)與分析
線性回歸分析的內(nèi)容還是蠻多的,其中很多方法都有相應(yīng)的改進(jìn)算法,這里值介紹了它們的基礎(chǔ)算法。最后貼一下本文實現(xiàn)的線性回歸與Sklearn檢測性能的比較。
Sklearn線性回歸本文線性回歸發(fā)現(xiàn)兩者運行時間差不多,但是Sklearn的回歸效果要好一些,本文的到后來就飄了。
本文相關(guān)代碼和數(shù)據(jù)集:
https://github.com/Ryuk17/MachineLearning?github.com參考文獻(xiàn):
[1] 【機(jī)器學(xué)習(xí)】一文讀懂正則化與LASSO回歸,Ridge回歸
[2] Peter Harrington, Machine Learning IN ACTION
總結(jié)
以上是生活随笔為你收集整理的机器学习线性回归算法实验报告_从零实现机器学习算法(九)线性回归的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一个字节为什么是8位(为什么一个字节是8
- 下一篇: 递归求二叉树的深度_优雅地用堆栈替代递归