Основы математики
🎯 Цель
После прочтения этой главы:
- Вы будете понимать концепции вектора, матрицы, градиента, встречающиеся в 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, математика вам понадобится в следующих местах:
- Analytics endpoints — в Django route
/api/stats/— для вычисленияmean,median,percentileможно использовать NumPy (быстрее, чем встроенный модульstatisticsPython) - A/B testing backend — проверка, статистически ли значима разница между двумя версиями (scipy.stats.ttest_ind)
- Anomaly detection — поиск outliers методом z-score или IQR
- 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
- С NumPy создайте 5 случайных чисел, найдите их
mean,median,std. - Вычислите dot product векторов
[1, 2, 3]и[4, 5, 6]вручную, затем проверьте с NumPy. - Создайте identity matrix
3x3.
🟡 Medium
- Найдите минимум функции
f(x) = (x-3)^2 + 5методом gradient descent (попробуйте разные learning rate: 0.01, 0.1, 1.0). - Создайте dataset из 1000 случайных нормальных чисел и нарисуйте гистограмму (с matplotlib).
- Используя
scipy.stats, проведите t-test для результатов двух групп и интерпретируйте p-value.
🔴 Hard
- Напишите FastAPI endpoint: пользователь отправляет список
[float], в ответ вернитеmean,std,outliers (z-score > 3), результатыnormality test (Shapiro-Wilk). Сделайте полностью type-safe с моделями Pydantic.
Capstone (финальное упражнение)
В файле notebooks/month-01/00_math_warmup.ipynb выполните следующее:
- Создайте случайную матрицу 100×100 с NumPy
- Найдите её eigenvalues и eigenvectors (
np.linalg.eig) - Сделайте SVD-разложение матрицы (
np.linalg.svd) - Визуализируйте singular values
✅ Чек-лист
- Понимаю разницу между вектором и матрицей
- Знаю, что такое dot product и когда он используется
- Что такое gradient — могу объяснить в одном предложении
- Написал алгоритм gradient descent в коде
- Знаю разницу между mean, median, std
- Понимаю, что такое normal distribution и почему он важен
- Могу привести пример Bayes theorem
- Умею выполнять матричные операции в NumPy
Если готовы, переходите к главе NumPy.