最小二乘法求解局部加权介绍
时间: 2024-03-19 08:36:20 浏览: 102
最优化参数估计系列-线性方程-最小二乘法
局部加权线性回归(Locally Weighted Linear Regression,LWLR)是一种非参数学习算法,它使用最小二乘法来进行局部加权。在LWLR中,对于每个测试点,都会有一个不同的权重向量,这个权重向量可以用来对最小二乘问题进行加权。LWLR的基本思想是:对于每个测试点,通过使用最小二乘法来拟合一个局部的线性模型,然后使用这个局部模型来进行预测。
LWLR的算法步骤如下:
1. 对于每个测试点,计算出它与训练集中所有点的距离,并将这些距离转化为权重。
2. 根据这些权重,使用最小二乘法来拟合一个局部的线性模型。
3. 使用这个局部模型来进行预测。
LWLR的优点是可以对非线性数据进行拟合,缺点是需要计算大量的权重,计算量较大。
下面是一个使用Python实现的LWLR的例子:
```python
import numpy as np
def kernel(point, xmat, k):
m,n = np.shape(xmat)
weights = np.mat(np.eye((m)))
for j in range(m):
diff = point - X[j]
weights[j,j] = np.exp(diff*diff.T/(-2.0*k**2))
return weights
def localWeight(point, xmat, ymat, k):
wei = kernel(point, xmat, k)
W = (X.T*(wei*X)).I*(X.T*(wei*ymat.T))
return W
def localWeightRegression(xmat, ymat, k):
m,n = np.shape(xmat)
ypred = np.zeros(m)
for i in range(m):
ypred[i] = xmat[i]*localWeight(xmat[i], xmat, ymat, k)
return ypred
# 测试数据
X = np.mat(np.arange(0,1,0.01)).T
Y = np.sin(2*np.pi*X)
# 加入噪声
for i in range(10):
index = int(np.random.uniform(0,100))
Y[index] += np.random.uniform(-0.1,0.1)
# 进行局部加权线性回归
ypred = localWeightRegression(X, Y, 0.01)
# 绘制图像
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.scatter(X.A[:,1], Y.A, s=5)
ax.plot(X.A[:,1], ypred, color='red')
plt.show()
```
阅读全文