LWR--local weighted regression

article/2025/9/28 0:14:08

转自http://www.cnblogs.com/jeromeblog/p/3396486.html

简单回顾一下线性回归。我们使用了如下变量: x —输入变量/特征; y —目标变量; (x,y) —单个训练样本; m —训练集中的样本数目; n —特征维度; (x(i),y(i)) —第 i 个训练样本。在接下来的内容中,仍沿用这些标识。我们给定的模型假设为:

hθ(x)=θ0+θ1x1++θnxn=i=1nθixi=θTx(1)

代价函数定义如下:

J(θ)=12i=0m(hθ(x(i))y(i))2(2)

在线性回归问题中,特征的选择会直接影响到模型的性能。如下图所示,仅使用一个特征 x 时,很多样本点都没落到直线上,模型的拟合程度不怎么好;如果我们增加一个特征 x2 ,拟合效果好很多;如果用5阶多项式来拟合,可以保证图中的6个样本点全部落在曲线上。这种现象不禁让我们想,是不是使用的特征越多越好?答案是否定的。左图存在的问题称之为欠拟合(underfitting),该模型过于简单,不足以捕捉数据的诸多结构信息;右图存在的问题称之为过拟合(overfitting),模型设计得过于复杂,虽能完美拟合训练集集上的数据信息,却不能揭示更一般化的规律。

下面介绍线性回归的一种改进算法——局部加权回归(Locally Weighted Regression,LWR)。局部加权回归是一种非参数(non-parametric)型学习算法,能在一定程度上将我们从特征选择的困境中拉出来一点。参数型学习算法事先假设数据来自某种模型,然后推断模型参数。这类学习算法通常都有固定数目的参数,一旦学习到参数后,模型也就建立起来了,接下来就能扔掉训练数据并利用该模型独立完成任务。如果事先的假设与实际情况比较接近,模型可以给出比较准确的估计;否则,估计到的参数会有很强的误导性。非参数型学习算法不会事先指定模型,其参数由训练数据决定。这里的非参数不是说完全没有参数,而是指参数数目不是固定的,并且会随训练集规模的增加而增多。此外,我们必须保留整个训练集,以便后续进行完成后续的任务。

结合上图来阐述局部加权回归的主要思想。绿色的样本点(采样自抛物线)为训练集中的数据。利用线性回归拟合该训练集,最终得到红线表示的线性模型,很显然该模型在训练集上的拟合程度相当差,对特定查询点(Query Point)给出的估计与实际情况相差甚远。局部加权回归则重点考虑查询点附加的样本点(如红色圆形划定的样本集合),然后在这个样本子集合上执行加权线性回归,得到紫色直线所示的模型。该模型在估计查询点附近的样本时准确度还是很高的。权值是由样本点与查询点间的相似度(在几何空间可用距离度量)决定,越相似的权值越大,差异越大的权值几乎为0(相当于忽略这些样本)。

权值函数有很多种,只要满足两个基本条件即可:1)相似样本间权值较大;2)相似度非常小的样本间权值近似为0。最常用权值函数如下:

w(i)=exp(x(i)x22τ2)(3)

x(i)x2 为第 i 个样本 x(i) 和查询点 x 之间的欧式距离。显然,当 x(i)x2 很小时, w(i)1 ;当 x(i)x2 很大时, w(i)0 。参数 τ 称为带宽参数(Bandwidth Parameter),控制权值随距离变量的速度。如下图所示, τ 越小,权值变化越平缓; τ 越大权值变化越快。

加权线性回归的目标函数形式如下:

J(θ)=12i=1mw(i)(hθ(x(i))y(i))2(4)

单个样本 (x(j),y(j)) 情况下的梯度下降问题与线性回归基本相似:

θjJ(θ)=w(j)(hθ(x(j))y(j))xi(5)

参数迭代更新方式基本不变:

θi=θiαj=1mw(j)(hθ(x(j))y(j))x(j)i(6)

一般而言,局部加权回归效果会比线性回归好很多。在训练集很大的情况下,该方法的效率就很低了。因为对应后续的每个查询点,其与训练样本之间的权重都不同。我们首先要计算训练集中所有样本点与查询点直接的权值,然后执行线性拟合过程,并确定适用于该查询点的参数 θ ,最后在该查询点处进行估计。

其实,线性回归可视为局部线性回归的一个特例。在线性回归中,所有训练样本的权值都为1,地位平等。因为所有训练样本同等重要,针对不同的查询点就没必要重新计算每个训练样本的权值。虽然模型的性能不如局部线性回归,但是后期我们只需用学习到的参数建立的模型就可以对新样本进行估计,不用每次估计都要耗费大量资源在整个训练集上重新拟合一遍。有得必有失,在这里也体现得淋漓尽致!

以下是实验的截图,实验代码在这里下载。左图为局部权值回归,右图为线性回归。绿色曲线由采样自抛物线的样本点组成,蓝色直线为查询点对应的位置,红色直线为学习到的模型。图中的黑色红线是我手动添加的,便于进行对比。从图中可以看出,针对查询点,局部线性回归的误差明显要小于线性回归。

分类:  Machine Learning

http://chatgpt.dhexx.cn/article/RDhuMghU.shtml

相关文章

局部加权回归(LWR) Matlab模板

将百度文库上一份局部加权回归的代码,将其改为模板以便复用。 q2x,q2y为数据集,是n*1的矩阵; r是波长参数,就是对于距离的惩罚力度; q_x是要拟合的数据横坐标,是1*n的矩阵; 得到的q_y即为所求坐…

自己动手写CPU之第九阶段(2)——加载存储指令说明2(lwl、lwr)

将陆续上传新书《自己动手写CPU》,今天是第38篇,我尽量每周四篇,但是最近已经很久没有实现这个目标了,一直都有事,不好意思哈。 开展晒书评送书活动,在亚马逊、京东、当当三大图书网站上,发表…

1.3 欠/过拟合,局部加权回归(Loess/LWR)及Python实现(基于随机梯度下降)

import numpy as np import matplotlib.pyplot as plt #定义一个正态分布,参数分别为均值,方差以及X的行向量 def guassianDistribution(mean,var,x):return 1/np.sqrt( 2 * np.pi * var )*np.exp( - (x[1]-mean) ** 2 / (2*var) ) #定义权值计算函数&am…

ubuntu18.04 编译rtt-lwr

https://rtt-lwr.readthedocs.io/en/latest/install/install-18.04-melodic.html 一路通过。 coundt find AF_INET address #4 Open roboticsai opened this issue on Mar 22, 2018 2 comments Comments roboticsai commented on Mar 22, 2018 after i run the rttlua-gnu…

LWR服务管理框架

详细接口文档地址:https://www.showdoc.cc/lwr2 目前支持微信版本:最新版。 主要介绍开发接口 2.0暂时支持tcp和http开发,两者传输json数据是一样的。如下介绍: 1.请求Lwr框架的数据内容如下 {"serverKey": "软件上设置的…

基于物理信息深度学习的交通状态估计:以LWR和CTM模型为例

1.文章信息 本次介绍的文章是2022年发表在IEEE Open Journal of Intelligent Transportation Systems的一篇名为《Physics-Informed Deep Learning for Traffic State Estimation: Illustrations With LWR and CTM Models》的文章,该文章应用物理信息深度学习方法估…

机器学习实战--局部加权线性回归(LWR)

一 概述 通常情况下的线性拟合不能很好地预测所有的值,因为它容易导致欠拟合(under fitting),比如数据集是 一个钟形的曲线。而多项式拟合能拟合所有数据,但是在预测新样本的时候又会变得很糟糕,因为它导…

机器学习与算法(8)--局部加权学习算法(LWR)

局部加权学习算法(LWR) 局部加权回归(LWR)是非参数学习方法。 首先参数学习方法是这样一种方法:在训练完成所有数据后得到一系列训练参数,然后根据训练参数来预测新样本的值,这时不再依赖之前的…

局部加权回归

通常情况下的线性拟合不能很好地预测所有的值,因为它容易导致欠拟合(under fitting),比如数据集是 一个钟形的曲线。而多项式拟合能拟合所有数据,但是在预测新样本的时候又会变得很糟糕,因为它导致数据的 …

冲击波理论

冲击波理论 冲击波理论(the kinematic wave theory,也称LWR理论)最初是由Lighthill, M. J和Whitham, G. B. 以及Richards, P. I. 于上世纪50年代提出的。该理论假设车流是一种类似于水流的运动,可以通过流量、密度和速度之间的关…

IOS捷径|九宫格切图工具 分享

还在为切九宫格图片找来找去找不到好工具而烦恼? 快使用九宫格切图快捷指令,5秒切出你想要的效果 为保障更好的切图效果,轻使用正方形图片参与切图,如没有,也请尽量裁剪出正方形图片再参与切图 支持22、23、3*3 多种组合方式 …

canvas切割原图为九宫格图片

originUrl 图片原地址cWidth 生成图片的宽度cHeight 生成图片的高度top 第一条切割线距离原图片顶部的距离bottom 第二条切割线距离原图片底部的距离left 第三条切割线距离原图片左侧的距离right 第四条切割线距离原图片右侧的距离 切割 效果图 index.html <!DOCTYPE html…

Unity的UGUI用TexturePacker全自动打图集,包括九宫格切图信息

Unity的UGUI用TexturePacker全自动打图集&#xff0c;包括九宫格切图信息 前言环境准备实现过程注意总结版权声明 前言 最近在学习UGUI的打图集&#xff0c;之前一直在用SpritePacker和Sprite Atlas打图集&#xff0c;现在记录下另一种打图集方式&#xff1a;TexturePacker 主…

NGUI 九宫格切图

UISprite 的 Type 选择 Sliced 选择Edit 中的 Border

关于9宫格拼图,C++

该文章均为个人编写&#xff0c;如有错误&#xff0c;欢迎各位友友点评&#xff01; 一个简单的小游戏&#xff0c;使用到指针及一二维数组&#xff0c;相关知识可访问&#xff1a; 指针&#xff1a;https://blog.csdn.net/qiu___nan/article/details/127054411。 数组&…

html用九张图片做出九宫图,用ps如何将九张照片做成九宫格?

如何用PS将九张照片做成九宫格&#xff0c;并且随时可以更换呢。下面跟搞设计一起来做一下吧。 ↑ 首先准备好九张照片 ↑ 打开PS&#xff0c;新建一个1000x1000的文件 ↑ 选择矩形工具 ↑ 创建一个300x300的矩形 ↑ 随便填个颜色&#xff0c;把图层命名为1 ↑ 选择视图-新建参…

python将图片裁剪成九宫格

要求&#xff1a;将图片裁剪成九宫格&#xff0c;宫格图片位置打乱 思路&#xff1a; 判断该图片长宽是否能被3整除&#xff0c;不能需要对图片进行裁剪&#xff08;我的是边角裁剪&#xff09;双重for循环&#xff0c;根据步长对图片数组进行切片达到裁剪效果random.shuffle(…

html手机9张图片显示,怎么把一张图片分成9张(手机美图秀秀九宫格在哪)

手机拍照片咋做成九宫格&#xff1f;只需4步&#xff0c;这么发朋友圈真好看&#xff01; 国庆中秋双节已过&#xff0c;你拍了照片吗&#xff1f;很多朋友拍了照片后&#xff0c;喜欢发朋友圈分享。 今天教大家一招&#xff0c;让你发的朋友圈更好看&#xff0c;用手机就能完成…

九宫格拼图

九宫格拼图的实现&#xff1a; 效果为下图所示&#xff0c;实现拼图的完成&#xff0c;这里附上完整的代码&#xff0c;需要注意的是在产生随机的初始状态时&#xff0c;是随机两两交换&#xff0c;才能保证其一直是1-9的这样的情况&#xff0c;其他具体响应的设计在程序注释中…