Ошибка наклона линейной регрессии в numpy

Я использую numpy.polyfit, чтобы получить линейную регрессию: coeffs = np.polyfit (x, y, 1).

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


person mikael    schedule 03.12.2014    source источник
comment
Когда вы используете polyfit, он возвращает остатки соответствия. Вы можете выполнить Chi2 на этом, чтобы получить хорошее соответствие, которое, как я полагаю, именно то, что вы ищете.   -  person ebarr    schedule 04.12.2014
comment
Я ищу абсолютную ошибку, а не добро.   -  person mikael    schedule 04.12.2014
comment
Остатки - это абсолютная ошибка для каждой точки подбора.   -  person ebarr    schedule 04.12.2014


Ответы (1)


Как уже упоминал @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 - это дисперсии коэффициентов по z, то есть np.sqrt(np.diag(cov)) дает вам стандартные отклонения коэффициентов. Вы можете использовать стандартные отклонения для оценки вероятности того, что абсолютная ошибка превышает определенное значение, например вставив стандартные отклонения в расчет распространения неопределенности. Если вы используете, например, 3 * стандартные отклонения в распространении неопределенности, вы вычисляете ошибку, которая не будет превышена в 99,7% случаев.

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

person jkalden    schedule 04.12.2014
comment
Когда я пытаюсь реализовать это решение, я получаю отрицательные значения по диагонали ковариативной матрицы. - person Michael Molter; 15.10.2016