局部加权回归(Lowess)算法详解

2024-05-15 12:29

本文主要是介绍局部加权回归(Lowess)算法详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、适用任务
    • 1.1 预测问题
    • 1.2 平滑问题
  • 二、算法介绍
    • 2.1 算法思想
    • 2.2 参数讲解
    • 2.3 代码实现
  • 参考资料

Lowess局部加权回归算法的主要思想为:在数据集合的每一点用低维多项式拟合数据点的一个子集,并估计该点附近自变量数据点所对应的因变量值,该多项式是用加权最小二乘法来拟合;离该点越远,权重越小。

该点的回归函数值就是由这个局部多项式得到,而用于加权最小二乘回归的数据子集是由最近邻方法确定。

LOWESS (locally weighted scatterplot smoothing) :
methods that combine multiple regression models in a k-nearest-neighbor-based meta-model. LOESS is a later generalization of LOWESS; although it is not a true acronym, it may be understood as standing for “LOcal regrESSion”

一、适用任务

1.1 预测问题

对于预测问题,回归中最简单的线性回归,是以线性的方法拟合出数据的趋势。但是对于有周期性,波动性的数据,并不能简单以线性的方式拟合,否则模型会偏差较大,而局部加权回归(lowess)能较好的处理这种问题。可以拟合出一条符合整体趋势的线,进而做预测。

1.2 平滑问题

局部加权回归(lowess)能较好的解决平滑问题。 在做数据平滑的时候,会有遇到有趋势或者季节性的数据,对于这样的数据,我们不能使用简单的均值正负3倍标准差以外做异常值剔除,需要考虑到趋势性等条件。使用局部加权回归,可以拟合一条趋势线,将该线作为基线,偏离基线距离较远的则是真正的异常值点。

实际上,局部加权回归(Lowess)主要还是处理平滑问题的多,因为预测问题,可以有更多模型做的更精确。但就平滑来说,Lowess很直观而且很有说服力。

二、算法介绍

2.1 算法思想

局部加权回归(Lowess)的大致思路是:以一个点 x x x 为中心,向前后截取一段长度为 f r a c frac frac 的数据,对于该段数据用权值函数 w w w 做一个加权的线性回归,记 ( x , y ^ ) (x,\hat{y}) (x,y^) 为该回归线的中心值,其中 y ^ \hat{y} y^ 为拟合后曲线对应值。对于所有的 n n n 个数据点则可以做出 n n n 条加权回归线,每条回归线的中心值的连线则为这段数据的Lowess曲线。

2.2 参数讲解

在这个思路中,能提取出的可调参数则是:
1.长度frac,应该截取多长的作为局部处理,frac 为原数据量的比例;
2.权值函数w,使用什么样的权值函数w合适;
3.迭代次数it,在进行一次局部回归后,是否需要迭代,再次做回归;
4.delta回归间隔,是否真的每个点都需要算一次加权回归,能否隔delta距离算一次,中间没算的用插值替换即可。

2.3 代码实现

基于lowess局部加权回归对周期型波动性数据进行拟合及平滑,实现代码如下:

from statsmodels.nonparametric.smoothers_lowess import lowesssmooth_data = lowess(y, x, frac=0.5, it=3, delta=0.0)))

lowess函数中参数的具体定义如下:

def lowess(endog, exog, frac=2.0/3.0, it=3, delta=0.0, xvals=None, is_sorted=False, missing='drop', return_sorted=True):'''LOWESS (Locally Weighted Scatterplot Smoothing)A lowess function that outs smoothed estimates of endogat the given exog values from points (exog, endog)Parameters----------endog : 1-D numpy arrayThe y-values of the observed pointsexog : 1-D numpy arrayThe x-values of the observed pointsfrac : floatBetween 0 and 1. The fraction of the data usedwhen estimating each y-value.it : intThe number of residual-based reweightingsto perform.delta : floatDistance within which to use linear-interpolationinstead of weighted regression.xvals: 1-D numpy arrayValues of the exogenous variable at which to evaluate the regression.If supplied, cannot use delta.is_sorted : boolIf False (default), then the data will be sorted by exog beforecalculating lowess. If True, then it is assumed that the data isalready sorted by exog. If xvals is specified, then it too must besorted if is_sorted is True.missing : strAvailable options are 'none', 'drop', and 'raise'. If 'none', no nanchecking is done. If 'drop', any observations with nans are dropped.If 'raise', an error is raised. Default is 'drop'.return_sorted : boolIf True (default), then the returned array is sorted by exog and hasmissing (nan or infinite) observations removed.If False, then the returned array is in the same length and the samesequence of observations as the input array.Returns-------out : {ndarray, float}The returned array is two-dimensional if return_sorted is True, andone dimensional if return_sorted is False.If return_sorted is True, then a numpy array with two columns. Thefirst column contains the sorted x (exog) values and the second columnthe associated estimated y (endog) values.If return_sorted is False, then only the fitted values are returned,and the observations will be in the same order as the input arrays.If xvals is provided, then return_sorted is ignored and the returnedarray is always one dimensional, containing the y values fitted atthe x values provided by xvals.'''-----

在statsmodels中,你会发现:
1、权值w函数你是不可调的;
2、在用了delta 之后,插值函数你是不可调的。

参考资料

  • 【算法】局部加权回归(Lowess)

这篇关于局部加权回归(Lowess)算法详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/991836

相关文章

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

C#数据结构之字符串(string)详解

《C#数据结构之字符串(string)详解》:本文主要介绍C#数据结构之字符串(string),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录转义字符序列字符串的创建字符串的声明null字符串与空字符串重复单字符字符串的构造字符串的属性和常用方法属性常用方法总结摘

Java中StopWatch的使用示例详解

《Java中StopWatch的使用示例详解》stopWatch是org.springframework.util包下的一个工具类,使用它可直观的输出代码执行耗时,以及执行时间百分比,这篇文章主要介绍... 目录stopWatch 是org.springframework.util 包下的一个工具类,使用它

Java进行文件格式校验的方案详解

《Java进行文件格式校验的方案详解》这篇文章主要为大家详细介绍了Java中进行文件格式校验的相关方案,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、背景异常现象原因排查用户的无心之过二、解决方案Magandroidic Number判断主流检测库对比Tika的使用区分zip

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

springboot security快速使用示例详解

《springbootsecurity快速使用示例详解》:本文主要介绍springbootsecurity快速使用示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录创www.chinasem.cn建spring boot项目生成脚手架配置依赖接口示例代码项目结构启用s

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

一文详解SpringBoot响应压缩功能的配置与优化

《一文详解SpringBoot响应压缩功能的配置与优化》SpringBoot的响应压缩功能基于智能协商机制,需同时满足很多条件,本文主要为大家详细介绍了SpringBoot响应压缩功能的配置与优化,需... 目录一、核心工作机制1.1 自动协商触发条件1.2 压缩处理流程二、配置方案详解2.1 基础YAML

Python实现无痛修改第三方库源码的方法详解

《Python实现无痛修改第三方库源码的方法详解》很多时候,我们下载的第三方库是不会有需求不满足的情况,但也有极少的情况,第三方库没有兼顾到需求,本文将介绍几个修改源码的操作,大家可以根据需求进行选择... 目录需求不符合模拟示例 1. 修改源文件2. 继承修改3. 猴子补丁4. 追踪局部变量需求不符合很

java中反射(Reflection)机制举例详解

《java中反射(Reflection)机制举例详解》Java中的反射机制是指Java程序在运行期间可以获取到一个对象的全部信息,:本文主要介绍java中反射(Reflection)机制的相关资料... 目录一、什么是反射?二、反射的用途三、获取Class对象四、Class类型的对象使用场景1五、Class