# scikit-learn

> Библиотека классического машинного обучения для Python с единым интерфейсом fit/predict — модели, предобработка, конвейеры и подбор гиперпараметров.

Источник: https://llmdocs.ru/wiki/scikit-learn/ · обновлено 2026-11-09 · лицензия CC BY-SA 4.0

- **Автор**: Давид Курнапо (Google Summer of Code, 2007)
- **Первый публичный выпуск**: 2010 (INRIA)
- **Язык**: Python, Cython
- **Зависимости**: NumPy, SciPy, joblib
- **Лицензия**: BSD 3-Clause
- **Импорт**: import sklearn
- **Сайт**: scikit-learn.org
**scikit-learn** (sklearn) — свободная библиотека [Python](https://llmdocs.ru/wiki/python.md) для классического [машинного обучения](https://llmdocs.ru/wiki/machine-learning.md): классификации, регрессии, кластеризации, понижения размерности, предобработки данных и оценки моделей. Она построена поверх [NumPy](https://llmdocs.ru/wiki/numpy.md) и SciPy и знаменита единообразным интерфейсом: любая модель обучается методом `fit` и делает предсказания методом `predict`. Для табличных данных среднего размера scikit-learn — стандартная отправная точка; глубокое обучение в ней не реализуется — для этого есть [PyTorch](https://llmdocs.ru/wiki/pytorch.md).[1]

## История

Проект начал Давид Курнапо в 2007 году в рамках Google Summer of Code как дополнение («scikit») к SciPy. В 2010 году разработку подхватили исследователи французского института INRIA, выпустив первую публичную версию; статья в JMLR 2011 года стала одной из самых цитируемых в области.[2] Версия 1.0 вышла в 2021 году. Проект развивается сообществом при поддержке фонда и компании Probabl, созданной ключевыми разработчиками.

## Дизайн API

Все объекты следуют нескольким соглашениям:[3]

- **Оценщик** (estimator) — любой объект с методом `fit(X, y)`; гиперпараметры задаются в конструкторе.
- **Предсказатель** — добавляет `predict`, для классификаторов также `predict_proba`, и `score`.
- **Преобразователь** (transformer) — `transform` и `fit_transform`: масштабирование, кодирование, отбор признаков.
- Выученные параметры имеют суффикс подчёркивания: `coef_`, `classes_`.
- Данные — массивы NumPy, таблицы [pandas](https://llmdocs.ru/wiki/pandas.md) или разреженные матрицы.

Благодаря этому модели взаимозаменяемы: сменить логистическую регрессию на случайный лес — одна строка.

## Что внутри

| Раздел | Примеры |
|---|---|
| Линейные модели | `LinearRegression`, `Ridge`, `Lasso`, `LogisticRegression` |
| Деревья и ансамбли | `DecisionTreeClassifier`, `RandomForestClassifier`, `HistGradientBoostingClassifier` |
| Прочие модели | SVM, k ближайших соседей, наивный Байес |
| Кластеризация | `KMeans`, `DBSCAN`, `AgglomerativeClustering` |
| Понижение размерности | `PCA`, `TruncatedSVD` |
| Предобработка | `StandardScaler`, `OneHotEncoder`, `SimpleImputer` |
| Оценка | `train_test_split`, `cross_val_score`, `GridSearchCV`, метрики |

Задачи с учителем и без разобраны в статье [Обучение с учителем и без](https://llmdocs.ru/wiki/supervised-unsupervised.md); выбрать подходящую модель помогает официальная «карта оценщиков».[5]

## Конвейеры

`Pipeline` и `ColumnTransformer` объединяют предобработку и модель в один объект. Это не только удобно, но и защищает от **утечки данных**: масштабирование и заполнение пропусков обучаются только на обучающей части каждого фолда.[4]

```python
from sklearn.compose import ColumnTransformer
from sklearn.ensemble import HistGradientBoostingClassifier
from sklearn.model_selection import GridSearchCV, train_test_split
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import OneHotEncoder, StandardScaler

pre = ColumnTransformer([
    ("num", StandardScaler(), ["age", "income"]),
    ("cat", OneHotEncoder(handle_unknown="ignore"), ["city"]),
])
pipe = Pipeline([("pre", pre), ("clf", HistGradientBoostingClassifier())])

X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=0)
search = GridSearchCV(pipe, {"clf__learning_rate": [0.05, 0.1],
                             "clf__max_depth": [3, None]}, cv=5, scoring="roc_auc")
search.fit(X_train, y_train)
print(search.best_params_, search.score(X_test, y_test))
```

Подбор гиперпараметров по [кросс-валидации](https://llmdocs.ru/wiki/cross-validation.md) (`GridSearchCV`, `RandomizedSearchCV`, `HalvingGridSearchCV`) — основной инструмент борьбы с [переобучением](https://llmdocs.ru/wiki/overfitting-regularization.md) при выборе модели. Метрики — в модуле `sklearn.metrics`, см. [Метрики качества классификации](https://llmdocs.ru/wiki/classification-metrics.md).

## Ограничения

- Работает в памяти и в основном на CPU; данные порядка миллионов строк — предел комфортного использования.
- Нет глубокого обучения и GPU (частичная поддержка через Array API).
- Для соревнований на табличных данных чаще берут специализированные библиотеки [градиентного бустинга](https://llmdocs.ru/wiki/gradient-boosting.md) — они совместимы с API scikit-learn.

## Сохранение и продакшен

Модели традиционно сохраняют через `joblib` или `pickle` — это быстро, но небезопасно для недоверенных файлов и привязано к версии библиотеки. Альтернативы — формат `skops` и экспорт в [ONNX](https://llmdocs.ru/wiki/onnx.md) для [сервинга](https://llmdocs.ru/wiki/model-serving.md).[6] Эксперименты и модели удобно отслеживать в [MLflow](https://llmdocs.ru/wiki/mlflow.md), у которого есть автологирование для scikit-learn.

## См. также

- [NumPy](https://llmdocs.ru/wiki/numpy.md)
- [pandas](https://llmdocs.ru/wiki/pandas.md)
- [Обучение с учителем и без](https://llmdocs.ru/wiki/supervised-unsupervised.md)
- [Градиентный бустинг (XGBoost, CatBoost, LightGBM)](https://llmdocs.ru/wiki/gradient-boosting.md)
- [Jupyter](https://llmdocs.ru/wiki/jupyter.md)

## Источники

1. [scikit-learn — User Guide](https://scikit-learn.org/stable/user_guide.html)
2. [Pedregosa et al. — Scikit-learn: Machine Learning in Python (JMLR, 2011)](https://jmlr.org/papers/v12/pedregosa11a.html)
3. [Buitinck et al. — API design for machine learning software (2013)](https://arxiv.org/abs/1309.0238)
4. [scikit-learn — Common pitfalls and recommended practices](https://scikit-learn.org/stable/common_pitfalls.html)
5. [scikit-learn — Choosing the right estimator](https://scikit-learn.org/stable/machine_learning_map.html)
6. [scikit-learn — Model persistence](https://scikit-learn.org/stable/model_persistence.html)
