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

相关文章

Spring IoC 容器的使用详解(最新整理)

《SpringIoC容器的使用详解(最新整理)》文章介绍了Spring框架中的应用分层思想与IoC容器原理,通过分层解耦业务逻辑、数据访问等模块,IoC容器利用@Component注解管理Bean... 目录1. 应用分层2. IoC 的介绍3. IoC 容器的使用3.1. bean 的存储3.2. 方法注

MySQL 删除数据详解(最新整理)

《MySQL删除数据详解(最新整理)》:本文主要介绍MySQL删除数据的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、前言二、mysql 中的三种删除方式1.DELETE语句✅ 基本语法: 示例:2.TRUNCATE语句✅ 基本语

Python内置函数之classmethod函数使用详解

《Python内置函数之classmethod函数使用详解》:本文主要介绍Python内置函数之classmethod函数使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 类方法定义与基本语法2. 类方法 vs 实例方法 vs 静态方法3. 核心特性与用法(1编程客

Python函数作用域示例详解

《Python函数作用域示例详解》本文介绍了Python中的LEGB作用域规则,详细解析了变量查找的四个层级,通过具体代码示例,展示了各层级的变量访问规则和特性,对python函数作用域相关知识感兴趣... 目录一、LEGB 规则二、作用域实例2.1 局部作用域(Local)2.2 闭包作用域(Enclos

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

Java内存分配与JVM参数详解(推荐)

《Java内存分配与JVM参数详解(推荐)》本文详解JVM内存结构与参数调整,涵盖堆分代、元空间、GC选择及优化策略,帮助开发者提升性能、避免内存泄漏,本文给大家介绍Java内存分配与JVM参数详解,... 目录引言JVM内存结构JVM参数概述堆内存分配年轻代与老年代调整堆内存大小调整年轻代与老年代比例元空

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四

mysql表操作与查询功能详解

《mysql表操作与查询功能详解》本文系统讲解MySQL表操作与查询,涵盖创建、修改、复制表语法,基本查询结构及WHERE、GROUPBY等子句,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随... 目录01.表的操作1.1表操作概览1.2创建表1.3修改表1.4复制表02.基本查询操作2.1 SE

MySQL中的锁机制详解之全局锁,表级锁,行级锁

《MySQL中的锁机制详解之全局锁,表级锁,行级锁》MySQL锁机制通过全局、表级、行级锁控制并发,保障数据一致性与隔离性,全局锁适用于全库备份,表级锁适合读多写少场景,行级锁(InnoDB)实现高并... 目录一、锁机制基础:从并发问题到锁分类1.1 并发访问的三大问题1.2 锁的核心作用1.3 锁粒度分