局部多项式回归

localreg的Python项目详细描述


https://travis-ci.com/sigvaldm/localreg.svg?branch=masterhttps://coveralls.io/repos/github/sigvaldm/localreg/badge.svg?branch=masterhttps://img.shields.io/pypi/pyversions/localreg.svg

通过局部多项式回归对噪声数据序列进行平滑(包括黄土/黄土)。

安装

使用pip(首选方法)从PyPI安装:

pip install localreg

或者下载github存储库https://github.com/sigvaldm/localreg.git并运行:

python setup.py install

简介

使用以下函数执行局部多项式回归:

localreg(x, y, x0=None, degree=2, kernel=epanechnikov, width=1, frac=None)

其中xy分别是要平滑的数据的x和y值。 x0是计算平滑值的x值。默认情况下,这与x相同,但请注意,运行时间与x0的大小成正比,因此,如果您有许多数据点,可能值得您自己指定较小的x0

局部多项式回归通过将次数为degree的多项式拟合到希望计算平滑值(x0)附近的数据点,然后在x0处计算该多项式来工作。对于degree=0,它减少为加权移动平均值。权重函数或内核kernel用于为x0附近的数据点分配更高的权重。kernel的参数是一个参数的纯函数,因此可以定义自定义内核。以下内核已经实现:

  • rectangular
  • triangular
  • epanechnikov
  • biweight
  • triweight
  • tricube
  • gaussian(非紧凑型)
  • cosine
  • logistic(非压缩)
  • sigmoid(非紧凑型)
  • silverman(非紧凑型)

使一个内核向边缘逐渐变细,即不是矩形内核,会导致输出平滑。

内核的宽度可以通过参数width进行缩放,该参数实际上是具有紧凑支持的内核宽度的一半。对于非紧支撑的核,如高斯核,它只是一个标度参数,类似于标准差。拥有更宽的内核并包含更多的数据点会降低噪声(方差),但会增加偏差,因为回归无法在比内核窗口窄得多的范围内捕获变量。

对于间隔不均的数据点,具有固定宽度意味着窗口中包含的数据点数量可变,因此噪声/方差也可变。但是,偏差是固定的。使用变化的宽度,使得包含固定数量的数据点,而不是导致恒定的噪声/方差,而是固定的偏差这可以通过指定frac来实现,它将否决width,并指定要包含在内核宽度中的所有数据点的分数。

示例用法

下面的示例展示了几个有趣的功能:

import numpy as np
import matplotlib.pyplot as plt
from localreg import *

np.random.seed(1234)
x = np.linspace(1.5, 5, 2000)
yf = np.sin(x*x)
y = yf + 0.5*np.random.randn(*x.shape)

y0 = localreg(x, y, degree=0, kernel=tricube, width=0.3)
y1 = localreg(x, y, degree=1, kernel=tricube, width=0.3)
y2 = localreg(x, y, degree=2, kernel=tricube, width=0.3)

plt.plot(x, y, '+', markersize=0.6, color='gray')
plt.plot(x, yf, label='Ground truth ($\sin(x^2)$)')
plt.plot(x, y0, label='Moving average')
plt.plot(x, y1, label='Local linear regression')
plt.plot(x, y2, label='Local quadratic regression')
plt.legend()
plt.show()
examples/basic.png

如果边缘附近的数据中有一个斜率,那么简单的移动平均值将无法考虑该斜率,如图所示,因为大多数数据点将位于x0的右侧(或左侧)。局部线性回归(或高阶回归)可以弥补这一点。我们还发现,随着振荡频率的增加,局部线性回归无法跟上,因为与窗口相比,变化变得太小一个较小的窗口会有帮助,但代价是回归过程中会有更多的噪声另一个选择是将度数增加到2。二次回归更适合填谷填山。但是,与核相比,二次多项式的变化太快,也会开始失败。

值得注意的是,更高的阶数还伴随着方差的增加,这可以表现为小的虚假振荡因此,虽然localreg支持任意度数,但高于2的情况并不常见

[Hastie]
  1. Hastie, R. Tibshirani and J. Friedman The Elements of Statistical Learing – Data Mining, Inference, and Prediction, Second Edition, Springer, 2017.
[Cleveland]
  1. Cleveland Robust Locally Weighted Regression and Smoothing Scatterplots, Journal of the Americal Statistical Associations, 74, 1979.

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java有没有工具可以将zephyr转换为velocity模板?   java在安卓 studio中从JSON响应中获取值   jvm如何在Java中设计一个好的permgen空间字符串?   java如何防止Rest webservice使用被盗令牌进行身份验证   java无法遍历列表JSTL   找不到用于ResourceServerTokenServices的java Bean SpringSecurityOauth2   java子字符串替换问题   爪哇玻璃鱼3。十、 以编程方式处理任意HTTPSession的终止   java如何检查输入是否为整数,并在最后添加一个命令来重新启动while循环?   引发java ical4j 1.0.6不可解析日期异常   Java等价于Delphi的DBCtrlGrid?   如果发生错误,java将查找下一个预期标记ANTLR 3   java自打开应用程序(创建锁屏)   java为什么netty有自己的ConcurrentHashMap?   Gradle任务中的java拉取和运行依赖项   继承与Java继承的混淆   java使用shell脚本中的版本执行jar   java我无法让Sqlite数据库与带有Maven的JavaFX应用程序IDE Eclipse包正确通信   java控制台日志未通过org打印。阿帕奇。hadoop。mapreduce。作业的waitForCompletion(true)方法   JAVAlang.NoSuchMethodError:apachestorm螺栓中的spring getrequest