區域性加權線性回歸

2021-08-17 23:05:13 字數 4319 閱讀 1549

區域性加權線性回歸(local weights linear regression)也是一種線性回歸,不同的是,普通線性回歸是全域性線性回歸,使用全部的樣本計算回歸係數。而區域性加權線性回歸,通過引入權值(核函式),在**的時候,只使用與測試點相近的部分樣本來計算回歸係數。

值得一提,該方法與knn思想類似,都是用最近的若干樣本點來做。

比如這樣的曲線,用簡單線性回歸可以得到一條與樣本具有最小均方差的直線,但這條直線顯然不能代表圖中資料所蘊含的細節規律,為了挖掘資料潛在特性,這裡引入核函式,或者說權值,每次**前都要計算一次回歸係數,只使用測試點附件的部分樣本點來進行計算。核函式如下

這裡分子項應該是平方(歐式距離),而不是絕對值,書中有誤。其中w是乙個對角方陣,方陣大小與x的樣本數量相等,顯然,這是乙個均值為x,標準差為k的高斯函式,故與測試樣本x越近的樣本點,能夠得到更高的權重,而遠的點則權重很小。

標準差k的選擇可以遵循2sigma或者3sigma原則來。

根據上面的理論,下面對線性回歸的目標函式進行修改:

注意w(i)是w(i,i),計算每乙個樣本點時候都要計算一次w矩陣

求導並另導數為零可以得到:

有了上面的公式,python實現就很容易了,直接貼**:

# 區域性加權線性回歸

# 增加了核函式,使用高斯核函式,相當於只用於當前資料點相近的部分資料計算回歸係數

deflinear_regression_local_weights(test_point, x, y, k)

:m=x.shape[0

]weights=np.mat(np.eye(m))

foriinrange

(m):s=np.sum((test_point-x[i])

*(test_point-x[i]).t)

dif=np.sqrt(s)

weights[i, i] =np.exp(dif/(

-2.0

*k**2

))xtx=x.t*weights*x

ifnp.linalg.det(xtx)

==0

:print

("the matrix is singular, cannot do inverse")

return0

w=xtx.i*x.t*weights*y # (2,2)*(2,n)*(n,1)=(2,1)

returntest_point*w

# 區域性加權線性回歸,每次都要去計算weights和w,速度龜慢

# 200個資料也要7,8s

deflrlw_test()

:xd=np.linspace(

0, 1, 200

)yd=xd*2

+0.5

+0.1

*np.sin(xd*50

)+np.random.normal(

0, 0.03, xd.shape[0

])

y_org=xd*2

+0.5

+0.1

*np.sin(xd*50

)y=yd.reshape(xd.shape[0

], 1

)y=np.mat(y)

x=np.c_[xd, np.ones(xd.shape[0

])

]# 在最後一列全部新增1,用來增加w0或者說偏置項b

x=np.mat(x)

y_predict=np.zeros(xd.shape[0

])

t1=time.clock()

# datetime.datetime.now()

foriinrange

(xd.shape[0

])

:y_predict[i] =linear_regression_local_weights(x[i], x, y, 0.08

) # 0.08可以得到0.999的相關性

print

(time.clock()

-t1,"s")

print

(np.corrcoef(y_org, y_predict))

plt.scatter(xd, yd, marker

=".", color

="b")

plt.plot(xd, y_predict,"r")

plt.show()

實現方法和用公式計算最小二乘差不多。只是速度太慢了,每次都要計算一次核函式權值,每次都要計算一次回歸係數,500個樣本點它給我跑到5,6秒鐘去了。

200個樣本點,最後執行效果:

小結一下:

優點:用python實現簡單,容易理解,應該可以擬合任意的連續曲線

缺點:每次都要計算權值,效率很低

區域性加權線性回歸

簡單來說,這個過程其實是在先擬合出一條曲線,然後再用這個曲線去 需要 的點。但是如果這個曲線擬合得不好 或者說樣本資料含有大量噪音 那麼這個 結果就會很差。區域性加權線性回歸 對於乙個資料集合 x0,y0 x1,y1 xm,ym 我們 它在x點時對應的y值時,如果採用的是傳統的 線性回歸模型,那麼 ...

區域性加權線性回歸

區域性加權線性回歸是機器學習裡的一種經典的方法,彌補了普通線性回歸模型欠擬合或者過擬合的問題。機器學習裡分為無監督學習和有監督學習,線性回歸裡是屬於有監督的學習。普通的線性回歸屬於引數學習演算法 parametric learning algorithm 而區域性加權線性回歸屬於非引數學習演算法 n...

區域性加權線性回歸

區域性加權回歸 locally weighted linear regression,lwr 是一種非引數學習方法 在 新樣本值時候每次都會重新訓練資料得到新的引數值,也就是說每次 新樣本都會依賴訓練資料集合,所以每次得到的引數值是不確定的。注 引數學習方 在訓練完成所有資料後得到一系列訓練引數,然...