首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python SciPy UnivariateSpline vs R smooth.spline

Python SciPy UnivariateSpline vs R smooth.spline
EN

Stack Overflow用户
提问于 2019-06-19 20:28:38
回答 1查看 1.4K关注 0票数 2

我正在将一个用R编写的脚本移植到Python上。在R中,我使用smooth.spline,在Python中,我使用SciPy UnivariateSpline。它们不会产生相同的结果(即使它们都基于三次样条线方法)。有没有一种方法或替代UnivariateSpline的方法,使Python样条返回与R相同的样条线?

我是个数学家。我理解样条的一般概念。但没有详细介绍它们在Python或R中的实现。

下面是用R编写的代码,然后是Python。两者的输入数据是相同的。

以下是输入数据:

代码语言:javascript
复制
x =  0.0,  0.1,  0.2,  0.3,  0.4,  0.5,  0.6,  0.7,  0.8,  0.9,  1.0
y =   -1,    1,    1,   -1,    1,    0,   .5,   .5,   .4,   .5,   -1

这是R代码

代码语言:javascript
复制
x = seq(0,1, by = .1); 
y = c(-1,1,1, -1,1,0, .5,.5,.4,  .5, -1);
spline_xy = smooth.spline(x,y)
predict(spline_xy,x)

以下哪项输出:

代码语言:javascript
复制
$x
 [1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0

$y
 [1]  0.120614583  0.170800975  0.210954680  0.238032338  0.253672155
 [6]  0.253684815  0.236432643  0.200264536  0.145403302  0.074993797
[11] -0.004853825

以下是Python代码

代码语言:javascript
复制
import numpy as np
from scipy.interpolate import UnivariateSpline
x = np.linspace(0, 1, num = 11, endpoint=True)    
y = np.array([-1,1,1, -1,1,0, .5,.5,.4,  .5, -1]) 
spline_xy = UnivariateSpline(x,y)
print('x =', x)
print('ysplined =',spline_xy(x))

以下哪项输出:

代码语言:javascript
复制
x = [0.  0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1. ]

ysplined = 
[-0.26433566 -0.02587413  0.18857809 0.36585082  0.49277389  
  0.55617716 0.54289044  0.43974359  0.23356643 -0.08881119 
 -0.54055944]

我希望R $y和Python ysplined的输出是相同的。但事实并非如此。

如有任何帮助,例如如何设置参数或解释,将不胜感激!提前谢谢你。

EN

回答 1

Stack Overflow用户

发布于 2019-06-19 21:59:29

在我看来,这些是不同的平滑方法。

R中的smooth.spline是一种“平滑样条”,它是一种过度参数化的自然样条(每个数据点上的节点,内部的三次样条,线性外推),并使用惩罚最小二乘来选择参数。您可以阅读帮助页面,了解如何计算惩罚的详细信息。

另一方面,这里的文档显示了Python样条线:https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.UnivariateSpline.html是一个回归样条,按最小二乘拟合,不会有任何损失。它似乎自适应地选择结的数量。

这些是完全不同的算法,我不期望它们能给出相同的结果。我不知道是否有一个R包使用了和Python一样的结点自适应选择。答案是:https://stackoverflow.com/a/55481248/2554330声称引用了Python语言中的一个自然平滑样条实现,但我不知道它是否与R的实现相匹配。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56667657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档