線性回歸中的數學原理

2021-07-05 15:41:23 字數 2580 閱讀 8955

優點:結果易於理解,計算上不複雜

缺點:對非線性的資料擬合不好

適用資料型別:數值型和標稱型

基本步驟:

收集資料

準備資料

分析資料

訓練演算法

測試演算法

使用演算法

平方誤差的計算公式:su

m[1,

m]=(

yi−x

it×w

)2( .t在這裡代表矩陣的轉置,是python中常用的語法)

w最優解公式:w最

優=(x

t×x)

−1×x

t×y

(.i同樣是python中的語法,表示對矩陣求逆)

具體的訓練實現**比較簡單,在這裡略過,但有一點需要說明,即x.t*x的行列式應當不為零,原因如下:

設有矩陣a,由行列式定理可知,a.i=1/|a|*a^*,即a的逆等於a的行列式分之伴隨矩陣,故矩陣a行列式不可以為零。矩陣行列式可直接呼叫python內linalg.det()進行計算。

最佳擬合直線方法將資料視為直線進行建模,具有十分不錯的表現。但問題是很可能會出現欠擬合的現象。由此我們引入區域性加權線性回歸。

區域性加權線性回歸

在該演算法中,我們給**點附近的每個點賦予一定的權重,在這個子集上基於最小均方差來進行普通的回歸。公式如下:w最

優=(x

.t×w

×x)i

×xt×

w×y

其中的w是乙個矩陣,來給每個資料點賦予權重。

我們使用「核」來對附近的點賦予更高的權重。核的型別可以自由選擇,最常用的核就是高斯核,公式如下: w(

i,i)

=exp

(|xi

−x|)

−2×k

2

def lwlr(testpoint,xarr,yarr,k=1.0):

xmat = mat(xarr) ; ymat=mat(yarr).t

m = shape(xmat)[0]

for j in range(m):

diffmat=testpoint-xmat[j,:]

weights[j,j] =exp(diffmat*diffmat.t/(-2,0*k**2)

xtx=xmat.t*(weights*xmat)

if linalg.det(xtx) == 0.0:

print "this matrix is singular, cannot do

inverse"

return

ws = xtx.i * (xmat.t * (weights * ymat))

return testpoint * ws

```def lwlrtest(testarr,xarr,yarr,k=1.0):

m = shape(testarr)[0]

yhat = zeros(m)

for i in range(m):

yhat[i] = lwlr(testarr[i],xarr,yarr,k)

return yhat

區域性加權線性回歸存在的問題是計算量,因為它對每個點做**時都必須使用整個資料集。

縮減係數來「理解」資料

如果資料的特徵比樣本點還多怎麼辦?是否還可以使用線性回歸和之前的方法來做**?答案是否定的,即不能再使用前面介紹的方法。這是因為在計算(x.t*x).i時會出錯。因為特徵比樣本點還多,則輸入矩陣不是滿執矩陣,其行列式為零,因此無法求解。

為了解決這個問題,在這裡引入嶺回歸的概念。

嶺回歸簡單來說,嶺回歸就是在矩陣x^t* x

上加乙個lambada* x從而使得矩陣非奇異,進而能求逆。其中矩陣x式乙個m\times m的單位矩陣,對角線上元素全為1,其他元素全為0。此時,回歸係數的計算公式將變為: w最

優=(x

t×x+

lamb

da×i

)−1×

xt×y

嶺回歸最先用來處理特徵數多於樣本數的情況,現在也用於在估計中加入偏差,從而得到更好的估計。這裡用過引入lambda來限制了所有w之和,通過引入該懲罰項,能夠減少不重要的引數,這個技術在統計學中也叫縮減。
嶺回歸的**和普通線性回歸**類似,在這裡就不贅述了。

向前逐步回歸

向前逐步回歸演算法可以得到與lasso差不多的效果,但更加簡單。它屬於一種貪心演算法,即每一步都盡可能地減少誤差。一開始,所有的權重都設為1,然後每一步所做的決策是對某個權重增加或者減少乙個很小的值。

該演算法的為**如下所示:

資料標準化,使其分布滿足0均值和單位方差

在每輪迭代過程中:

設定當前最小誤差lowesterror為正無窮

對每個特徵:

增大或減小得到乙個新的w

計算新w下的誤差

如果誤差error小於當前最小誤差:

設定wbest等於當前w

將w設定為新的wbest

以上就是線性回歸的基本內容了,其中還有lasso回歸沒有講到,據說該演算法較為複雜,我自己也還沒有掌握,在這裡就不多說了。

線性回歸中的對於「線性」的理解

所謂 線性 回歸,那當然一定是 線性 才能用的回歸。如果你的自變數和因變數之間的關係都不是 線性 關係,那還叫什麼 線性 回歸?假設x是自變數,y是因變數,且滿足如下線性關係 y i beta 0 beta 1xi nu i 其實線性假定並不要求初始模型都呈上述的嚴格線性關係,可以通過對自變數和因變...

RSA 數學原理

提起rsa大家一定不陌生,在開發中經常使用,也經常聽同事說道。話說很久以前,人們就懂的了加密這個技術。在戰爭時期,間諜就會拿著密文和密匙來對資訊就行傳遞。這種簡單的密文 密匙 key 就是對稱加密 加密 明文 密匙 解密 密文 密匙 由於這種加密方式過於簡單,所以後來引入了數學演算法。rsa就是由特...

補碼的數學原理

計算機是用n位0和1來表示數字的,這樣很容易表示正數,但是怎麼表示負數呢?人類聰明的大腦想到了用第一位來表示符號,0代表正數,1代表負數。這種表示方法最好理解,叫做原碼。但是計算機在計算的時候,為了簡化,需要把減法當做加法運算。這個很簡單,負數不就是幹這個的嗎?比如2 1 2 1 但是負數如果按照原...