Как построить матрицу дизайна в NumPy (для линейной регрессии)? - PullRequest
0 голосов
/ 20 марта 2020

Для этой лабораторной работы мне нужно выбрать 150 значений x из нормального распределения, используя среднее значение 0 и стандартное отклонение 10, затем из значений x построить матрицу проектирования, используя функции {1, x, x ^ 2 }.

Мы должны сэмплировать параметры и затем использовать матрицу дизайна для создания значений y для данных регрессии.

Проблема в том, что моя матрица дизайна не квадратная, а Мур-Пенроуз Pseduoinverse нужны квадратные матрицы, но я не знаю, как заставить это работать, учитывая более раннюю настройку лаборатории?

Это то, что я сделал

#Linear Regression Lab
import numpy as np
import math
data = np.random.normal(0, 10, 150)

design_matrix = np.zeros((150,3))

for i in range(150):
    design_matrix[i][0] = 1
    design_matrix[i][1] = data[i]
    design_matrix[i][2] = pow(data[i], 2)


print("-------------------Design Matrix---------------------")
print("|--------1--------|-------x-------|--------x^2--------|")
print(design_matrix[:20])

#sampling paramters

theta_0 = np.random.uniform(low = -30, high = 20)
theta_1 = np.random.uniform(low = -30, high = 20)
theta_2 = np.random.uniform(low = -30, high = 20)

print(theta_0, theta_1, theta_2)

theta = np.array([theta_0, theta_1, theta_2])

theta = np.transpose(theta)

#moore penrose psuedo inverse
MPpi = np.linalg.pinv(design_matrix) ##problem here

y_values = np.linalg.inv(MPpi)

1 Ответ

0 голосов
/ 22 марта 2020

Не стесняйтесь редактировать этот неполный ответ

После запуска этого кода на Repl я получил следующее сообщение об ошибке

Traceback (most recent call last):
  File "main.py", line 32, in <module>
    y_values = np.linalg.inv(MPpi)
  File "<__array_function__ internals>", line 5, in inv
  File "/home/runner/.local/share/virtualenvs/python3/lib/python3.8/site-packages/numpy/linalg/linalg.py", line 542, in inv
    _assert_stacked_square(a)
  File "/home/runner/.local/share/virtualenvs/python3/lib/python3.8/site-packages/numpy/linalg/linalg.py", line 213, in _assert_stacked_square
    raise LinAlgError('Last 2 dimensions of the array mustbe square')
numpy.linalg.LinAlgError: Last 2 dimensions of the array must be square

Первая ошибка связана с принятием обратного значения MPpi

При просмотре документов кажется, что pinv переключает последние два измерения [например, матрица m x n становится n x m], поэтому нам нужно отформатировать матрицу перед вычислением псевдообратного

Что касается обратного Мора-Пенроуза AKA pinv, эта статья предполагает, что умножение MPpi*data, что даст x_0 {запись от Росса Макасленда}, которая лучше всего подходит для вашей регрессии наименьших квадратов.

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