區域性加權線性回歸(local weights linear regression)也是一種線性回歸,不同的是,普通線性回歸是全域性線性回歸,使用全部的樣本計算回歸係數。而區域性加權線性回歸,通過引入權值(核函式),在**的時候,只使用與測試點相近的部分樣本來計算回歸係數。
值得一提,該方法與knn思想類似,都是用最近的若干樣本點來做。
比如這樣的曲線,用簡單線性回歸可以得到一條與樣本具有最小均方差的直線,但這條直線顯然不能代表圖中資料所蘊含的細節規律,為了挖掘資料潛在特性,這裡引入核函式,或者說權值,每次**前都要計算一次回歸係數,只使用測試點附件的部分樣本點來進行計算。核函式如下
這裡分子項應該是平方(歐式距離),而不是絕對值,書中有誤。其中w是乙個對角方陣,方陣大小與x的樣本數量相等,顯然,這是乙個均值為x,標準差為k的高斯函式,故與測試樣本x越近的樣本點,能夠得到更高的權重,而遠的點則權重很小。
標準差k的選擇可以遵循2sigma或者3sigma原則來。
根據上面的理論,下面對線性回歸的目標函式進行修改:
注意w(i)是w(i,i),計算每乙個樣本點時候都要計算一次w矩陣
求導並另導數為零可以得到:
有了上面的公式,python實現就很容易了,直接貼**:
# 區域性加權線性回歸實現方法和用公式計算最小二乘差不多。只是速度太慢了,每次都要計算一次核函式權值,每次都要計算一次回歸係數,500個樣本點它給我跑到5,6秒鐘去了。# 增加了核函式,使用高斯核函式,相當於只用於當前資料點相近的部分資料計算回歸係數
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
("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的相關性
(time.clock()
-t1,"s")
(np.corrcoef(y_org, y_predict))
plt.scatter(xd, yd, marker
=".", color
="b")
plt.plot(xd, y_predict,"r")
plt.show()
200個樣本點,最後執行效果:
小結一下:
優點:用python實現簡單,容易理解,應該可以擬合任意的連續曲線
缺點:每次都要計算權值,效率很低
區域性加權線性回歸
簡單來說,這個過程其實是在先擬合出一條曲線,然後再用這個曲線去 需要 的點。但是如果這個曲線擬合得不好 或者說樣本資料含有大量噪音 那麼這個 結果就會很差。區域性加權線性回歸 對於乙個資料集合 x0,y0 x1,y1 xm,ym 我們 它在x點時對應的y值時,如果採用的是傳統的 線性回歸模型,那麼 ...
區域性加權線性回歸
區域性加權線性回歸是機器學習裡的一種經典的方法,彌補了普通線性回歸模型欠擬合或者過擬合的問題。機器學習裡分為無監督學習和有監督學習,線性回歸裡是屬於有監督的學習。普通的線性回歸屬於引數學習演算法 parametric learning algorithm 而區域性加權線性回歸屬於非引數學習演算法 n...
區域性加權線性回歸
區域性加權回歸 locally weighted linear regression,lwr 是一種非引數學習方法 在 新樣本值時候每次都會重新訓練資料得到新的引數值,也就是說每次 新樣本都會依賴訓練資料集合,所以每次得到的引數值是不確定的。注 引數學習方 在訓練完成所有資料後得到一系列訓練引數,然...