Почему pcov в optimize.curve_fit является матрицей два на два и какое значение соответствует перехвату - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь понять perr в следующем коде, который представляет собой матрицу с измерениями (2,2). Я ожидал, что это будет матрица с измерениями (1,2). Можете ли вы объяснить, какое значение соответствует наклону, а какое соответствует перехвату. Документация гласит, что диагонали представляют собой отклонения в параметрах (наклон, перехват). Как насчет не диагональных элементов? Что нам сказать?

x= np.arange(10)
y = np.array([2,4,7,8,11,18,20,24,26,28])

def line(x,m,b):   #m and b are parameters
    return m*x+b

pfit,perr = optimize.curve_fit(line,x,y)
error = []
for i in range(len(pfit)):
    gg=np.absolute(perr[i][i])**0.5
    print (gg)

1 Ответ

0 голосов
/ 27 июня 2018

Параметры представлены в результате в том же порядке, в котором их принимает оптимизированная функция. Поскольку строка определяется как line(x, m, b), popt содержит оценки в порядке [m, p].

pcov (или perr в примере), который возвращает curve_fit, является ковариационной матрицей оценочных параметров.

  • Диагональные элементы - это отклонения. Они говорят нам, насколько вероятно изменение параметра или насколько мы уверены в оценке. Большая разница в основном означает, что мы не очень много знаем о параметре; значение, возвращаемое в popt, является наиболее вероятным значением, но даже отдаленные значения также очень вероятны.
  • Недиагональные элементы - это ковариации . Их значение на самом деле скрыто в названии: ко-дисперсия; как переменные изменяются вместе.

Вот что означают различные значения ковариации:

      covariance | two variables are...
     ------------+-----------------------
               0 | not related at all
               1 | exactly the same
              -1 | exactly inverted
 between 0 and 1 | one is likely to be large when the other is also large
between 0 and -1 | one is likely to be large when the other is small

В примере ковариационная матрица равна

[[ 0.025, -0.114],
 [-0.114,  0.723]]

Так что же означает, что ковариация наклона и пересечения равна -0,114? Они связаны: если перехват большой, наклон должен быть меньше, и наоборот.

Графически, если вы перемещаете всю линию вверх, она должна иметь меньший наклон, чтобы быть рядом с точками данных; если вы переместите его вниз, ему нужно больше уклона. enter image description here

Это довольно очевидно в линейной регрессии и поэтому не так полезно; но имейте в виду, что curve_fit может выполнять любую сложную функцию, где зависимость между параметрами не так очевидна. В этом случае это может быть ценной информацией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...