LOESS, 局部加权回归

首席躺平官 2021-07-16 17:33:15 阅读: 5434

一般来说,两个变量之间的关系是十分微妙的,仅仅采用简单的直线、曲线参数方程去描述是不够的,所以这时候就需要非参数回归。关于非参数和参数方法的区别,就是在分析之前有没有对预测做一些限制,比如认为特征和响应变量之间具有线性关系,可以通过线性方程拟合,我们只需要求出方程的系数就是参数方法,比如之前提到的线性回归、多项式回归等等,而如果直接从数据出发进行分析就是非参数方法。正因为没有限制,所以非参数方法拟合得到的曲线可以更好地描述变量之间的关系,不管是多么复杂的曲线关系都能拟合得到

LOESS(locally weighted regression)是一种用于局部回归分析的非参数方法,它主要是把样本划分成一个个小区间,对区间中的样本进行多项式拟合,不断重复这个过程得到在不同区间的加权回归曲线,最后再把这些回归曲线的中心连在一起合成完整的回归曲线,具体过程如下:

· 决定拟合点的数量和位置

· 以拟合点为中心,确定k个最接近的点

· 通过权重函数计算这k个点的权重

· 通过加权线性回归进行多项式拟合(一次或者二次)

· 对所有拟合点重复以上步骤

关于权重的确定,这里需要说明一下,首先它需要确定区间内的点到拟合的点的距离,这个距离指x轴的距离,我们还要找到区间内最大的距离,然后对其他距离做归一化处理:

这个权重是离拟合点的距离越近就越小,所以我们就需要做一个转化,比如用tricube weight function:

指数可以选择二次(B函数)或三次(W函数),三次方对周围权值的降速更快,平滑效果更好,切适用于大多数分布,但增加了残差的方差,一般来说,第一次迭代会更多实用W函数,第二次迭代会选择B函数。

关于对区间内的散点进行加权线性回归进行拟合,之所以我们这里采取加权线性回归而不是普通的线性回归,是因为考虑到对拟合点,它附近的点的取值对拟合线的影响应该更大,远一点的点的影响更小,所以我们要定义损失函数的时候,应该优先降低附近的点与拟合直线的误差,这也就是我们对普通的最小二乘法要加上权重的原因,实际上这就是加权最小二乘法:

可以看到,损失函数加上权重之后,我们在最小化损失函数时,就会更多地考虑权重大的点,希望他们更优,这样拟合出来的结果,自然就更加偏向权重大的点了,也就是说,距离拟合点更近距离的散点,对拟合直线的影响更大。

在R语言中进行局部多项式回归拟合是利用loess函数,我们以cars数据集做为例子来看下使用方法。该数据中speed表示行驶速度,dist表示刹车距离。用loess来建立模型时重要的两个参数是span和degree,span表示数据子集的获取范围,取值越大则数据子集越多,曲线越为平滑。degree表示局部回归中的阶数,1表示线性回归,2表示二次回归,也可以取0,此时曲线退化为简单移动平均线。这里我们设span取0.4和0.8,从下图可见取值0.8的蓝色线条较为平滑。 

plot(cars,pch=19)
model1=loess(dist~speed,data=cars,span=0.4)
lines(cars$speed,model1$fit,col='red',lty=2,lwd=2)
model2=loess(dist~speed,data=cars,span=0.8)
lines(cars$speed,model2$fit,col='blue',lty=2,lwd=2)

当模型建立后,也可以类似线性回归那样进行预测和残差分析 

x=5:25
predict(model2,data.frame(speed=x))
plot(model2$resid~model2$fit)

R语言中另一个类似的函数是lowess,它在绘图上比较方便,但在功能上不如loess强大和灵活。

plot(cars,pch=19) 
lines(lowess(cars),lty=2,lwd=2) 

邀请讨论

附件

{{f.title}} 大小 {{f.file_size}} 下载 {{f.count_download}} 金币 {{f.count_gold}}
{{item.nick_name}} 受邀请回答 {{item.create_time}}
{{item.refer_comment.nick_name}} {{item.refer_comment.create_time}}

附件

{{f.title}} 大小 {{f.file_size}} 下载 {{f.count_download}} 金币 {{f.count_gold}}
切换到完整回复 发送回复
赞({{item.count_zan}}) 踩({{item.count_cai}}) 删除 回复 关闭
科研狗©2015-2024 科研好助手,京ICP备20005780号-1 建议意见

服务热线

178 0020 3020

微信服务号