Классическое машинное обучение на 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.
Типичные ошибки
- Обучение на всём датасете и отчёт accuracy на тех же строках — завышенные метрики.
- Утечка целевой переменной в признаки (например, "сумма возврата" при предсказании "будет ли возврат").
- Разные распределения train и prod — модель деградирует без переобучения или мониторинга drift.
- Игнорирование дисбаланса классов — смотреть F1 / balanced accuracy, а не только accuracy.
Дополнительно часто забывают:
- Неправильный выбор метрики — для редких событий (фрод, отказ, дефект)
accuracyпочти бесполезна. - Отсутствие baseline-правила: без "простого" сравнения нельзя понять, насколько модель действительно полезна.
Когда переходить к PyTorch
- изображения, звук, текст длиной в тысячи токенов;
- нужна тонкая архитектура сети и GPU;
- transfer learning с предобученными весами.
До этого разумно зафиксировать baseline на scikit-learn — он часто занимает часы, а не недели.
Мини-чек-лист качества эксперимента
- Есть фиксированный
random_stateдля воспроизводимости. - Train/validation/test разделены корректно и без утечек.
- Метрики подобраны под бизнес-задачу, а не "по привычке".
- Пайплайн сериализован (
joblib) и проверен на новых данных. - Записаны ограничения модели и условия переобучения.
Связанные материалы
- Pandas — практикум
- Pandas — типовые операции (примеры)
- Matplotlib — графики — визуализация признаков и метрик
- PyTorch для разработчика
- Введение в ИИ
- Экосистема Python-приложений