机器学习之线性回归(Linear Regression)
生活随笔
收集整理的這篇文章主要介紹了
机器学习之线性回归(Linear Regression)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
線性學(xué)習(xí)中最基礎(chǔ)的回歸之一,本文從線性回歸的數(shù)學(xué)假設(shè),公式推導(dǎo),模型算法以及實(shí)際代碼運(yùn)行幾方面對(duì)這一回歸進(jìn)行全面的剖析~
一:線性回歸的數(shù)學(xué)假設(shè)
1.假設(shè)輸入的X和Y是線性關(guān)系,預(yù)測(cè)的y與X通過(guò)線性方程建立機(jī)器學(xué)習(xí)模型
2.輸入的Y和X之間滿足方程Y=X+e,e是誤差項(xiàng),噪音項(xiàng),假設(shè)e是獨(dú)立同分布的,服從IID(independent and identity distribution)和均值為0,方差為某一定數(shù)的正態(tài)分布(也叫高斯分布)e服從正態(tài)分布是由中新計(jì)值定理決定的
二、線性回歸建模
2.1方程式表示:
數(shù)學(xué)形式:
矩陣形式:
其中,X矩陣是m行(n+1)列的,每一行是一個(gè)樣本,每一列是樣本的某一個(gè)特征矩陣(n+1)行一列的,它是X的權(quán)重,也是線性回歸要學(xué)習(xí)的參數(shù)
2.2 損失函數(shù)(Loss function)對(duì)數(shù)極大似然和最小二乘的聯(lián)系:由線性函數(shù)的假設(shè)知道,噪音項(xiàng)滿足高斯分布,其中一個(gè)樣本的正態(tài)分布的數(shù)學(xué)表達(dá)為:
那么,通過(guò)極大估計(jì)求得似然函數(shù)為所有樣本的乘積,如下:
經(jīng)過(guò)數(shù)學(xué)運(yùn)算和推導(dǎo),求極大似然的最大值可以轉(zhuǎn)化為求其log函數(shù)的最大值,推導(dǎo)過(guò)程如下:
要使得極大似然取得極大值,上式中的后一項(xiàng)就要最小,也可以將求線性回歸的極大似然轉(zhuǎn)化為求最小二乘的最小值,也就是常見到的線性函數(shù)的最小二乘求損失函數(shù)的數(shù)學(xué)形式:
由此就得到了線性函數(shù)的loss function三、線性函數(shù)算法:求解參數(shù)機(jī)器算法的目的就是通過(guò)建立模型并通過(guò)選擇合適的算法來(lái)求出參數(shù)下的y和實(shí)際的Y之間的差值盡量的小,也就是預(yù)測(cè)的準(zhǔn)確率在訓(xùn)練集和測(cè)試集足夠高3.1 當(dāng)矩陣可逆(滿秩)時(shí),通過(guò)normal equation可以直接求解目標(biāo)函數(shù)轉(zhuǎn)化為矩陣形式:
對(duì)其求導(dǎo)并求駐點(diǎn)
另上式為0,可求得
此算法的缺點(diǎn)是:當(dāng)矩陣很大是,計(jì)算非常耗時(shí)且占用資源3.2 當(dāng)矩陣不可逆(非滿秩)時(shí),通過(guò)梯度下降求解初始化,沿著負(fù)梯度方向進(jìn)行迭代,知道變化很小或者不變化
梯度下降中設(shè)計(jì)到的參數(shù)是,步長(zhǎng)alpha,迭代次數(shù)t,這些對(duì)于計(jì)算最終的都會(huì)影響,所以需要調(diào)參優(yōu)化。常用的梯度下降算法有SGD,BGD,mBGD,實(shí)際中以mBGD使用最多四、線性回歸防止overfitting機(jī)器學(xué)習(xí)最忌諱的是死記硬背,像考試一樣平時(shí)學(xué)習(xí)只記得死答案了,在考試的時(shí)候就不會(huì)做題目了,為了靈活變通,overfitting的方法就出現(xiàn)了,線性回歸中最常用的是引入正則化項(xiàng),也就懲罰項(xiàng),給損失函數(shù)的參數(shù)賦予一個(gè)約束項(xiàng),使其不能任意的無(wú)限大或者無(wú)限小,加入正則化損失函數(shù)變?yōu)?#xff1a;
4.1當(dāng)矩陣滿秩時(shí),引入正則項(xiàng)后的變?yōu)?#xff1a;
4.2當(dāng)矩陣不滿秩時(shí),引入正則項(xiàng)后的變?yōu)?#xff1a;
總結(jié)
以上是生活随笔為你收集整理的机器学习之线性回归(Linear Regression)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Python中read()、readli
- 下一篇: ACE线程管理机制