局部多项式回归

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将JSON转换为哈希映射   java如何通过使用MapStruct从源对象复制值来填充目标对象内部的映射?   注入泛型类型为@InjectGuice的类时发生java错误   字符串如何在JavaIDE中导入基本符号   在Java中将JSON转换为List<List<String>>   java Java9 HttpClient SSLHandshakeException   java jOOQ代码生成器   java如何调整图标(图像按钮),使其不会放大?   java我可以在使用Eclipse时安装2个或更多Android SDK吗   sqlite Java实现DAO   如何解决此错误?“java.lang.NoSuchFieldError:org.apache.http.conn.ssl.SSLConnectionSocketFactory上的实例。<clinit>。”   java Maven:将基于OSP的zip文件解压缩到WEBINF/lib   java如何在每次调用函数时获取当前gps位置?