線性回歸,最小二乘法

2021-08-03 12:56:35 字數 3966 閱讀 8087

回歸的定義:

對於乙個點集, 使用乙個函式去擬合該點集,使點集與擬合函式間的誤差最小,如果這個函式曲線是一條直線,則是線性回歸,如果曲線是二次曲線,則是二次回歸。

廣義線性回歸:

廣義線性模型是線性模型的擴充套件,其特點是不強行改變資料的自然度量,資料可以具有非線性和非恆定方差結構[59],主要是通過聯結函式g()(link function),建立響應變數y的數學期望值 與線性組合的**變數p之間的關係:。與線性模型相比,glm模型中y的分布可以是任何形式的指數分布(如高斯分布、泊松分布、二項式分布),聯結函式可以是任何單調可微函式(如對數函式logarithm 或邏輯函式logit)。y的方差通過方程函式 依賴於其數學期望值 ,這裡 ,為比例(或者稱為離差)引數[57-58,60]。這些優點使得glm模型可以處理非正態分佈的響應變數,同時可包含定性、半定量的**變數;y通過連線函式g(e(y))與線性**因子p建立聯絡,不僅確保線性關係,且可保證**值落在響應變數的變幅內,並可解決資料過度離散的問題,從而使glm逐漸成為植被-環境關係研究的重要模型,並得到越來越多的關注。

之前已經寫了線性回歸和logistic回歸,基本的形式都是先設定hθ(x),然後求最最大似然估計l(θ),然後求出l(θ)=logl(θ),然後用梯度上公升法或其它方法求出θ,二種回歸如此想你的原因就是在於它都都是廣義線性模型裡的一員。

如果乙個概念分布可以表示成p(y;η)=b(y)exp(ηtt(y)-a(η))時,那麼這個概率分布可以稱之為指數分布

貝努力分布轉換為指數分布:p(y;ø)=øy(1-ø)1-y

=exp(log(øy(1-ø)1-y))

=exp(ylogø+(1-y)log(1-ø))

=exp((log(ø/(1-ø)))y+log(1-ø))

根據上面指數分布的公式可得出:

b(y)=1

η=logø/(1-ø);ø=1/(1+e-η)

t(y) = y

a(η)=-log(1-ø)

高斯分布轉換為指數(因為σ的取值對最後的結果沒影響,所以設σ2=1):p(y;μ)=(1/2π)exp(-1/2(y-μ)2);2π上有根號

=(1/2π)exp(-1/2y2).exp(μy-1/2μ2)
根據上面指數分布的公式可得出:

b(y)=(1/2π)exp(-1/2y2);2π上有根號

η=μ

t(y) = y

a(η)=1/2μ2

廣義線性模型的三步是:

1.將y|x;θ變換成以η為引數的指數分布的形式

2.因為h(x)=e[y|x],所以能過第1步的變換可以得到e[y|x]與η的對應關係(對於logistic回歸,期望值是ø,ø與η的關係是ø=1/(1+e-η);對於線性回歸,期望值是μ,μ與η的關係是η=μ)

3.設定η=θtx(如果η是乙個向量值的話,那麼ηi=θitx)

線性回歸求解:

假設有連續型值標籤(標籤值分布為y)的樣本,有x=個特徵,回歸就是求解回歸係數θ=θ0, θ1,…,θn。在回歸方程中,求得特徵對應的最佳回歸係數的方法是最小化誤差的平方和。這裡誤差是指**y值與真值之間的差值,使用該誤差的簡單累加將使得正差值和負差值相互抵消,採用平方誤差。

平方誤差:

求解方法有:梯度下降法、最小二乘法、區域性加權線性回歸、嶺回歸(ridge regression)和縮減方法、回歸模型效能度量

1). 最小二乘法(least square method):

一元一次相性回歸y=kx+b

# -*- coding: utf-8 -*-

"""created on fri jul 07 11:48:48 2017

@author: gc125128

"""import numpy as np

from scipy.optimize import leastsq

#sample

xi = np.array([8.19,2.72,6.39,8.71,4.7,2.66,3.78])

yi = np.array([7.01,2.78,6.47,6.71,4.1,4.23,4.05])

#需要擬合的函式

deffunc

(p,x):

k,b = p

return k*x+b

pass

#誤差error

deferror

(p,x,y,s):

print s

return func(p,x)-y

pass

#test

p0 = [100,2]

#print error(p0,xi, yi)

#主函式

s = "test the number of iteration"

#實驗最小二乘法函式leastsq的呼叫幾次error函式才能找到使得均方差誤差之和最小的k,b

para = leastsq(error,p0,args=(xi,yi,s))

k,b = para[0]

print

"k=", k, "\n", "b=", b

import matplotlib.pyplot as plt

plt.figure(figsize = (8,6))

plt.scatter(xi, yi,color = "red",label = "sample point", linewidth = 3)

x=np.linspace(0,10,1000)

y = k*x + b

plt.plot(x,y,color = "orange", label ="fitting line", linewidth =2)

plt.legend()

plt.show()

一元二次線性回歸y= ax^2+bx+c

###最小二乘法試驗###

import numpy as np

from scipy.optimize import leastsq

###取樣點(xi,yi)###

xi=np.array([0,1,2,3,-1,-2,-3])

yi=np.array([-1.21,1.9,3.2,10.3,2.2,3.71,8.7])

###需要擬合的函式func及誤差error###

deffunc

(p,x):

a,b,c=p

return a*x**2+b*x+c

deferror

(p,x,y,s):

print s

return func(p,x)-y #x、y都是列表,故返回值也是個列表

#test

p0=[5,2,10]

#print( error(p0,xi,yi) )

###主函式從此開始###

s="test the number of iteration"

#試驗最小二乘法函式leastsq得呼叫幾次error函式才能找到使得均方誤差之和最小的a~c

para=leastsq(error,p0,args=(xi,yi,s)) #把error函式中除了p以外的引數打包到args中

a,b,c=para[0]

print

"a=",a,'\n',"b=",b,"c=",c

###繪圖,看擬合效果###

import matplotlib.pyplot as plt

plt.figure(figsize=(8,6))

plt.scatter(xi,yi,color="red",label="sample point",linewidth=3) #畫樣本點

x=np.linspace(-5,5,1000)

y=a*x**2+b*x+c

plt.plot(x,y,color="orange",label="fitting curve",linewidth=2) #畫擬合曲線

plt.legend()

plt.show()

線性回歸 最小二乘法(二)

上篇文章中介紹了單變數線性回歸,為什麼說時單變數呢,因為它只有單個特徵,其實在很多場景中只有單各特徵時遠遠不夠的,當存在多個特徵時,我們再使用之前的方法來求特徵係數時是非常麻煩的,需要乙個特徵係數乙個偏導式,而卻最要命的時特性的增長時及其迅猛的,幾 十 幾百 幾千 單變數線性回歸 多變數線性回歸 所...

線性回歸之最小二乘法

線性回歸是很常見的一種回歸,線性回歸可以用來 或者分類,主要解決線性問題。線性回歸過程主要解決的就是如何通過樣本來獲取最佳的擬合線。最常用的方法便是最小二乘法,它是一種數學優化技術,它通過最小化誤差的平方和尋找資料的最佳函式匹配。假設擬合直線為y ax b 對任意樣本點 x i,yi 誤差為e yi...

線性回歸 最小二乘法實現

目錄 一 線性回歸 給定由n個屬性描述的樣本x x0,x1,x2,xn 線性模型嘗試學習乙個合適的樣本屬性的線性組合來進行 任務,如 f x w1x1 w2x2 wnxn b w.t x b。通過一定方法學得向量w和常數b後,模型便可以確定下來。而對於給定資料集d xm x1,x2,xn 線性回歸則...