Почему Python стал стандартом для ML
Python доминирует в машинном обучении по нескольким причинам: выразительный синтаксис, позволяющий быстро прототипировать идеи; богатая экосистема библиотек; интерактивный режим работы через Jupyter; огромное сообщество практиков и исследователей. Альтернативы существуют (R, Julia), но Python остаётся фактическим стандартом для подавляющего большинства ML-проектов.
В этом обзоре мы рассматриваем только библиотеки, непосредственно полезные для ML: вычисления, обработка данных, моделирование, визуализация. Веб-фреймворки и DevOps-инструменты не включены.
Фундаментальные библиотеки
NumPy — числовая основа
NumPy предоставляет n-мерные массивы (ndarray) и операции над ними, реализованные на C. Это фундамент, на котором построены практически все остальные ML-библиотеки Python.
import numpy as np
# Создание матрицы признаков
X = np.random.randn(1000, 20) # 1000 объектов, 20 признаков
y = X @ np.random.randn(20) + np.random.randn(1000) * 0.5
# Линейная регрессия — нормальное уравнение
theta = np.linalg.solve(X.T @ X, X.T @ y)
y_pred = X @ theta
mse = np.mean((y - y_pred) ** 2)
print(f"MSE: {mse:.4f}")
Версия (2025): NumPy 2.0+. Когда использовать: всегда, как основу. Альтернатива: CuPy для GPU-вычислений.
Pandas — табличные данные
Pandas предоставляет DataFrame — двумерную таблицу с именованными столбцами. Это основной инструмент для загрузки, очистки и подготовки данных.
import pandas as pd
df = pd.read_csv('housing.csv')
# Разведочный анализ
print(df.describe())
print(df.isnull().sum())
# Обработка пропусков
df['sqft'].fillna(df['sqft'].median(), inplace=True)
# Кодирование категорий
df = pd.get_dummies(df, columns=['neighborhood'], drop_first=True)
Версия (2025): Pandas 2.x. Когда использовать: любые табличные данные до ~50 млн строк. Альтернатива: Polars — значительно быстрее для больших датасетов.
Polars — современная альтернатива Pandas
Polars написан на Rust с использованием Apache Arrow. Обычно в 5–15 раз быстрее Pandas на больших датасетах. В 2025 году это уже зрелый инструмент, рекомендуемый для новых проектов.
import polars as pl
df = pl.read_csv('housing.csv')
result = (
df
.filter(pl.col('price') > 400_000)
.group_by('neighborhood')
.agg(pl.col('price').mean().alias('avg_price'))
.sort('avg_price', descending=True)
)
print(result)
Scikit-learn — классические алгоритмы ML
Scikit-learn — де-факто стандарт для классических алгоритмов ML в Python. Единообразный API (fit/predict/transform), богатый набор алгоритмов, утилиты для оценки и пайплайны.
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.metrics import classification_report
# Пайплайн: preprocessing + model
pipe = Pipeline([
('scaler', StandardScaler()),
('clf', RandomForestClassifier(n_estimators=200, random_state=42))
])
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42)
pipe.fit(X_train, y_train)
print(classification_report(y_test, pipe.predict(X_test)))
Для чего используется: обучение с учителем (линейные модели, деревья, SVM, kNN, ансамбли), обучение без учителя (K-Means, PCA, DBSCAN), оценка моделей (cross_val_score, GridSearchCV), предобработка (StandardScaler, OneHotEncoder).
Чего нет в sklearn: глубокое обучение, GPU, автоматическое дифференцирование.
Deep Learning фреймворки
PyTorch — исследования и Production
PyTorch — доминирующий фреймворк для исследований в области глубокого обучения и всё чаще используется в Production. Динамический граф вычислений (define-by-run) делает отладку интуитивной. В 2025 году использует TorchCompile для ускорения.
import torch
import torch.nn as nn
class MLP(nn.Module):
def __init__(self, in_features, hidden, out_classes):
super().__init__()
self.net = nn.Sequential(
nn.Linear(in_features, hidden),
nn.ReLU(),
nn.Dropout(0.3),
nn.Linear(hidden, out_classes)
)
def forward(self, x):
return self.net(x)
model = MLP(20, 128, 2)
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)
Когда использовать: нейронные сети любой архитектуры, исследовательские проекты, когда нужен полный контроль над вычислениями.
TensorFlow / Keras
TensorFlow 2.x с Keras API остаётся широко используемым, особенно в Production-системах крупных компаний и мобильных приложениях (TFLite). Keras обеспечивает высокоуровневый API с минимальным кодом.
import tensorflow as tf
model = tf.keras.Sequential([
tf.keras.layers.Dense(128, activation='relu', input_shape=(20,)),
tf.keras.layers.Dropout(0.3),
tf.keras.layers.Dense(2, activation='softmax')
])
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
model.fit(X_train, y_train, validation_split=0.2, epochs=50)
Когда использовать: мобильный deployment (TFLite), если в команде уже есть TF-кодовая база, для Keras-экосистемы (keras-tuner, keras-cv).
Специализированные библиотеки
Градиентный бустинг. Часто лучший выбор для табличных данных. LightGBM — быстрее и потребляет меньше памяти. XGBoost — больше настроек регуляризации.
Визуализация данных и результатов. Matplotlib — полный контроль. Seaborn — красивые статистические графики с минимальным кодом.
Оптимизация гиперпараметров. Optuna использует Bayesian optimization для эффективного поиска. Ray Tune — распределённый поиск на кластерах.
Отслеживание экспериментов, версионирование моделей. MLflow — самостоятельный хостинг. W&B — облачный сервис с богатой визуализацией.
Итог: как выбрать стек
Рекомендуемый стек для начала в 2025 году:
- Данные: NumPy + Polars (или Pandas для совместимости)
- Классические алгоритмы: scikit-learn
- Визуализация: Matplotlib + Seaborn
- Глубокое обучение: PyTorch (исследования) или TensorFlow (Production/мобильный)
- Бустинг: LightGBM или XGBoost
- Эксперименты: MLflow или W&B
Начните с scikit-learn — его чистый API обучит вас правильным паттернам (fit/transform/predict). Переходите к PyTorch, когда классических алгоритмов становится недостаточно.