Линейная регрессия и создание данных =+
У меня возникла проблема в записных книжках 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
.