OptimizeWarning: не удалось оценить ковариацию параметров — что это на самом деле означает?

#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. Может ли это быть причиной?