ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [n133] 고유벡터/고유값/PCA
    AI 부트캠프 2021. 9. 30. 11:52

    Linear Transformation

    선형 변환은 벡터들을 더하거나 스칼라 값을 곱하는 것으로, 선형 변환을 했을 때 방향은 변하지 않고 크기만 변한다. 

     

     

     

    고유 벡터 (Eigenvector)

    고유 벡터는 선형 변환을 취했을 때, 방향은 변하지 않고 크기만 변하는 벡터이다. 그 변한 크기가 고유 값 (eigenvalue)이다. 

    정방행렬 A(n x n인 경우)에 대해 위 식이 성립하는 0이 아닌 벡터 x가 존재 할 때, 람다 상수를 행렬 A의 고유값이라고 하며, 벡터 x를 이에 대응하는 고유 벡터 라고 한다.

    • 람다 상수 : 행렬 A의 고유 값
    • 벡터 x : 고유 벡터

    고유 값은 고유벡터 방향으로 얼만큼 크기가 커지는가를 의미한다. 고유값이 큰 순서대로 고유 벡터를 정렬하면, 중요한 순서대로 주성분을 구하는 것과 같다. 

    고유벡터를 통해 정사영 했을 때 분산은 고유값이다.

    import numpy as np
    
    a = np.array([[4, 2], [2, 4]])
    value, vector = np.linalg.eig(a)
    
    # eigenvalue, eigenvector 값이다.
    value, vector

    Out[7]:

    (array([6., 2.]), array([[ 0.70710678, -0.70710678], [ 0.70710678, 0.70710678]]))

     

     

    고차원의 문제 

    100 혹은 1000개 이상 feature의 수가 많은 데이터셋을 모델링하거나 분석할 때 생기는 문제점을 뜻한다.

    일반적으로, feature의 수 >= sample 수 인 경우, overfitting 이슈가 생긴다. 

     

     

    Dimension Reduction

     

    Feature Selection 

    feature를 전부 사용하는 대신, 제일 다양하게 분포 되어있는 feature를 사용한다. 즉, 덜 중요한 feature를 제거하는 방법. 

     

     

     

    Feature Extraction

    Selection 의 경우

    • Feature 해석이 쉽지만, feature들간의 연관성을 고려해야함.
    • 예시 : LASSO, Genetic algorithm 

     

    Extraction의 경우

    • Feature 들간의 연관성 고려되지만 Feature 해석이 어렵다. feature 수를 많이 줄일 수 있어서 큰 장점이다.
    • 예시 : PCA, Auto-encoder 

     

     

    Principal Component Analysis (PCA)

    • 차원 축소 기법 중 하나이다. 
    • PCA를 이용해서 낮은 차원으로 차원축소를 해서 고차원 데이터를 효과적으로 분석 가능하다.
    • 데이터의 분포가 정규성을 띌 때, 효과적으로 적용할 수 있다. 
    • 분류/예측 문제의 경우 PCA 보다는 PLS를 사용한다.

     

     

    PCA 과정

    1. 데이터 준비

    2. 각 데이터의 normalize을 진행한다. 즉, 각 열에 대해서 평균을 뺀다. 표준편차로 나눈다.

    3. z의 분산-공분산 매트릭스 계산한다.

    4. 분산-공분산 매트릭스의 고유벡터와 고유값 계산한다.

    5. 데이터를 고유 벡터에 정사영시킨다.

     

     

    라이브러리를 사용한 PCA

    from sklearn.preprocessing import StandardScaler, Normalizer
    from sklearn.decomposition import PCA
    
    print("Data: \n", df_final)
    
    # PCA를 적용하기 전에, StandardScaler로 데이터 Normalize를 한다.
    # 즉, 평균을 0, 표준편차를 1로 변환하는 작업.
    scaler = StandardScaler()
    Z = scaler.fit_transform(df_final)
    print("\n Standardized Data: \n", Z)
    
    # 2차원으로 차원 축소한다.
    pca = PCA(n_components=2)
    pca.fit(Z)
    
    print("\n 고유벡터 (Eigenvectors): \n", pca.components_)
    print("\n 고유값 (Eigenvalues): \n",pca.explained_variance_)
    
    B = pca.transform(Z)
    print("\n Projected Data: \n", B[:10])

     

    fig = plt.figure(figsize = (8, 8))
    ax = fig.add_subplot(1, 1, 1)
    ax.set_xlabel('PC1')
    ax.set_ylabel('PC2')
    
    sns.scatterplot(df_pca['PC1'],
                    df_pca['PC2'],
                    hue=df_pca['Species'],
                    s=100,
                    palette=sns.color_palette('muted', n_colors=3),)
    
    spec_list = ['Adelie', 'Chinstrap', 'Gentoo'] 
    ax.legend(spec_list, loc='lower right', title='species')
    plt.show()

     

    부트캠프 공부내용 한 눈에 보기

     

    [인덱스] 코드 스테이츠 AI 부트캠프

    구성 2021.09.09 ~ 2022.04 (총 28주) 배우는 내용 Section 1. 데이터 분석 입문 SPRINT 1. EDA SPRINT 2. Statistics SPRINT 3. DAY 1 EDA 데이터 전처리 Pandas in Colab 가설 검정 (t-test) T-Test 행렬 및 벡..

    da-journal.com

     

     

    'AI 부트캠프' 카테고리의 다른 글

    [프로젝트] 게임 설계를 위한 데이터 분석  (0) 2021.10.13
    [n134] Clustering  (0) 2021.10.01
    [n132] 선형 대수  (0) 2021.09.29
    [n131] 벡터 및 행렬  (0) 2021.09.28
    [n124] 베이즈 정리  (0) 2021.09.24

    댓글