Классическое машинное обучение на Python
См. также: Анализ данных · Pandas — практикум · PyTorch для разработчика · раздел «ИИ»
Место scikit-learn в стеке
scikit-learn — библиотека классического машинного обучения: табличные признаки, интерпретируемые модели, быстрые эксперименты на CPU. Она опирается на NumPy и часто на pandas для подготовки данных — см. обзор анализа и практикум pandas.
Глубокое обучение (нейросети, изображения, большие языковые модели) — отдельный путь: PyTorch и раздел нейросети. scikit-learn остаётся актуальным для baseline, отчётов, малого объёма данных и задач без GPU.
Установка:
pip install scikit-learn pandas
Типы задач
| Задача | Примеры | Метрики |
|---|---|---|
| Классификация | Спам / не спам, категория товара | accuracy, F1, ROC-AUC |
| Регрессия | Прогноз цены, спроса | MAE, RMSE, R² |
| Кластеризация | Сегменты клиентов без меток | silhouette, визуальный разбор |
| Понижение размерности | Визуализация, сжатие признаков | объяснённая дисперсия (PCA) |
Данные почти всегда представляют матрицей X (признаки) и вектором y (целевая переменная для обучения с учителем).
Минимальный пример классификации
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report
df = pd.read_csv("customers.csv")
X = df[["age", "orders_count", "avg_check"]]
y = df["churn"]
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y
)
scaler = StandardScaler()
X_train_s = scaler.fit_transform(X_train)
X_test_s = scaler.transform(X_test)
model = LogisticRegression(max_iter=1000)
model.fit(X_train_s, y_train)
pred = model.predict(X_test_s)
print(classification_report(y_test, pred))
Ключевые идеи:
train_test_split— отделить тест, на котором не учимся, чтобы оценить обобщение;fitтолько на train дляStandardScaler, иначе утечка информации из теста;stratify=y— сохранить доли классов в train/test при дисбалансе.
Pipeline — единый контракт
Чтобы не забыть шаги препроцессинга при предсказании в продакшене, шаги объединяют в Pipeline:
from sklearn.pipeline import Pipeline
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
numeric_features = ["age", "orders_count"]
categorical_features = ["region"]
preprocess = ColumnTransformer(
transformers=[
("num", StandardScaler(), numeric_features),
("cat", OneHotEncoder(handle_unknown="ignore"), categorical_features),
]
)
pipe = Pipeline([
("prep", preprocess),
("clf", LogisticRegression(max_iter=1000)),
])
pipe.fit(X_train, y_train)
pipe.score(X_test, y_test)
Один объект 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_)
Cross-validation (cv=5) оценивает качество на нескольких разбиениях train, не трогая финальный test.
Популярные модели (кратко)
| Модель | Сильные стороны |
|---|---|
LogisticRegression | Быстрый baseline, интерпретируемые веса |
RandomForestClassifier | Нелинейности, устойчивость к выбросам |
GradientBoostingClassifier / HistGradientBoosting | Высокое качество на таблицах |
KMeans | Кластеризация без меток |
PCA | Сжатие и визуализация |
Выбор модели зависит от объёма данных, необходимости объяснимости и латентности inference.
Типичные ошибки
- Обучение на всём датасете и отчёт accuracy на тех же строках — завышенные метрики.
- Утечка целевой переменной в признаки (например, «сумма возврата» при предсказании «будет ли возврат»).
- Разные распределения train и prod — модель деградирует без переобучения или мониторинга drift.
- Игнорирование дисбаланса классов — смотреть F1 / balanced accuracy, а не только accuracy.
Когда переходить к PyTorch
- изображения, звук, текст длиной в тысячи токенов;
- нужна тонкая архитектура сети и GPU;
- transfer learning с предобученными весами.
До этого разумно зафиксировать baseline на scikit-learn — он часто занимает часы, а не недели.
Связанные материалы
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). Python как язык общего назначения - философия, ключевые свойства и области применения в современной разработке. Python — это высокоуровневый язык программирования общего назначения, который отличается читаемым синтаксисом и широким спектром применения. Принципы, которые делают код понятным, поддерживаемым и расширяемым. Примеры реализации типовых приложений. Каждый пример сопровождается разбором ключевых концепций языка. Наверняка каждый новичок, решивший перейти в что-то стандартное в Python, открывает себе этот файл. Как устроен Python, что входит в комплект и какие есть реализации. Структурные каркасы для построения приложений, как они устроены. Фреймворки, библиотеки, инструменты сборки, среды выполнения, системы тестирования и специализированные платформы, объединённые общей философией ясности, простоты и гибкости. Что такое модули, как устроены механизмы импорта и загрузки. Управление изолированной средой и зависимостями проекта. История Python - ключевые этапы развития языка, сообщества и экосистемы инструментов. Философия Python не зафиксирована в официальных стандартах, но она глубоко интегрирована в язык, его стандартную библиотеку, документацию и культуру разработчиков.Python - язык общего назначения
Что требуется знать перед началом изучения языка программирования Python
Рекомендации по разработке на Python
Простые приложения на Python
Встроенный модуль builtins и типизация в Python
Архитектура интерпретатора Python
Фреймворки и библиотеки Python
Экосистема Python-приложений
Модули в Python
Виртуальные окружения и управление зависимостями
История языка Python
Философия Python - Zen of Python