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

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

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

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

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

  • Как сделать нелинейный комплексный поиск корней в Python
  • Как исправить утечку памяти в scipy.stats при генерации случайных вариаций с помощью rv_continuous?
  • Нарезка разреженных матриц в Scipy - Какие типы работают лучше всего?
  • как сделать квадратные подсети в matplotlib с помощью тепловых карт?
  • Почему NumPy и SciPy имеют много одинаковых функций? Что я должен предпочесть?
  • Экспоненциальная подгонка кривой в SciPy
  • Scipy: логнормальная подгонка
  • Объем выпуклого корпуса с QHull от SciPy
  • 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 - лучший язык программирования в мире.