为什么 optimize.curve_fit 不适用于较小的数据集?
Why does the optimize.curve_fit not work on smaller datasets?
我对数据 H2O
和 CO2
进行了分段线性拟合。它适用于 288
个数据点的数据集,但不适用于 144
个数据点的数据集。我的代码如下:
#Piecewiselinear fit
x = np.array(H2O)
y = np.array(CO2)
p , e = optimize.curve_fit(piecewise_linear, x, y)
xd = np.linspace(0, 1, 1000)
与144
个数据点的数据集,唯一的区别出现在运行optimize.curve_fit
时。我收到以下消息 OptimizeWarning: Covariance of the parameters could not be estimated category=OptimizeWarning
。这些是不同的情节:
Correct fit (288 points) and Incorrect fit (144 points)
出了什么问题?我该如何解决这个问题?
我最终改变了常见的方法
def piecewise_linear(x, x0, y0, k1, k2):
return np.piecewise(x, [x < x0], [lambda x:k1*x + y0-k1*x0, lambda x:k2*x + y0-k2*x0])
到
my_pwlf = pwlf.PiecewiseLinFit(x, y)
breaks = my_pwlf.fit(2) #if you want multiple breakpoints change the number in the bracket.
print(breaks)
x_hat = np.linspace(x.min(), x.max(), 100)
y_hat = my_pwlf.predict(x_hat)
据此,我也得到了断点的x值。
我对数据 H2O
和 CO2
进行了分段线性拟合。它适用于 288
个数据点的数据集,但不适用于 144
个数据点的数据集。我的代码如下:
#Piecewiselinear fit
x = np.array(H2O)
y = np.array(CO2)
p , e = optimize.curve_fit(piecewise_linear, x, y)
xd = np.linspace(0, 1, 1000)
与144
个数据点的数据集,唯一的区别出现在运行optimize.curve_fit
时。我收到以下消息 OptimizeWarning: Covariance of the parameters could not be estimated category=OptimizeWarning
。这些是不同的情节:
Correct fit (288 points) and Incorrect fit (144 points)
出了什么问题?我该如何解决这个问题?
我最终改变了常见的方法
def piecewise_linear(x, x0, y0, k1, k2):
return np.piecewise(x, [x < x0], [lambda x:k1*x + y0-k1*x0, lambda x:k2*x + y0-k2*x0])
到
my_pwlf = pwlf.PiecewiseLinFit(x, y)
breaks = my_pwlf.fit(2) #if you want multiple breakpoints change the number in the bracket.
print(breaks)
x_hat = np.linspace(x.min(), x.max(), 100)
y_hat = my_pwlf.predict(x_hat)
据此,我也得到了断点的x值。