Перейти к основному содержимому

Классическое машинное обучение на Python

Разработчику

См. также: Анализ данных · NumPy — массивы и матрицы (Lab) · Pandas — практикум · примеры pandas в Lab · PyTorch для разработчика · раздел "ИИ"


Место scikit-learn в стеке

scikit-learn — библиотека классического машинного обучения — табличные признаки, интерпретируемые модели, быстрые эксперименты на CPU. Она опирается на NumPy и часто на pandas для подготовки данных — см. обзор анализа, NumPy — примеры, практикум pandas и примеры подготовки таблиц.

Глубокое обучение (нейросети, изображения, большие языковые модели) — отдельный путь: PyTorch и раздел нейросети. scikit-learn остаётся актуальным для baseline, отчётов, малого объёма данных и задач без GPU.

Хорошая рабочая стратегия звучит так — "сначала получить честный baseline на scikit-learn, потом решать, нужен ли переход к нейросетям". На практике это экономит недели экспериментов.

Установка:

pip install scikit-learn pandas

Разбор:

  • Команда устанавливает scikit-learn с алгоритмами классического ML.
  • Пакет pandas добавляется для чтения и подготовки табличных данных.
  • После установки можно сразу использовать импорты from sklearn ... и import pandas as pd.

Типы задач

ЗадачаПримерыМетрики
КлассификацияСпам / не спам, категория товараaccuracy, F1, ROC-AUC
РегрессияПрогноз цены, спросаMAE, RMSE, R²
КластеризацияСегменты клиентов без метокsilhouette, визуальный разбор
Понижение размерностиВизуализация, сжатие признаковобъяснённая дисперсия (PCA)

Данные почти всегда представляют матрицей X (признаки) и вектором y (целевая переменная для обучения с учителем).


Минимальный пример классификации

Код ITЗагрузка примера кода…

Разбор:

  • read_csv загружает датасет, X содержит признаки, y — целевую метку оттока.
  • train_test_split(..., stratify=y) делит данные на обучение и тест с сохранением долей классов.
  • StandardScaler обучается на train (fit_transform) и применяет те же параметры к test (transform).
  • LogisticRegression обучает классификатор, predict выдаёт предсказания.
  • classification_report печатает precision/recall/F1 по каждому классу и итоговые средние.

Ключевые идеи:

  • train_test_split — отделить тест, на котором не учимся, чтобы оценить обобщение;
  • fit только на train для StandardScaler, иначе утечка информации из теста;
  • stratify=y — сохранить доли классов в train/test при дисбалансе.

Pipeline — единый контракт

Чтобы не забыть шаги препроцессинга при предсказании в продакшене, шаги объединяют в Pipeline:

Код ITЗагрузка примера кода…

Разбор:

  • ColumnTransformer задаёт отдельные правила обработки для разных типов признаков.
  • Блок num масштабирует числовые поля через StandardScaler.
  • Блок cat кодирует категории через OneHotEncoder.
  • Pipeline объединяет препроцессинг и модель в единый исполняемый объект.
  • При fit и score шаги всегда выполняются в правильном порядке.

Один объект pipe сериализуют (joblib.dump) и загружают на сервер — признаки обрабатываются так же, как при обучении.


Подбор гиперпараметров

from sklearn.model_selection import GridSearchCV

param_grid = {"clf__C": [0.1, 1.0, 10.0]}
search = GridSearchCV(pipe, param_grid, cv=5, scoring="f1_macro")
search.fit(X_train, y_train)
print(search.best_params_, search.best_score_)

Разбор:

  • GridSearchCV запускает перебор гиперпараметров по заданной сетке.
  • Ключ clf__C адресует параметр C у шага clf внутри pipeline.
  • cv=5 оценивает каждый вариант на пяти разбиениях train.
  • scoring="f1_macro" выбирает целевую метрику для сравнения моделей.
  • best_params_ возвращает лучший набор параметров.
  • best_score_ показывает среднее качество лучшего варианта по CV.

Cross-validation (cv=5) оценивает качество на нескольких разбиениях train, не трогая финальный test.

Если датасет маленький, метрика от одного train_test_split может "скакать". В этом случае CV обязательна: она уменьшает риск случайных выводов.


Популярные модели

МодельСильные стороны
LogisticRegressionБыстрый baseline, интерпретируемые веса
RandomForestClassifierНелинейности, устойчивость к выбросам
GradientBoostingClassifier / HistGradientBoostingВысокое качество на таблицах
KMeansКластеризация без меток
PCAСжатие и визуализация

Выбор модели зависит от объёма данных, необходимости объяснимости и латентности inference.


Типичные ошибки

  1. Обучение на всём датасете и отчёт accuracy на тех же строках — завышенные метрики.
  2. Утечка целевой переменной в признаки (например, "сумма возврата" при предсказании "будет ли возврат").
  3. Разные распределения train и prod — модель деградирует без переобучения или мониторинга drift.
  4. Игнорирование дисбаланса классов — смотреть F1 / balanced accuracy, а не только accuracy.

Дополнительно часто забывают:

  1. Неправильный выбор метрики — для редких событий (фрод, отказ, дефект) accuracy почти бесполезна.
  2. Отсутствие baseline-правила: без "простого" сравнения нельзя понять, насколько модель действительно полезна.

Когда переходить к PyTorch

  • изображения, звук, текст длиной в тысячи токенов;
  • нужна тонкая архитектура сети и GPU;
  • transfer learning с предобученными весами.

До этого разумно зафиксировать baseline на scikit-learn — он часто занимает часы, а не недели.


Мини-чек-лист качества эксперимента

  • Есть фиксированный random_state для воспроизводимости.
  • Train/validation/test разделены корректно и без утечек.
  • Метрики подобраны под бизнес-задачу, а не "по привычке".
  • Пайплайн сериализован (joblib) и проверен на новых данных.
  • Записаны ограничения модели и условия переобучения.

Связанные материалы