더북(TheBook)

5.1.5 사이킷런의 주성분 분석

이전 절에서처럼 단계별로 PCA를 구현해 보면 PCA의 작동 원리를 이해하는 데 도움이 됩니다. 이제는 사이킷런에 구현된 PCA 클래스를 사용하는 법을 알아보겠습니다.

PCA 클래스는 사이킷런의 변환기 클래스 중 하나입니다. 훈련 데이터를 사용하여 모델을 훈련하고 같은 모델 파라미터를 사용하여 훈련 데이터셋과 테스트 데이터셋을 변환합니다. 사이킷런의 PCA 클래스를 Wine 데이터셋의 훈련 데이터셋에 적용하고 로지스틱 회귀로 변환된 샘플 데이터를 분류해 보겠습니다. 결정 경계는 2장에서 만든 plot_decision_regions 함수를 사용하여 그립니다.

from matplotlib.colors import ListedColormap

def plot_decision_regions(X, y, classifier, resolution=0.02):

    # 마커와 컬러맵을 준비합니다
    markers = ('s', 'x', 'o', '^', 'v')
    colors = ('red', 'blue', 'lightgreen', 'gray', 'cyan')
    cmap = ListedColormap(colors[:len(np.unique(y))])

    # 결정 경계를 그립니다
    x1_min, x1_max = X[:, 0].min() - 1, X[:, 0].max() + 1
    x2_min, x2_max = X[:, 1].min() - 1, X[:, 1].max() + 1
    xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, resolution),
                           np.arange(x2_min, x2_max, resolution))
    Z = classifier.predict(np.array([xx1.ravel(), xx2.ravel()]).T)
    Z = Z.reshape(xx1.shape)
    plt.contourf(xx1, xx2, Z, alpha=0.4, cmap=cmap)
    plt.xlim(xx1.min(), xx1.max())
    plt.ylim(xx2.min(), xx2.max())

    # 클래스 샘플을 표시합니다
    for idx, cl in enumerate(np.unique(y)):
        plt.scatter(x=X[y == cl, 0],
                    y=X[y == cl, 1],
                    alpha=0.6,
                    c=cmap.colors[idx],
                    edgecolor='black',
                    marker=markers[idx],
                    label=cl)
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.