【问题标题】:Error non-linear-regression python curve-fit误差非线性回归 python 曲线拟合
【发布时间】:2021-01-16 13:07:35
【问题描述】:

大家好,我想用曲线拟合在 python 中进行非线性回归 这是我的代码:

#fit a fourth degree polynomial to the economic data
from numpy import arange
from scipy.optimize import curve_fit
from matplotlib import pyplot
import math

x = [17.47,20.71,21.08,18.08,17.12,14.16,14.06,12.44,11.86,11.19,10.65]
y = [5,35,65,95,125,155,185,215,245,275,305]

# define the true objective function
def objective(x, a, b, c, d, e):
    return ((a)-((b)*(x/3-5)))+((c)*(x/305)**2)-((d)*(math.log(305))-math.log(x))+((e)*(math.log(305)-(math.log(x))**2))

popt, _ = curve_fit(objective, x, y)
# summarize the parameter values
a, b, c, d, e = popt
# plot input vs output
pyplot.scatter(x, y)
# define a sequence of inputs between the smallest and largest known inputs
x_line = arange(min(x), max(x), 1)
# calculate the output for the range
y_line = objective(x_line, a, b, c, d, e)
# create a line plot for the mapping function
pyplot.plot(x_line, y_line, '--', color='red')
pyplot.show()

这是我的错误:

Traceback(最近一次调用最后一次): 文件“C:\Users\Fahmi\PycharmProjects\pythonProject\main.py”,第 16 行,在 popt,_ = curve_fit(目标,x,y) 文件“C:\Users\Fahmi\PycharmProjects\pythonProject\venv\lib\site-packages\scipy\optimize\minpack.py”,第 784 行,在 curve_fit res = leastsq(func, p0, Dfun=jac, full_output=1, **kwargs) 文件“C:\Users\Fahmi\PycharmProjects\pythonProject\venv\lib\site-packages\scipy\optimize\minpack.py”,第 410 行,至少 sq 形状,dtype = _check_func('leastsq','func',func,x0,args,n) _check_func 中的文件“C:\Users\Fahmi\PycharmProjects\pythonProject\venv\lib\site-packages\scipy\optimize\minpack.py”,第 24 行 res = atleast_1d(thefunc(((x0[:numinputs],) + args))) func_wrapped 中的文件“C:\Users\Fahmi\PycharmProjects\pythonProject\venv\lib\site-packages\scipy\optimize\minpack.py”,第 484 行 return func(xdata, params) - ydata 文件“C:\Users\Fahmi\PycharmProjects\pythonProject\main.py”,第 13 行,目标 返回 ((a)-((b)(x/3-5)))+((c)(x/305)**2)-((d)( math.log(305))-math.log(x))+((e)(math.log(305)-(math.log(x))**2)) TypeError: 只有 size-1 的数组可以转换为 Python 标量

感谢之前

【问题讨论】:

    标签: python codeigniter continuous-integration data-science non-linear-regression


    【解决方案1】:

    这是数学库的一个已知问题。只需使用 numpy 即可解决您的问题,因为 numpy 函数支持标量和数组。

    #fit a fourth degree polynomial to the economic data
    import numpy as np
    from scipy.optimize import curve_fit
    import matplotlib.pyplot as plt
    
    x = [17.47,20.71,21.08,18.08,17.12,14.16,14.06,12.44,11.86,11.19,10.65]
    y = [5,35,65,95,125,155,185,215,245,275,305]
    
    # define the true objective function
    def objective(x, a, b, c, d, e):
        return ((a)-((b)*(x/3-5)))+((c)*(x/305)**2)-((d)*(np.log(305))-np.log(x))+((e)*(np.log(305)-(np.log(x))**2))
    
    popt, _ = curve_fit(objective, x, y)
    # summarize the parameter values
    a, b, c, d, e = popt
    # plot input vs output
    plt.scatter(x, y)
    # define a sequence of inputs between the smallest and largest known inputs
    x_line = np.arange(np.min(x), np.max(x), 1)
    # calculate the output for the range
    y_line = objective(x_line, a, b, c, d, e)
    # create a line plot for the mapping function
    plt.plot(x_line, y_line, '--', color='red')
    plt.show()
    

    【讨论】:

      猜你喜欢
      • 2016-11-13
      • 2019-05-15
      • 2019-01-14
      • 2021-07-23
      • 2020-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-17
      相关资源
      最近更新 更多