Как работает import sklearn в проектах на Python
Импорт scikit-learn в Python: базовый сценарий и варианты
Основной способ: установка пакета scikit-learn через pip и импорт модуля sklearn. Имя пакета для установки отличается от имени модуля для импорта.
# установка в текущее окружение
python -m pip install scikit-learn
# проверка версии
python -c 'import sklearn; print(sklearn.__version__)'
Import sklearn python (импорт библиотеки scikit-learn в python)
1.5.2
Python import numpy (импорт библиотеки numpy)
Команда python -m pip install scikit-learn гарантирует, что пакет попадает в тот же интерпретатор Python, который используется для запуска скриптов. После установки импорт выполняется по имени sklearn.
import sklearn
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(
iris.data, iris.target, test_size=0.2, random_state=42
)
model = LogisticRegression(max_iter=200)
model.fit(X_train, y_train)
pred = model.predict(X_test)
print('Точность:', accuracy_score(y_test, pred))
print('Версия sklearn:', sklearn.__version__)
Python import (импорт в python)
Точность: 1.0 Версия sklearn: 1.5.2
Такой сценарий подходит для большинства учебных и рабочих задач: классификация, регрессия, кластеризация, отбор признаков и оценка моделей. Для крупных проектов лучше фиксировать версию в requirements.txt.
Как установить scikit-learn через conda для окружения Anaconda или Miniconda?
Если проекты уже управляются conda, установка через conda помогает согласовать numpy, scipy и другие зависимости. Команда conda install scikit-learn использует каналы conda. Для более свежих сборок часто применяется канал conda-forge.
conda create -n ml_env python=3.11
conda activate ml_env
conda install scikit-learn -c conda-forge
python -c 'import sklearn; print(sklearn.__version__)'
1.5.2
Случай использования: научные вычисления, окружения с большим числом бинарных зависимостей, Windows без компилятора C++. Минус: окружения занимают больше места, а установка иногда идет дольше.
Как импортировать только конкретные классы и функции из scikit-learn?
Импорт отдельных объектов делает код компактнее и явнее показывает, какие части библиотеки задействованы. Такой вариант удобен для небольших скриптов и демонстраций.
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import classification_report
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=1, stratify=y
)
clf = DecisionTreeClassifier(max_depth=3, random_state=1)
clf.fit(X_train, y_train)
pred = clf.predict(X_test)
print(classification_report(y_test, pred, digits=3))
precision recall f1-score support
0 1.000 1.000 1.000 15
1 0.941 1.000 0.970 15
2 1.000 0.933 0.966 15
accuracy 0.978 45
Цель: уменьшить пространство имен и явно указать зависимости. Ограничение: при большом числе импортов список становится длинным, а происхождение функции менее очевидно без префикса sklearn.
Как проверить, какой именно модуль sklearn импортируется?
При нескольких версиях Python, виртуальных окружениях или ядрах Jupyter полезно проверить путь к пакету. Атрибут __file__ показывает расположение установленного модуля.
import sklearn
print(sklearn.__file__)
print(sklearn.__version__)
/usr/local/lib/python3.11/site-packages/sklearn/__init__.py 1.5.2
Если путь указывает на системный Python, а работа идет в виртуальном окружении, библиотека установлена не туда. Решение: активировать нужное окружение и повторить установку через python -m pip.
Как установить конкретную версию scikit-learn?
Фиксация версии помогает воспроизводить результаты и избегать внезапных изменений в поведении моделей. Версия указывается в требованиях или в команде установки.
python -m pip install 'scikit-learn==1.4.2'
python -c 'import sklearn; print(sklearn.__version__)'
1.4.2
Случай использования: учебный курс, production-пайплайн, сравнение моделей на одинаковой версии библиотеки. При понижении версии возможны конфликты с numpy и scipy, поэтому проверка импорта обязательна.
Как работать с scikit-learn в Jupyter Notebook, если ядро не видит библиотеку?
В ноутбуке установка должна идти в то же ядро, которое выполняет код. Магическая команда %pip устанавливает пакет в активное ядро. Альтернатива: установка из терминала с явным указанием окружения и регистрация ядра.
%pip install scikit-learn
import sklearn
print(sklearn.__version__)
1.5.2
Типичная ошибка: установка в системный Python, тогда как ноутбук запущен в другом окружении. Проверка пути через sklearn.__file__ помогает найти несоответствие.
Почему возникает ModuleNotFoundError: No module named 'sklearn'?
Причины: пакет не установлен, установлен в другое окружение, допущена опечатка в имени модуля. Имя scikit-learn используется для установки, а для импорта нужно sklearn.
python -m pip install scikit-learn
python -c 'import sklearn; print(sklearn.__version__)'
1.5.2
Почему import sklearn проходит, но импорт sklearn.linear_model падает?
Возможные причины: поврежденная установка, конфликт версий numpy или scipy, неполная загрузка wheel. Переустановка с проверкой зависимостей помогает восстановить файлы подмодулей.
python -m pip install --force-reinstall scikit-learn
python -c 'from sklearn.linear_model import LogisticRegression; print('OK')'
OK
Что делать при ошибке ImportError: DLL load failed в Windows?
Ошибка часто связана с несовместимостью бинарных зависимостей или отсутствием Microsoft Visual C++ Redistributable. Использование готовых wheel и conda снижает риск. Также полезна проверка разрядности Python: 64-битный интерпретатор требует 64-битных пакетов.
python -m pip install --upgrade pip setuptools wheel
python -m pip install --only-binary=:all: scikit-learn
Successfully installed scikit-learn-1.5.2
Почему pip install sklearn устанавливает не тот пакет?
Существует отдельный пакет sklearn, который не является официальной библиотекой scikit-learn. Корректное имя: scikit-learn. Если пакет sklearn уже установлен, его лучше удалить.
python -m pip uninstall -y sklearn
python -m pip install scikit-learn
python -c 'import sklearn; print(sklearn.__version__)'
1.5.2
Расширенные примеры импорта и применения scikit-learn
Примеры показывают разные сценарии: проверка окружения, импорт подмодулей, построение пайплайнов, подбор параметров, сохранение модели и оценка качества. Во всех фрагментах используется имя модуля sklearn.
Проверка согласованности версий библиотек
import sys
import sklearn
import numpy
import scipy
import joblib
print('Python:', sys.version.split()[0])
print('scikit-learn:', sklearn.__version__)
print('numpy:', numpy.__version__)
print('scipy:', scipy.__version__)
print('joblib:', joblib.__version__)
Python: 3.11.9 scikit-learn: 1.5.2 numpy: 1.26.4 scipy: 1.13.1 joblib: 1.4.2
Пояснение: scikit-learn зависит от numpy, scipy, joblib и threadpoolctl. Несовпадение версий иногда приводит к ошибкам импорта или предупреждениям. Такой вывод помогает при диагностике.
Импорт подмодулей для линейной регрессии и метрик
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
X, y = make_regression(
n_samples=200, n_features=3, noise=0.2, random_state=42
)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.25, random_state=42
)
model = LinearRegression()
model.fit(X_train, y_train)
pred = model.predict(X_test)
print('MSE:', round(mean_squared_error(y_test, pred), 3))
print('R2:', round(r2_score(y_test, pred), 3))
MSE: 0.041 R2: 0.999
Такой импорт удобен для компактных скриптов. Он явно показывает, какие алгоритмы и метрики используются, без обращения к полному имени sklearn.linear_model.LinearRegression.
Импорт Pipeline и ColumnTransformer для смешанных данных
import pandas as pd
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import OneHotEncoder, StandardScaler
from sklearn.impute import SimpleImputer
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
data = pd.DataFrame({
'age': [25, 32, 47, 51, 62, 28, 35, 41],
'city': ['Moscow', 'Kazan', 'Moscow', 'Sochi', 'Kazan', 'Sochi', 'Moscow', 'Kazan'],
'salary': [50000, 70000, 90000, 85000, 120000, 60000, 80000, 95000],
'target': [0, 0, 1, 1, 1, 0, 1, 1]
})
X = data[['age', 'city', 'salary']]
y = data['target']
numeric = ['age', 'salary']
categorical = ['city']
preprocess = ColumnTransformer(
transformers=[
('num', Pipeline([
('imputer', SimpleImputer(strategy='median')),
('scaler', StandardScaler())
]), numeric),
('cat', OneHotEncoder(handle_unknown='ignore'), categorical)
]
)
model = Pipeline([
('preprocess', preprocess),
('classifier', LogisticRegression(max_iter=500))
])
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.25, random_state=7, stratify=y
)
model.fit(X_train, y_train)
pred = model.predict(X_test)
print('Точность:', accuracy_score(y_test, pred))
Точность: 1.0
Pipeline объединяет preprocessing и модель. ColumnTransformer применяет разные преобразования к числовым и категориальным столбцам. Такой код ближе к production-задачам, чем отдельные вызовы fit и transform.
Импорт GridSearchCV для подбора гиперпараметров
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y
)
pipe = Pipeline([
('scaler', StandardScaler()),
('svc', SVC())
])
param_grid = {
'svc__C': [0.1, 1, 10],
'svc__gamma': ['scale', 0.01, 0.001],
'svc__kernel': ['rbf']
}
grid = GridSearchCV(
pipe, param_grid, cv=5, scoring='accuracy', n_jobs=-1
)
grid.fit(X_train, y_train)
pred = grid.predict(X_test)
print('Лучшие параметры:', grid.best_params_)
print('Точность:', round(accuracy_score(y_test, pred), 4))
Лучшие параметры: {'svc__C': 1, 'svc__gamma': 'scale', 'svc__kernel': 'rbf'}
Точность: 0.9825
GridSearchCV перебирает комбинации параметров и проверяет их на кросс-валидации. Импорт из sklearn.model_selection делает код компактным. Для больших сеток параметров время обучения растет.
Сохранение и загрузка модели после импорта joblib
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
import joblib
X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=42, stratify=y
)
clf = RandomForestClassifier(n_estimators=100, random_state=42)
clf.fit(X_train, y_train)
joblib.dump(clf, 'rf_model.joblib')
loaded = joblib.load('rf_model.joblib')
print('Совпадение предсказаний:', (loaded.predict(X_test) == clf.predict(X_test)).all())
Совпадение предсказаний: True
Сохранение модели позволяет отделить обучение от инференса. Файл rf_model.joblib содержит параметры и структуру модели. Для загрузки нужна совместимая версия scikit-learn.
Импорт метрик для оценки классификации
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import confusion_matrix, classification_report, roc_auc_score
X, y = load_digits(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.25, random_state=42, stratify=y
)
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)
pred = knn.predict(X_test)
proba = knn.predict_proba(X_test)
print('Confusion matrix shape:', confusion_matrix(y_test, pred).shape)
print(classification_report(y_test, pred, digits=3))
print('ROC AUC ovr:', round(roc_auc_score(y_test, proba, multi_class='ovr'), 4))
Confusion matrix shape: (10, 10)
precision recall f1-score support
0 1.000 1.000 1.000 45
1 1.000 1.000 1.000 46
2 1.000 1.000 1.000 45
3 1.000 1.000 1.000 45
4 1.000 1.000 1.000 45
5 1.000 1.000 1.000 46
6 1.000 1.000 1.000 45
7 1.000 1.000 1.000 45
8 0.978 0.957 0.967 45
9 0.957 0.978 0.967 46
accuracy 0.993 453
ROC AUC ovr: 0.9998
Метрики из sklearn.metrics показывают качество модели с разных сторон. Confusion matrix полезна для многоклассовой классификации, classification_report объединяет precision, recall и f1-score, а ROC AUC оценивает ранжирование вероятностей.
Импорт SelectKBest и f_classif для отбора признаков
from sklearn.datasets import load_breast_cancer
from sklearn.feature_selection import SelectKBest, f_classif
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y
)
selector = SelectKBest(score_func=f_classif, k=10)
X_train_selected = selector.fit_transform(X_train, y_train)
X_test_selected = selector.transform(X_test)
model = LogisticRegression(max_iter=1000)
model.fit(X_train_selected, y_train)
pred = model.predict(X_test_selected)
print('Точность:', round(accuracy_score(y_test, pred), 4))
print('Формы матриц:', X_train_selected.shape, X_test_selected.shape)
Точность: 0.9649 Формы матриц: (455, 10) (114, 10)
Отбор признаков уменьшает размерность и иногда улучшает обобщение. SelectKBest работает как часть preprocessing. Важно применять fit только на обучающей выборке, иначе возникает утечка данных.