#python #pandas #numpy #scipy
#python #панды #numpy #scipy
Вопрос:
Я пытаюсь подогнать кривую / функцию к набору 2D точек (x, y).
Я использую sp.optimize.curve_fit
для этой цели.
Я пытаюсь подогнать эту целевую функцию к своим данным.
def objective_f(x, a1, a2, a3, a4, a5, b1, b2, b3, b4, b5, c):
s1 = np.log(x 1.0)
s2 = (x 1.0)
s3 = np.log(x 1.0) * (x 1.0)
s4 = (x 1.0)*(x 1.0)
s5 = np.exp ( (x 1.0) / 1e8 )
return a1 * s1 a2 * s2 a3 * s3 a4 * s4 a5 * s5 b1 / s1 b2 / s2 b3 / s3 b4 / s4 b5 / s5 c
Я делаю это с помощью этого простого вызова:
popt, _ = sp.optimize.curve_fit(objective_f, x, y)
Здесь x
и y
просто взяты из 2 столбцов существующего pandas DataFrame
следующим образом:
x = df2['population'].astype('float64').values
y = df2['budget'].astype('float64').values
Параметры, которые я получаю обратно, кажутся нормальными и достаточно хорошо оценивают предоставленные данные.
Но я продолжаю получать это предупреждение
minpack.py:829: OptimizeWarning: Covariance of the parameters could not be estimated category=OptimizeWarning)
Я поискал в Google и нашел пару страниц, но ни одна из них, похоже, не объясняет, о чем идет речь.
Почему я получаю это предупреждение?
Является ли это предупреждение чем-то, о чем я должен беспокоиться?
Комментарии:
1. можете ли вы предоставить данные, x, y?
2. обратите внимание, что термины в вашей целевой функции могут достигать бесконечности (например
log(0)
, ). Вероятно, это источник.3. …и термин 1 / x. Если вы добавили некоторые значения epsilon, например, s1 ->
eps np.log(x 1.0)
so, это не будет равно нулю, это предупреждение, скорее всего, исчезнет.4. Мои Xs — это целые числа> = 30000 и <= 4 миллиона, поэтому они не могут перейти в 0, даже если бы могли, я добавляю туда 1, прежде чем записывать журнал. Но возможно, что у меня есть несколько Y для одного X. Может ли это быть причиной?