Визуальное руководство по векторам и проекциям

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

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

Теперь у нас есть эти данные, и нам нужно построить простую модель линейной регрессии для прогнозирования цены дома на основе его размера.

Линейная регрессия

Мы обычно используем Python для реализации этого алгоритма.

Код:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

# 1. Data
X = np.array([1, 2, 3]).reshape(-1, 1)
y = np.array([11, 12, 19])

# 2. Train the scikit-learn model
model = LinearRegression()
model.fit(X, y)

# 3. Extract the parameters and predictions
intercept = model.intercept_
slope = model.coef_[0]
y_pred = model.predict(X)
errors = y - y_pred

print("--- Scikit-Learn Results ---")
print(f"Intercept (Beta 0): {intercept:.0f}")
print(f"Slope (Beta 1):     {slope:.0f}")
print(f"Predictions:        {y_pred}")
print(f"Errors (Residuals): {errors}")

# 4. Create the 2D Scatterplot
plt.figure(figsize=(8, 6))

# Plot the actual data points
plt.scatter(X, y, color='blue', s=100, label='Actual Data (y)')

# Plot the scikit-learn line of best fit
plt.plot(X, y_pred, color='red', linewidth=2, label='scikit-learn Best Fit Line')

# Draw the vertical residual lines (errors)
for i in range(len(X)):
    plt.plot([X[i][0], X[i][0]], [y[i], y_pred[i]], color='green', linestyle='--', linewidth=2)
    plt.text(X[i][0] + 0.05, (y[i] + y_pred[i])/2, f'e={errors[i]:.0f}', color='green', fontsize=12)

plt.xlabel('Size (x, in 1000 sq ft)')
plt.ylabel('Price (y, in $100k)')
plt.title('scikit-learn Simple Linear Regression')
plt.legend()
plt.grid(True, linestyle=':', alpha=0.7)

# Display the plot
plt.show()

Затем мы получаем эти значения:

Результаты

Готовьтесь!

На этот раз мы пойдём по другому маршруту для решения этой задачи.

Поскольку мы берём менее изученный маршрут, давайте подготовимся, чтобы не потеряться на середине нашего пути понимания.

Маршрут, по которому мы пойдём, — это векторная проекция, и для этого давайте вспомним наши основы по векторам.

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

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

Давайте начнём.


Что такое вектор?

Вернёмся в школу, где мы впервые познакомились с векторами.

Одним из первых примеров, которые мы изучаем о векторах, является скорость против скоростного показателя.

Этот пример показывает нам, что 50 км/ч — это скорость, и это скалярная величина, потому что она имеет только величину, тогда как 50 км/ч в восточном направлении — это векторная величина, потому что она имеет как величину, так и направление.

Теперь давайте нарисуем это на графике.

Вектор на графике

Если мы нанесём координаты (2, 4), мы считаем это точкой в двумерном пространстве.

Но если мы соединим начало координат с этой точкой стрелкой, мы теперь считаем это вектором, потому что у него есть как величина, так и направление.

Мы можем рассматривать (2, 4) как набор инструкций: это говорит, что нужно сделать 2 шага вправо вдоль оси x, а затем 4 шага вверх параллельно оси y.

Направление, на которое он указывает, даёт нам направление.

Длина стрелки дает нам величину вектора.

Величина вектора

Из графика мы можем наблюдать образование прямоугольного треугольника. По теореме Пифагора мы знаем, что c = √(a² + b²). Для вектора v = (x, y) величина равна ||v|| = √(x² + y²). Подставив значения вектора (2, 4):

||v|| = √(2² + 4²) = √(4 + 16) = √20 ≈ 4,47 единиц


Теперь давайте нарисуем другой вектор (6, 2) на нашем графике.

Два вектора

Глядя на векторы, мы видим, что они в целом указывают вверх и вправо.

Они не указывают в точно одном направлении, но они явно наклонены в одну сторону.

Угол между векторами мал.

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

Из графика у нас есть два вектора:

A = (2, 4)

B = (6, 2)

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

Вектор A:

A = (2, 4)

означает

2 единицы в направлении x

4 единицы в направлении y

Вектор B:

B = (6, 2)

означает

6 единиц в направлении x

2 единицы в направлении y

Чтобы измерить, насколько два вектора согласуются друг с другом вдоль каждой оси, мы умножаем их соответствующие компоненты.

Вдоль оси x:

2 × 6

Вдоль оси y:

4 × 2

Затем мы складываем эти вклады вместе:

2 × 6 + 4 × 2 = 12 + 8 = 20

Эта операция называется скалярным произведением.

В общем случае для двух векторов

A = (a₁, a₂)

B = (b₁, b₂)

скалярное произведение определяется как

A · B = a₁b₁ + a₂b₂

Мы получили скалярное произведение 20, но что это означает?

Поскольку 20 — положительное число, мы можем наблюдать, что угол между векторами менее 90°.

Мы также можем рассматривать это как положительную связь между двумя переменными, представленными этими векторами. Эта идея станет более ясной, когда мы начнём обсуждать задачу простой линейной регрессии.


У вас может быть сомнение в том, как скалярное произведение связано с углом между двумя векторами и как мы можем сказать, что угол менее 90°.

Прежде чем понять эту связь, мы рассмотрим ещё два случая скалярного произведения, чтобы наше понимание стало более ясным о том, что на самом деле измеряет скалярное произведение. После этого мы перейдём к углу между векторами.

Теперь давайте рассмотрим ещё два примера для лучшего понимания скалярного произведения.

Примеры скалярного произведения

Когда мы смотрим на векторы со скалярным произведением, равным 0, мы можем сказать, что они ортогональны, то есть перпендикулярны друг другу. В этом случае векторы не имеют линейной связи, что соответствует нулевой корреляции.

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


Теперь еще раз рассмотрим два вектора [2, 4] и [6, 2].

Два вектора

Мы получили скалярное произведение 20.

Существует ещё один способ найти скалярное произведение, который включает длины векторов и угол между ними.

Это показывает, что 20 — не случайное число; оно указывает, что векторы наклонены в одном направлении.

Пусть два вектора будут

A = (2, 4), B = (6, 2)

Сначала вычислите длины (величины) векторов.

||A|| = √(2² + 4²) = √(4 + 16) = √20

||B|| = √(6² + 2²) = √(36 + 4) = √40

Теперь используя формулу скалярного произведения

A · B = ||A|| ||B|| cos(θ)

Из компонентной формулы скалярного произведения

A · B = 2 × 6 + 4 × 2 = 12 + 8 = 20

Подставляем в формулу угла

20 = √20 × √40 × cos(θ)

cos(θ) = 20 / (√20 × √40)

Теперь упростим знаменатель

√20 = 2√5, √40 = 2√10

√20 × √40 = (2√5)(2√10) = 4√50 = 4(5√2) = 20√2

Итак,

cos(θ) = 20 / (20√2) = 1 / √2

θ = 45°

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

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


К этому моменту мы получили базовое представление о том, что такое векторы, их скалярные произведения и углы между ними.

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