Почему 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).

Специализированные библиотеки

XGBOOST / LIGHTGBM

Градиентный бустинг. Часто лучший выбор для табличных данных. LightGBM — быстрее и потребляет меньше памяти. XGBoost — больше настроек регуляризации.

MATPLOTLIB / SEABORN

Визуализация данных и результатов. Matplotlib — полный контроль. Seaborn — красивые статистические графики с минимальным кодом.

OPTUNA / RAY TUNE

Оптимизация гиперпараметров. Optuna использует Bayesian optimization для эффективного поиска. Ray Tune — распределённый поиск на кластерах.

MLFLOW / WANDB

Отслеживание экспериментов, версионирование моделей. 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, когда классических алгоритмов становится недостаточно.