Линейная регрессия и создание данных =+

У меня возникла проблема в записных книжках Jupiter для кодирования с использованием python. Эта проблема касается линейной регрессии. Это так:

1: Линейная регрессия В этой записной книжке мы сгенерируем данные из линейной функции: =+, а затем решим для ̂, используя OLS (обычный метод наименьших квадратов) и градиентный спуск.

Вопрос 1.1: Сгенерировать данные: =+ Здесь мы предполагаем ≈(,)=+ где линейно с аддитивным шумом. Ваша функция должна иметь следующие свойства:

вывести y как np.array с shape (M,1). generate_linear_y должен работать для любых произвольных x, b и eps, пока они являются соответствующими размерами, не используйте for-loop для вычисления каждого y[i] отдельно, так как это будет очень медленно для больших M и N. Вместо этого вы должны использовать многочисленную линейную алгебру.


Они ожидают, что мы напишем следующий код:

def generate_linear_y(X,b):
""" Write a function that generates m data points from inputs X and b

Parameters
----------
X :   numpy.ndarray
      x.shape must be (M,N)
      Each row of `X` is a single data point of dimension N
      Therefore `X` represents M data points

b :   numpy.ndarray
      b.shape must be (N,1)
      Each element of `b` is a value of beta such that b=[[b1][b2]...[bN]]


Returns
-------
y :   numpy.ndarray
      y.shape = (M,1)
      y[i] = X[i]b
"""

Может ли кто-нибудь помочь мне, потому что я полностью запутался! Я даже не осознавал, что то, что я делаю, требует кодирования массива на Python, с которым я всегда борюсь! Пожалуйста помоги!

1 ответ

Решение

Мне это кажется прямым умножением матриц. В NumPy это реализовано с помощью оператора умножения матриц.@ (он же np.matmul).

Для генерации случайного шума вы можете использовать функции из numpy.random, более вероятный random_sample или standard_normal. Если вы хотите сделать это наиболее правильным способом, вы можете создать генератор случайных чисел с помощью default_rng, затем используйте, например, rng.standard_normal.

Другие вопросы по тегам