Построение конвейера для цифр

Beginner

This tutorial is from open-source community. Access the source code

Введение

В этом практическом занятии мы построим конвейер для снижения размерности и классификации с использованием метода главных компонент (PCA) и логистической регрессии. Мы будем использовать библиотеку scikit-learn для выполнения несupervised уменьшения размерности на наборе данных digits с использованием PCA. Затем мы будем использовать модель логистической регрессии для классификации. Мы будем использовать GridSearchCV для настройки размерности PCA и поиска наилучшей комбинации усечения PCA и регуляризации классификатора.

Советы по использованию ВМ

После запуска ВМ нажмите в верхнем левом углу, чтобы переключиться на вкладку Notebook и получить доступ к Jupyter Notebook для практики.

Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook не загрузится полностью. Валидация операций не может быть автоматизирована из-за ограничений в Jupyter Notebook.

Если вы столкнетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.

Импортируем необходимые библиотеки

Сначала мы импортируем необходимые библиотеки для реализации конвейера.

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

from sklearn import datasets
from sklearn.decomposition import PCA
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline
from sklearn.model_selection import GridSearchCV
from sklearn.preprocessing import StandardScaler

Определяем компоненты конвейера

Мы определим компоненты конвейера, включая PCA, Standard Scaler и логистическую регрессию. Мы установим значение допуска на большое значение, чтобы сделать пример быстрее.

## Define a pipeline to search for the best combination of PCA truncation
## and classifier regularization.
pca = PCA()
## Define a Standard Scaler to normalize inputs
scaler = StandardScaler()

logistic = LogisticRegression(max_iter=10000, tol=0.1)

pipe = Pipeline(steps=[("scaler", scaler), ("pca", pca), ("logistic", logistic)])

Загружаем датасет и определяем параметры для GridSearchCV

Мы загрузим датасет digits и определим параметры для GridSearchCV. Мы установим параметр для усечения PCA и регуляризации классификатора.

X_digits, y_digits = datasets.load_digits(return_X_y=True)

param_grid = {
    "pca__n_components": [5, 15, 30, 45, 60],
    "logistic__C": np.logspace(-4, 4, 4),
}

Выполняем GridSearchCV

Мы выполним GridSearchCV, чтобы найти наилучшую комбинацию усечения PCA и регуляризации классификатора.

search = GridSearchCV(pipe, param_grid, n_jobs=2)
search.fit(X_digits, y_digits)

Выводим наилучшие параметры и оценку

Мы выведем наилучшие параметры и оценку, полученные из GridSearchCV.

print("Best parameter (CV score=%0.3f):" % search.best_score_)
print(search.best_params_)

Построение спектра PCA

Мы построим спектр PCA, чтобы визуализировать соотношение объясненной дисперсии каждого главного компонента.

pca.fit(X_digits)

fig, (ax0, ax1) = plt.subplots(nrows=2, sharex=True, figsize=(6, 6))
ax0.plot(
    np.arange(1, pca.n_components_ + 1), pca.explained_variance_ratio_, "+", linewidth=2
)
ax0.set_ylabel("PCA объясненное соотношение дисперсии")

ax0.axvline(
    search.best_estimator_.named_steps["pca"].n_components,
    linestyle=":",
    label="Выбранное количество компонентов",
)
ax0.legend(prop=dict(size=12))

Найти наилучшие результаты классификатора

Для каждого количества компонентов мы найдем наилучшие результаты классификатора.

results = pd.DataFrame(search.cv_results_)
components_col = "param_pca__n_components"
best_clfs = results.groupby(components_col).apply(
    lambda g: g.nlargest(1, "mean_test_score")
)

Построить точность классификации

Мы построим точность классификации для каждого количества компонентов.

best_clfs.plot(
    x=components_col, y="mean_test_score", yerr="std_test_score", legend=False, ax=ax1
)
ax1.set_ylabel("Точность классификации (валидация)")
ax1.set_xlabel("n_components")

plt.xlim(-1, 70)

plt.tight_layout()
plt.show()

Резюме

В этом практическом занятии мы научились создавать конвейер для уменьшения размерности и классификации с использованием Анализа главных компонент (PCA) и Логистической регрессии. Мы использовали библиотеку scikit - learn для выполнения несобственного уменьшения размерности на наборе данных digits с использованием PCA. Затем мы использовали модель логистической регрессии для классификации. Мы использовали GridSearchCV для настройки размерности PCA и поиска наилучшей комбинации усечения PCA и регуляризации классификатора. Мы построили спектр PCA и точность классификации для каждого количества компонентов.