Как рассчитать дисперсию методом наименьших квадратов, если линия регрессии расположена вертикально к оси x - PullRequest
0 голосов
/ 18 октября 2018

У меня есть некоторые данные в 2D плоскости.Я хочу рассчитать их дисперсию, но линия регрессии может быть вертикальной по отношению к оси X, как правильно получить дисперсию?

1 Ответ

0 голосов
/ 18 октября 2018

Если вы подгоняете линию к данным, но все в порядке, если она вертикальная, это выглядит менее похоже на линейную регрессию (которая предполагает, что y является функцией x) и больше похоже на анализ главных компонентов .Что можно сделать с помощью sklearn следующим образом, вычисляя дисперсию по пути.

import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA

data = np.random.multivariate_normal([1, 1], [[0.2, 0], [0, 4]], size=100)
pca = PCA(n_components=2)
pca.fit(data)
print('Residual variance', pca.explained_variance_[1]) 

Я подгоняю здесь два компонента, которые вместе объясняют всю дисперсию, поскольку данные являются 2D.Первый компонент - это линия, которая занимает место линии регрессии в этой модели.Во-вторых, где остатки, так что остаточная дисперсия исходит оттуда.Визуализация:

line_direction = pca.components_[0]
M = np.abs(data).max()
t = np.linspace(-M, M)
center = data.mean(axis=0)
line = line_direction*t[:, None] + center
plt.plot(line[:, 0], line[:, 1], 'r')
plt.plot(data[:, 0], data[:, 1], '.')
plt.axes().set_aspect('equal', 'datalim')
plt.show()

Смоделированные данные являются случайными, но они могут выглядеть следующим образом:

pca

Остаточная дисперсия 0,23184791439896069

Это отклонение в направлении, перпендикулярном выбранной линии, а не в вертикальном направлении (что здесь не подходит).

Похожие: Всего наименьших квадратов

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