局部加权线性回归
局部加权线性回归
依赖
import numpy as np import matplotlib.pyplot as plt
人工数据集
n = 100 true_theta1 = np.array([1, 2]).reshape(-1,1) true_theta2 = np.array([16, -3]).reshape(-1,1) X = np.random.normal(3, 1, (n,1)) X = np.insert(X, 0, 1, axis = 1) def get_y(X): return np.array([e @ true_theta2 if e[1]>3 else e @ true_theta1 for e in X]).reshape(-1,1) y = get_y(X) + np.random.normal(0, 0.01, (n,1)) np.insert(X, 2, y.T, axis = 1) plt.scatter(X[:,1], y)
<matplotlib.collections.PathCollection at 0x7efdca896fd0>
以上为人工数据集分布。
局部加权线性回归函数
本代码通过使用最小二乘法直接求最优解。
def lwlr(X, x, y, k):#直接返回最优解的theta m = X.shape[0] W = np.diag(np.exp(-(X[:,1]-x)**2/2/(k**2))) return np.linalg.pinv(X.T @ W @ X) @ X.T @ W @ y #np.array([1,x]) @ theta ,np.array([1,x]) @ true_theta1, np.array([1,x]) @ true_theta2, get_y([[1,x]])
损失函数
损失函数如下,其中
对表达式求导:
令
得
预测
k=1 xrange = [x for x in np.arange(-1,10,0.1)] t1 = [get_y([[1,x]])[0][0] for x in xrange] print(t1) #print(xrange) #print([x for x in xrange]) t2 = [(np.array([[1,x]])@ lwlr(X, x, y, k))[0][0] for x in xrange] print(t2) c = ['o' for x in xrange] + ['+' for x in xrange] for xx, yy, cc in zip([xrange[:],xrange[:]],[t1[:],t2[:]], c): plt.scatter(xx, yy, marker = cc) for i in xrange: print(f"当x点为{i},真实值为{get_y([[1, i]])},预测值为{np.array([[1, i]])@ lwlr(X, i, y, k)}") plt.show()
!
(●'◡'●)
局部加权线性回归需要保存训练的数据,能拟合不能确定模糊表达式的点集,其预测值主要会被附近的点影响,但远离预测值
但我所构建的数据集,其实并不符合实际,生活中的数据不应该出现毛刺,应该更平滑点如预测曲线,所以我认为预测曲线更符合实际。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异