Правильно ли я пишу код для моделей подбора кривой? Линия далеко для каждой модели, кроме линейной регрессии - PullRequest
1 голос
/ 04 апреля 2019

Я очень новичок в программировании на python и могу использовать некоторую поддержку в ответе на этот вопрос.Я написал код проблемы, но мои модели не выглядят корректно.

Ниже приведен вопрос:

Оптимизация - подбор по кривой Для 16 пар цен (какзависимая переменная) и соответствующие потребности (как независимая переменная), используйте инструмент подбора кривой для оценки наилучших подгоночных линейных, экспоненциальных, логарифмических и мощностных кривых.

Ценовой спрос 127 3420 134 3400 136 3250 139 3410 140 3190141 3250 148 2860 149 2830 151 3160 154 2820 155 2780 157 2900 159 2810 167 2580 168 2520 171 2430

Ниже мой код:

from pylab import *
from numpy import *
from numpy.random import *
from scipy.optimize import *
# linear regression
#called in curve fitting model
def linreg(x,a,b):
    return a*x+b

# data

x = [3420, 3400, 3250, 3410, 3190, 3250, 2860, 2830, 3160, 2820, 2780, 2900, 2810, 2580, 2520, 2430]
x = np.asarray(x, dtype=np.float64)
y = [127, 134, 136 ,139, 140, 141, 148, 149, 151, 154, 155, 157, 159, 167, 168, 171]
y = np.asarray(y, dtype=np.float64)

#liner regression
# curve fitting
attributes,variances = curve_fit(linreg,x,y)
# estimated y
y_modeled = x*attributes[0]+attributes[1]
# plot true and modeled results
plot(x,y,'ob',markersize=2)
plot(x,y_modeled,'-r',linewidth=1)
show()

# exponential regression
#called in curve fitting model
def expon(x, a, b, c):
    return a * np.exp(-b * x) + c

#exponential
# curve fitting
attributes,variances = curve_fit(expon,x,y)
# estimated y
y_modeled = x*attributes[0]+attributes[1]
# plot true and modeled results
plot(x,y,'ob',markersize=2)
plot(x,y_modeled,'-r',linewidth=1)
show()


# logarithmic function
def logar(x, p1,p2):
  return p1*np.log(x)+p2
#logarithmic
# curve fitting
attributes,variances = curve_fit(logar,x,y)
# estimated y
y_modeled = x*attributes[0]+attributes[1]
# plot true and modeled results
plot(x,y,'ob',markersize=2)
plot(x,y_modeled,'-r',linewidth=1)
show()

#power curve function? MAybe? 
def powerlaw(x,a,b):
    return a*(x**b)

#power curves
# curve fitting
attributes,variances = curve_fit(powerlaw,x,y)
# estimated y
y_modeled = x*attributes[0]+attributes[1]
# plot true and modeled results
plot(x,y,'ob',markersize=2)
plot(x,y_modeled,'-r',linewidth=1)
show()

Когда яЗапустите модель линейной регрессии, линия соответствует данным.Тем не менее, всякий раз, когда я запускаю другие параметры подгонки кривой к линии, это ПУТЬ выше точек данных.Это совсем не соответствует данным.

Спасибо!Любая помощь будет принята с благодарностью.Наши ТП бастуют, поэтому у меня нет никого, кто мог бы помочь.

1 Ответ

1 голос
/ 04 апреля 2019

Вы не правильно называете модели.Попробуйте это, которые имеют форму "function (x, pointer_to_parameters)"

y_modeled = linreg(x, *attributes)
y_modeled = expon(x, *attributes)
y_modeled = logar(x, *attributes)
y_modeled = powerlaw(x, *attributes)

С ними я получаю отличные графики из вашего кода.

...