Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Основы математики

🎯 Цель

После прочтения этой главы:

  • Вы будете понимать концепции вектора, матрицы, градиента, встречающиеся в ML-коде
  • Сможете видеть с математической точки зрения, почему алгоритмы работают именно так
  • Такие термины, как loss function, gradient descent, не будут для вас “чёрным ящиком”

**Примечание:**математика для ML — это не полный университетский курс. Вам достаточно intuition (интуиции) и понимания смысла основных операций. Изучать глубокие теоремы необязательно.

Что нужно изучить

1. Linear Algebra (линейная алгебра)

  • Scalar, Vector, Matrix, Tensor — в ML данные представлены в этой форме
  • Векторные операции — сложение, умножение, dot product (скалярное произведение)
  • Матричные операции — transpose, умножение, inverse, determinant
  • Identity matrix, Diagonal matrix — специальные матрицы
  • Eigenvalues и Eigenvectors — для PCA и SVD

2. Calculus (математический анализ)

  • Function (функция) — input → output
  • Derivative (производная) — с какой скоростью изменяется функция
  • Partial derivative (частная производная) — для функции нескольких переменных
  • Gradient — вектор, состоящий из всех частных производных
  • Chain rule (правило цепи) — основа нейронной сети (backpropagation)
  • Optimization (оптимизация) — поиск минимума/максимума

3. Statistics и Probability

  • Mean, Median, Mode — меры центральной тенденции
  • Variance, Standard Deviation — разброс
  • Normal distribution (Gaussian) — самое важное распределение в ML
  • Probability distributions — Bernoulli, Binomial, Poisson, Uniform
  • Bayes Theorem — условная вероятность
  • Correlationvs Causation — связь vs причина
  • Hypothesis testing — для A/B-тестов

Библиотеки

pip install numpy scipy sympy matplotlib
  • NumPy — вычисления над векторами/матрицами
  • SciPy — продвинутые математические функции, статистика
  • SymPy — символьная математика (работа с формулами)

Важные темы

Vector и Matrix в ML

Любые данные в ML имеют форму тензора:

  • Скаляр(0-d тензор) — одно число: 5
  • Вектор(1-d тензор) — список чисел: [1, 2, 3] (например, оценки одного ученика по 3 предметам)
  • Matrix(2-d тензор) — таблица: [[1,2,3], [4,5,6]] (например, 2 ученика × 3 предмета)
  • Tensor(3+ d) — например, изображение: [height, width, channels]

Что такое gradient и зачем он нужен?

Представьте, что вы стоите на горе и должны спуститься в самую нижнюю точку. Gradient говорит вам: “в какую сторону самый крутой подъём” — вы делаете шаг в противоположном направлении. В этом суть алгоритма Gradient Descent.

В ML:

  • Гора = loss function(уровень ошибки)
  • Спуск = training(обучение)
  • Цель = минимизация loss

Почему важно Normal distribution?

Многие реальные измерения (рост людей, цена товаров, IQ) имеют нормальное распределение. Это следует из Central Limit Theorem (центральная предельная теорема). ML-алгоритмы также часто настроены под это распределение.

Примеры кода

Вектор и матрица с NumPy

import numpy as np

# Вектор
v = np.array([1, 2, 3])

# Matrix (матрица)
A = np.array([[1, 2], [3, 4]])

# Dot product (скалярное произведение)
u = np.array([4, 5, 6])
result = np.dot(v, u)  # 1*4 + 2*5 + 3*6 = 32

# Умножение матриц
B = np.array([[5, 6], [7, 8]])
C = A @ B  # или np.matmul(A, B)

# Transpose
A_T = A.T

Вычисление gradient (простой пример)

import numpy as np

# производная функции f(x) = x^2: f'(x) = 2x
def f(x):
    return x ** 2

def gradient_f(x):
    return 2 * x

# Gradient descent — поиск минимума
x = 10.0  # начальная точка
learning_rate = 0.1

for i in range(20):
    grad = gradient_f(x)
    x = x - learning_rate * grad  # шаг в противоположном направлении
    print(f"step {i}: x = {x:.4f}, f(x) = {f(x):.4f}")

# Результат: x → стремится к 0 (минимум f(x) = x^2)

Статистические показатели

import numpy as np

data = np.array([2, 4, 4, 4, 5, 5, 7, 9])

print(f"Mean:    {np.mean(data)}")      # 5.0
print(f"Median:  {np.median(data)}")    # 4.5
print(f"Std:     {np.std(data):.2f}")   # 2.00
print(f"Var:     {np.var(data):.2f}")   # 4.00

# Случайное число из нормального распределения
sample = np.random.normal(loc=0, scale=1, size=1000)
print(f"Sample mean: {sample.mean():.3f}")  # близко к ~0
print(f"Sample std:  {sample.std():.3f}")   # близко к ~1

Интеграция с backend

Как backend dev, математика вам понадобится в следующих местах:

  1. Analytics endpoints — в Django route /api/stats/ — для вычисления mean, median, percentile можно использовать NumPy (быстрее, чем встроенный модуль statistics Python)
  2. A/B testing backend — проверка, статистически ли значима разница между двумя версиями (scipy.stats.ttest_ind)
  3. Anomaly detection — поиск outliers методом z-score или IQR
  4. Rate limiting и load forecasting — прогноз нагрузки запросов через Poisson distribution
# Пример статистического endpoint в FastAPI
from fastapi import FastAPI
import numpy as np
from scipy import stats

app = FastAPI()

@app.post("/api/stats/")
def calculate_stats(values: list[float]):
    arr = np.array(values)
    return {
        "mean": float(arr.mean()),
        "median": float(np.median(arr)),
        "std": float(arr.std()),
        "p95": float(np.percentile(arr, 95)),
        "outliers_zscore": [
            float(v) for v in arr if abs((v - arr.mean()) / arr.std()) > 3
        ],
    }

Ресурсы

Бесплатно

  • 3Blue1Brown — “Essence of Linear Algebra”(плейлист YouTube) — визуальное объяснение, MUST WATCH(link)
  • 3Blue1Brown — “Essence of Calculus”(плейлист YouTube) — по calculus
  • Khan Academy — Linear Algebra(link)
  • StatQuest with Josh Starmer(YouTube) — упрощение концепций статистики
  • “Mathematics for Machine Learning” — Deisenroth, Faisal, Ong (бесплатный PDF: mml-book.com)

Платно (опционально)

  • Coursera — Mathematics for Machine Learning Specialization(Imperial College London)

🏋️ Упражнения

🟢 Easy

  1. С NumPy создайте 5 случайных чисел, найдите их mean, median, std.
  2. Вычислите dot product векторов [1, 2, 3] и [4, 5, 6] вручную, затем проверьте с NumPy.
  3. Создайте identity matrix 3x3.

🟡 Medium

  1. Найдите минимум функции f(x) = (x-3)^2 + 5 методом gradient descent (попробуйте разные learning rate: 0.01, 0.1, 1.0).
  2. Создайте dataset из 1000 случайных нормальных чисел и нарисуйте гистограмму (с matplotlib).
  3. Используя scipy.stats, проведите t-test для результатов двух групп и интерпретируйте p-value.

🔴 Hard

  1. Напишите FastAPI endpoint: пользователь отправляет список [float], в ответ верните mean, std, outliers (z-score > 3), результаты normality test (Shapiro-Wilk). Сделайте полностью type-safe с моделями Pydantic.

Capstone (финальное упражнение)

В файле notebooks/month-01/00_math_warmup.ipynb выполните следующее:

  1. Создайте случайную матрицу 100×100 с NumPy
  2. Найдите её eigenvalues и eigenvectors (np.linalg.eig)
  3. Сделайте SVD-разложение матрицы (np.linalg.svd)
  4. Визуализируйте singular values

✅ Чек-лист

  • Понимаю разницу между вектором и матрицей
  • Знаю, что такое dot product и когда он используется
  • Что такое gradient — могу объяснить в одном предложении
  • Написал алгоритм gradient descent в коде
  • Знаю разницу между mean, median, std
  • Понимаю, что такое normal distribution и почему он важен
  • Могу привести пример Bayes theorem
  • Умею выполнять матричные операции в NumPy

Если готовы, переходите к главе NumPy.