Yor*_*ian 3 python numpy scipy non-linear-regression
我有两组数据,我想找到其中的相关性。尽管数据相当分散,但存在明显的关系。我目前使用 numpy polyfit (第 8 阶),但该行有一些“摆动”(特别是在开头和结尾),这是不合适的。其次,我认为线条开始处的拟合效果不是很好(曲线应该稍微陡一些。
如何通过这些数据点获得最适合的“样条线”?
我当前的代码:
# fit regression line
regressionLineOrder = 8
regressionLine = np.polyfit(data['x'], data['y'], regressionLineOrder)
p = np.poly1d(regressionLine)
Run Code Online (Sandbox Code Playgroud)
看看 @MatthewDrury 的回答:为什么在多项式回归中使用正则化而不是降低阶数?。这简直太棒了而且恰到好处。最有趣的一点是在最后,当他开始谈论使用自然三次样条来代替 10 次正则化多项式来拟合回归时。您可以使用 的实现scipy.interpolate.CubicSpline来完成非常类似的事情。scipy.interpolate类似方法中包含大量其他样条方法的类。
这是一个简单的例子:
from scipy.interpolate import CubicSpline
cs = CubicSpline(data['x'], data['y'])
x_range = np.arange(x_min, x_max, some_step)
plt.plot(x_range, cs(x_range), label='Cubic Spline')
Run Code Online (Sandbox Code Playgroud)