回歸的定義:
對於乙個點集, 使用乙個函式去擬合該點集,使點集與擬合函式間的誤差最小,如果這個函式曲線是一條直線,則是線性回歸,如果曲線是二次曲線,則是二次回歸。
廣義線性回歸:
廣義線性模型是線性模型的擴充套件,其特點是不強行改變資料的自然度量,資料可以具有非線性和非恆定方差結構[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 線性回歸則...