Понимание наименее квадратной функции scipy с IRLS

У меня проблемы с пониманием того, как эта функция работает.

a, b = scipy.linalg.lstsq(X, w*signal)[0] 

Я знаю, что сигнал – это массив, представляющий сигнал, а в настоящее время w – это просто [1,1,1,1,1...]

Как я должен манипулировать X или w чтобы имитировать взвешенные наименьшие квадраты или итеративно редуцированные наименьшие квадраты?

2 Solutions collect form web for “Понимание наименее квадратной функции scipy с IRLS”

Если вы используете X и y с sqrt (весом), вы можете рассчитать взвешенные наименьшие квадраты. Вы можете получить формулу по следующей ссылке:

http://en.wikipedia.org/wiki/Linear_least_squares_%28mathematics%29#Weighted_linear_least_squares

вот пример:

Подготовьте данные:

 import numpy as np np.random.seed(0) N = 20 X = np.random.rand(N, 3) w = np.array([1.0, 2.0, 3.0]) y = np.dot(X, w) + np.random.rand(N) * 0.1 

МНК:

 from scipy import linalg w1 = linalg.lstsq(X, y)[0] print w1 

вывод:

 [ 0.98561405 2.0275357 3.05930664] 

WLS:

 weights = np.linspace(1, 2, N) Xw = X * np.sqrt(weights)[:, None] yw = y * np.sqrt(weights) print linalg.lstsq(Xw, yw)[0] 

вывод:

 [ 0.98799029 2.02599521 3.0623824 ] 

Проверить результат по статистическим моделям:

 import statsmodels.api as sm mod_wls = sm.WLS(y, X, weights=weights) res = mod_wls.fit() print res.params 

вывод:

 [ 0.98799029 2.02599521 3.0623824 ] 

Создайте диагональную матрицу W из элементарных квадратных корней w . Тогда я думаю, что вы просто хотите:

 scipy.linalg.lstsq(np.dot(W, X), np.dot(W*signal)) 

Следуя http://en.wikipedia.org/wiki/Linear_least_squares_(mathematics)#Weighted_linear_least_squares

Python - лучший язык программирования в мире.