숫자 데이터 차원 축소 및 분류 플롯

Beginner

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

소개

이 실습에서는 주성분 분석 (PCA) 과 로지스틱 회귀를 사용하여 차원 축소 및 분류 파이프라인을 구축합니다. scikit-learn 라이브러리를 사용하여 PCA 를 통해 숫자 데이터셋에서 비지도 차원 축소를 수행합니다. 그런 다음 분류를 위해 로지스틱 회귀 모델을 사용합니다. GridSearchCV 를 사용하여 PCA 의 차원을 설정하고 PCA 절단과 분류기 정규화의 최적 조합을 찾을 것입니다.

VM 팁

VM 시작이 완료되면 왼쪽 상단 모서리를 클릭하여 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, 표준화 스케일러, 로지스틱 회귀를 포함한 파이프라인 구성 요소를 정의합니다. 예시를 빠르게 하기 위해 허용 오차를 큰 값으로 설정합니다.

## PCA 절단과 분류기 정규화의 최적 조합을 검색하기 위한 파이프라인을 정의합니다.
pca = PCA()
## 입력을 정규화하기 위한 표준화 스케일러를 정의합니다.
scaler = StandardScaler()

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

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

데이터셋 로드 및 GridSearchCV 매개변수 정의

숫자 데이터셋을 로드하고 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 수행

PCA 절단과 분류기 정규화의 최적 조합을 찾기 위해 GridSearchCV 를 수행합니다.

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="선택된 n_components",
)
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 라이브러리를 사용하여 숫자 데이터셋에 대해 PCA 를 사용하여 비지도 차원 축소를 수행했습니다. 그런 다음 로지스틱 회귀 모델을 분류에 사용했습니다. GridSearchCV 를 사용하여 PCA 의 차원을 설정하고 PCA 절단과 분류기 정규화의 최적 조합을 찾았습니다. 각 구성 요소 수에 대한 PCA 스펙트럼과 분류 정확도를 플롯했습니다.