2014-12-03 5 views
3

Я использую numpy.polyfit для получения линейной регрессии: coeffs = np.polyfit (x, y, 1).Ошибка наклона линейной регрессии в numpy

Каков наилучший способ расчета ошибки наклона подгонки с помощью numpy?

+1

Когда вы используете 'polyfit', он возвращает остатки подгонки. Вы можете сделать Chi2 на этом, чтобы получить доброту, которую я предполагаю, это то, что вы ищете. – ebarr

+0

Я ищу абсолютную ошибку, а не доброту. – Mixel

+1

Остатки являются абсолютной ошибкой для каждой точки пригонки. – ebarr

ответ

5

Как уже упоминалось @ebarr в комментариях, вы можете использовать np.polyfit для возврата остатков с помощью аргумента ключевого слова full=True.

Пример:

x = np.array([0.0, 1.0, 2.0, 3.0, 4.0, 5.0]) 
y = np.array([0.0, 0.8, 0.9, 0.1, -0.8, -1.0]) 
z, residuals, rank, singular_values, rcond = np.polyfit(x, y, 3, full=True) 

residuals, то есть сумма наименьших квадратов.

В качестве альтернативы вы можете использовать ключевое слово аргумент cov=True, чтобы получить матрицу ковариации.

Пример:

x = np.array([0.0, 1.0, 2.0, 3.0, 4.0, 5.0]) 
y = np.array([0.0, 0.8, 0.9, 0.1, -0.8, -1.0]) 
z, cov = np.polyfit(x, y, 3, cov=True) 

Тогда диагональные элементы cov являются дисперсии коэффициентов в г, т.е. np.sqrt(np.diag(cov)) дает стандартные отклонения коэффициентов. Вы можете использовать стандартные отклонения для оценки вероятности того, что абсолютная ошибка превысит определенное значение, например. путем вставки стандартных отклонений в uncertainty propagation calculation. Если вы используете, например, 3 * стандартные отклонения в распространении неопределенности, вы вычисляете ошибку, которая не будет превышена в 99,7% случаев.

Последний совет: вам нужно выбрать, хотите ли вы: full=True или cov=True. cov=True работает только тогда, когда full=False (по умолчанию) или наоборот.

+0

Когда я пытаюсь реализовать это решение, я получаю отрицательные значения по диагонали ковариационной матрицы. –

Смежные вопросы