Делаем код быстрым и эффективным

В физике векторы часто представляют в виде стрелок, указывающих в пространстве, представляющих как направление, так и величину. В математике векторы выходят за пределы физического пространства и служат мощными инструментами для представления многомерных концепций. В информатике векторы принимают форму упорядоченных списков чисел.

Теперь давайте углубимся в значение векторизации в контексте линейной регрессии. Векторизация играет решающую роль в оптимизациикода для моделей линейной регрессии. Он использует подход, отличный от итеративных методов, предлагая более эффективное выполнение. Используя возможности линейной алгебры и матричных операций, векторизация обеспечивает одновременное обновление параметров, что приводит к значительному ускорению выполнения кода.

Векторизация

Благодаря векторизации линейная регрессия становится не просто математическим инструментом, но и вычислительной мощью, способствующей быстрому и эффективному обучению модели.

Формула множественной линейной регрессии с несколькими признаками:

Давайте разберем формулу множественной линейной регрессии с «n» признаками, каждый из которых представлен «Xj», где «j» обозначает конкретный признак. В данном контексте:

  • «vector-x^(i)» представляет список всех функций в «i-м» месте в наших обучающих примерах.
  • «Xj^(i)» соответствует значению признака «j» в «i-х» обучающих данных.

Например, если у нас есть четыре объекта, наша формула будет выглядеть так: f(X) = a1 X1 + a2 X2 + a3 X3 + a4 X4 + b

При работе с n-объектами формула принимает следующий вид: f(vector-X) = a1 X1 + a2 X2 + … + an Xn + b

Здесь у нас есть два параметра, представленные как «a» и «b»:

  • «vector-a» состоит из значений [a1, a2, a3, …, an].
  • «b» – это одно число.
  • «vector-X» включает значения [X1, X2, X3, …, Xn].

Теперь давайте воспользуемся скалярным произведением, чтобы упростить эту формулу: f(vector-X) = вектор-a. вектор-X + b

Проще говоря, скалярное произведение двух векторов представляет собой сумму произведений их соответствующих компонентов. Эта упрощенная формула делает множественную линейную регрессию более понятной и эффективной для расчетов моделей.

Применение векторизации:

Рассмотрим «n = 3» и «b = 4».

a = np.array([a1, a2, a3])
b = 4
X = np.array([X1, X2, X3])

Здесь мы преобразовали «a» и «X» в векторы. Теперь, применяя формулу:

f = np.dot(a, X) + b  # Vectorization implementation using the dot product

Если имеется ’n’ количество точек обучающих данных, без векторизации, это будет выглядеть так:

for j in range(0, n):
    f = f + a[j] * X[j]

Где каждая итерация от ’t[0]’ до ‘t[n]’ будет выполняться:

t[0]: f + a[0] * X[0] t[1]: f + a[1] * X[1] … t[n]: f + a[n] * X[n]

Этот процесс будет медленным. Однако при векторизации работа выполняется параллельно, и вклады суммируются следующим образом:

a[0] * X[0] + a[1] * X[1] + ... + a[n] * X[n]

Такой подход приводит к более быстрому выполнению и хорошо масштабируется даже с большими наборами данных.

Применение векторизации в градиентном спуске для множественной линейной регрессии:

Теперь давайте рассмотрим, как векторизация применяется к градиентному спуску в множественной линейной регрессии. Вот параметры и обозначения:

Предыдущие обозначения:

  • Параметры: a1, a2,…,an, b

Векторные обозначения:

  • Параметры:vector-a=[a1, a2,…an], b

Модель:

Предыдущие обозначения: f(vector-X) = a1 X1 +….+an Xn +b

Векторное обозначение: f(vector-X) = вектор-a . вектор-X + b

Функция стоимости:

Предыдущие обозначения: J(a1,a2,…,an,b)

Векторное обозначение: J(vector-a,b)

Градиентный спуск:

Предыдущее обозначение:

repeat {
    aj = aj - α d/daj J(a1,...,an,b)
    b = b - α d/db J(a1,...,an,b)
}

Векторное обозначение:

repeat {
    aj = aj - α d/daj J(vector-a,b)
    b = b - α d/db J(vector-a,b)
}

Градиентный спуск с одной особенностью:

Для одного объекта обновление «a» и «b» в градиентном спуске можно понимать следующим образом:

  1. «a» обновляется путем вычитания части производной функции стоимости по отношению к «a».
  2. «b» обновляется путем вычитания доли производной функции стоимости по отношению к «b».
  3. Дробь представлена ​​как α (альфа), что является скоростью обучения. Он контролирует размер шага каждого обновления.
  4. Функция стоимости (J) определяет, насколько далеки прогнозы нашей модели (f(X^(i)) от фактических значений (y^(i)) для каждой точки данных.
  5. Мы перебираем все точки данных (Σ) и берем их среднее значение (1/m), чтобы одновременно обновлять «a» и «b».

Градиентный спуск с несколькими признаками (n=2):

При работе с несколькими функциями (n›=2) процесс обновления расширяется:

  1. У нас есть n функций, поэтому мы обновляем «a» для каждой функции с «a1» на «an».
  2. В качестве «a1» мы берем производную функции стоимости по «a1».
  3. Аналогично, для «a2», «a3» и т. д. мы обновляем каждое «a», вычитая часть производной.
  4. «b» обновляется так же, как и в случае с одним признаком.
  5. Эти обновления выполняются одновременно для всех значений «a» и «b».

В этом одновременном обновлении проявляется великолепная векторизация, позволяющая нам эффективно обрабатывать множество функций и быстро оптимизировать нашу модель. Это значительно ускоряет процесс по сравнению с обновлением параметров по отдельности, особенно при работе с большими наборами данных.

Теперь давайте представим это в формате, похожем на Python, для удобства использования в вашем блоге:

# Gradient Descent with One Feature
a = a - α * (1/m) * Σ(f(X^(i) - y^(i)) * X^(i))
b = b - α * (1/m) * Σ(f(X^(i) - y^(i)))
# Gradient Descent with Multiple Features (n>=2)
for j in range(1, n+1):
    aj = aj - α * (1/m) * Σ(f(vector-X^(i) - y^(i)) * Xj^(i))  # Update for each 'a'
b = b - α * (1/m) * Σ(f(vector-X^(i) - y^(i)))  # Update 'b' simultaneously

Заключение:

Векторизация упрощает обновление параметров и вычисления, делая градиентный спуск более эффективным и масштабируемым, особенно при работе с многочисленными функциями.

В заключение, векторизация — это не просто математическая концепция; это мощный вычислительный метод, который выводит линейную регрессию и подобные модели на новую высоту скорости и эффективности.

Все, ребята, всего наилучшего в дальнейшем обучении✨ Спасибо🥳