ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • KT AIVLE School DX트랙 6주차-머신러닝(비지도)
    KT_Aivle_School/Python 2024. 4. 19. 23:01

    1. PCA(Principal Component Analysis, 주성분 분석)

    PCA(Principal Component Analysis, 주성분 분석)는 데이터의 특성(Feature) 수가 많을 때, 이를 더 적은 수의 핵심적인 특성으로 요약하여 데이터의 복잡성을 줄이고, 계산 효율성을 개선하는 것이 목적입니다.

    PCA는 데이터의 분산을 최대로 보존하면서, 고차원 데이터를 저차원으로 변환합니다. 이 과정에서 각 새로운 축(주성분)은 원래 데이터의 분산을 최대한 많이 설명하는 방향으로 설정됩니다. 첫 번째 주성분은 가장 많은 분산을 설명하고, 그 다음 주성분은 첫 번째 주성분과 직교(orthogonal)하면서 남은 분산을 가장 많이 설명하는 방향으로 설정됩니다. 이런 방식으로 주성분들이 순차적으로 결정됩니다.

    PCA를 사용한 차원 축소의 핵심 이점은 다음과 같습니다:

    1. 데이터 시각화: 고차원 데이터를 2차원이나 3차원으로 축소하여 데이터의 구조와 패턴을 시각적으로 이해하기 용이합니다.
    2. 노이즈 제거: 주요한 변동성만을 보존하고, 덜 중요한 변동성(노이즈로 간주될 수 있는)을 제거함으로써 데이터를 정제합니다.
    3. 효율성 증가: 차원을 줄임으로써 학습 알고리즘의 계산 비용을 줄이고, 과적합(overfitting)의 위험을 감소시킬 수 있습니다.

    비지도 학습 방법이기 때문에, PCA는 타겟 변수(레이블) 없이 입력 데이터만을 사용하여 작동합니다. 이는 데이터의 내재된 구조를 탐색하는 데 유용하게 활용됩니다.

    2. 차원 축소 계념 시각화

    • 원본데이터 시각화

    3차원 Scatter

    • PCA를 이용해 2개 주성분으로 차원 축소

    2차원 Scatter

    3. PCA 사용예제

    import pandas as pd
    from sklearn.preprocessing import MinMaxScaler
    from sklearn.decomposition import PCA
    import matplotlib.pyplot as plt
    import seaborn as sns
    
    # 데이터 로딩
    iris = pd.read_csv("iris.csv")
    target = 'Species'
    x = iris.drop(target, axis = 1)
    y = iris.loc[:, target]
    
    # 스케일링
    scaler = MinMaxScaler()
    x_scaled = scaler.fit_transform(x)
    
    # 주성분 분석
    pca = PCA(n_components=2) # 2개의 주성분만 선택
    x_pca = pca.fit_transform(x_scaled)
    
    # 기존 데이터에 차원 축소된 데이터 병합
    x_pca_df = pd.DataFrame(data=x_pca, columns=['PC1', 'PC2'])
    final_df = pd.concat([x_pca_df, y], axis=1)
    
    # 두 개 주성분 시각화
    plt.figure(figsize=(8, 6))
    sns.scatterplot(x='PC1', y='PC2', hue='Species', style='Species', palette='bright', data=final_df)
    plt.title('PCA on Iris Dataset')
    plt.xlabel('Principal Component 1')
    plt.ylabel('Principal Component 2')
    plt.legend(loc='best')
    plt.show()
    
Designed by Tistory.