局部加权回归(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

相关文章

一文详解Java异常处理你都了解哪些知识

《一文详解Java异常处理你都了解哪些知识》:本文主要介绍Java异常处理的相关资料,包括异常的分类、捕获和处理异常的语法、常见的异常类型以及自定义异常的实现,文中通过代码介绍的非常详细,需要的朋... 目录前言一、什么是异常二、异常的分类2.1 受检异常2.2 非受检异常三、异常处理的语法3.1 try-

Java中的@SneakyThrows注解用法详解

《Java中的@SneakyThrows注解用法详解》:本文主要介绍Java中的@SneakyThrows注解用法的相关资料,Lombok的@SneakyThrows注解简化了Java方法中的异常... 目录前言一、@SneakyThrows 简介1.1 什么是 Lombok?二、@SneakyThrows

Java中字符串转时间与时间转字符串的操作详解

《Java中字符串转时间与时间转字符串的操作详解》Java的java.time包提供了强大的日期和时间处理功能,通过DateTimeFormatter可以轻松地在日期时间对象和字符串之间进行转换,下面... 目录一、字符串转时间(一)使用预定义格式(二)自定义格式二、时间转字符串(一)使用预定义格式(二)自

Redis Pipeline(管道) 详解

《RedisPipeline(管道)详解》Pipeline管道是Redis提供的一种批量执行命令的机制,通过将多个命令一次性发送到服务器并统一接收响应,减少网络往返次数(RTT),显著提升执行效率... 目录Redis Pipeline 详解1. Pipeline 的核心概念2. 工作原理与性能提升3. 核

Python正则表达式语法及re模块中的常用函数详解

《Python正则表达式语法及re模块中的常用函数详解》这篇文章主要给大家介绍了关于Python正则表达式语法及re模块中常用函数的相关资料,正则表达式是一种强大的字符串处理工具,可以用于匹配、切分、... 目录概念、作用和步骤语法re模块中的常用函数总结 概念、作用和步骤概念: 本身也是一个字符串,其中

Nginx location匹配模式与规则详解

《Nginxlocation匹配模式与规则详解》:本文主要介绍Nginxlocation匹配模式与规则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、环境二、匹配模式1. 精准模式2. 前缀模式(不继续匹配正则)3. 前缀模式(继续匹配正则)4. 正则模式(大

Android实现在线预览office文档的示例详解

《Android实现在线预览office文档的示例详解》在移动端展示在线Office文档(如Word、Excel、PPT)是一项常见需求,这篇文章为大家重点介绍了两种方案的实现方法,希望对大家有一定的... 目录一、项目概述二、相关技术知识三、实现思路3.1 方案一:WebView + Office Onl

Java实现优雅日期处理的方案详解

《Java实现优雅日期处理的方案详解》在我们的日常工作中,需要经常处理各种格式,各种类似的的日期或者时间,下面我们就来看看如何使用java处理这样的日期问题吧,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言一、日期的坑1.1 日期格式化陷阱1.2 时区转换二、优雅方案的进阶之路2.1 线程安全重构2

Java中的JSONObject详解

《Java中的JSONObject详解》:本文主要介绍Java中的JSONObject详解,需要的朋友可以参考下... Java中的jsONObject详解一、引言在Java开发中,处理JSON数据是一种常见的需求。JSONObject是处理JSON对象的一个非常有用的类,它提供了一系列的API来操作J

HTML5中的Microdata与历史记录管理详解

《HTML5中的Microdata与历史记录管理详解》Microdata作为HTML5新增的一个特性,它允许开发者在HTML文档中添加更多的语义信息,以便于搜索引擎和浏览器更好地理解页面内容,本文将探... 目录html5中的Mijscrodata与历史记录管理背景简介html5中的Microdata使用M