주성분분석(PCA: Principal Component Analysis)

주성분 분석(PCA, Principal Component Analysis)은 고차원 데이터를 저차원으로 축소하는 데 사용되는 기법입니다. 이 방법은 데이터의 분산을 최대화하는 새로운 축(주성분)을 찾아 데이터를 재구성합니다. PCA는 데이터의 주요 특성을 유지하면서 차원을 줄여, 시각화, 노이즈 감소, 데이터 압축 등의 목적으로 사용됩니다.

\(\)

주성분 분석의 주요 개념

분산 (Variance):

    • 데이터의 분산은 데이터 값이 평균값으로부터 얼마나 퍼져 있는지를 나타냅니다. PCA는 분산이 최대인 방향으로 주성분을 찾습니다.

    주성분 (Principal Components):

      • 주성분은 데이터의 분산을 최대화하는 새로운 축입니다. 첫 번째 주성분은 가장 큰 분산을 설명하고, 두 번째 주성분은 첫 번째 주성분과 직교(orthogonal)하면서 그 다음으로 큰 분산을 설명합니다.

      고유값 (Eigenvalues)와 고유벡터 (Eigenvectors):

        • 공분산 행렬의 고유값과 고유벡터를 사용하여 주성분을 찾습니다. 고유값은 주성분의 중요도를 나타내고, 고유벡터는 주성분의 방향을 나타냅니다.

        PCA의 절차

        데이터 표준화:

          • 데이터의 각 변수(특성)가 다른 단위를 가지고 있거나 크기가 다를 수 있으므로, 표준화를 통해 평균이 0이고 분산이 1이 되도록 변환합니다.

          공분산 행렬 계산:

            • 표준화된 데이터의 공분산 행렬을 계산합니다.

            고유값과 고유벡터 계산:

              • 공분산 행렬의 고유값과 고유벡터를 계산하여 주성분을 찾습니다.

              주성분 선택:

                • 고유값의 크기에 따라 중요한 주성분을 선택합니다. 일반적으로 누적 설명 분산이 70-90% 이상인 주성분을 선택합니다.

                데이터 변환:

                  • 원 데이터를 선택한 주성분으로 변환하여 저차원 데이터를 생성합니다.

                  PCA의 예시 (Python 코드)

                  다음은 Python을 사용하여 PCA를 수행하는 간단한 예시입니다.

                  import numpy as np
                  import pandas as pd
                  from sklearn.decomposition import PCA
                  import matplotlib.pyplot as plt
                  
                  # 예시 데이터 생성
                  np.random.seed(0)
                  data = np.random.randn(100, 5)  # 100개의 샘플과 5개의 특성
                  
                  # 데이터프레임으로 변환
                  df = pd.DataFrame(data, columns=['Feature1', 'Feature2', 'Feature3', 'Feature4', 'Feature5'])
                  
                  # 데이터 표준화
                  df_standardized = (df - df.mean()) / df.std()
                  
                  # PCA 모델 생성 및 학습
                  pca = PCA(n_components=2)
                  principal_components = pca.fit_transform(df_standardized)
                  
                  # 주성분 데이터프레임 생성
                  df_pca = pd.DataFrame(data=principal_components, columns=['Principal Component 1', 'Principal Component 2'])
                  
                  # 주성분 분석 결과 시각화
                  plt.figure(figsize=(10, 6))
                  plt.scatter(df_pca['Principal Component 1'], df_pca['Principal Component 2'])
                  plt.xlabel('Principal Component 1')
                  plt.ylabel('Principal Component 2')
                  plt.title('PCA Result')
                  plt.grid(True)
                  plt.show()
                  
                  # 설명된 분산 비율 출력
                  print('Explained Variance Ratio:', pca.explained_variance_ratio_)

                  결과 해석

                  분산 설명 비율 (Explained Variance Ratio):

                    • pca.explained_variance_ratio_는 각 주성분이 전체 분산에서 차지하는 비율을 나타냅니다.
                    • 예를 들어, 첫 번째 주성분이 70%의 분산을 설명하고, 두 번째 주성분이 20%의 분산을 설명하면, 이 두 주성분이 전체 분산의 90%를 설명합니다.

                    시각화:

                      • 주성분 분석 결과를 2D 평면에 시각화하여, 데이터의 주요 구조와 패턴을 확인할 수 있습니다.
                      • 각 점은 변환된 데이터 포인트를 나타내며, 주성분 공간에서의 위치를 보여줍니다.

                      PCA의 장점

                      차원 축소:

                        • 데이터의 차원을 줄여, 시각화 및 계산 효율성을 높일 수 있습니다.

                        노이즈 감소:

                          • 주요 성분만 남기고 노이즈 성분을 제거하여 데이터의 품질을 향상시킬 수 있습니다.

                          데이터 압축:

                            • 데이터의 중요한 정보를 유지하면서 데이터 크기를 줄일 수 있습니다.

                            변수 간의 상관 관계 제거:

                              • 주성분은 서로 직교하므로, 상관 관계가 있는 변수들을 독립적인 변수들로 변환할 수 있습니다.

                              PCA의 한계

                              해석의 어려움:

                                • 주성분이 원래 변수의 선형 결합으로 이루어지므로, 해석이 어려울 수 있습니다.

                                선형성 가정:

                                  • PCA는 선형 변환을 기반으로 하므로, 비선형적인 구조를 잘 설명하지 못할 수 있습니다.

                                  표준화 필요:

                                    • 변수들의 단위나 범위가 다를 경우, 표준화가 필요합니다.

                                    주성분 분석은 데이터의 차원을 축소하고, 중요한 패턴을 발견하는 데 유용한 기법입니다. 이를 통해 데이터의 구조를 이해하고, 다양한 분석 및 머신러닝 기법에 활용할 수 있습니다.

                                    주성분 분석 방법

                                    주성분 분석(PCA, Principal Component Analysis)은 데이터의 주요 변동성을 설명하는 주성분을 찾고, 이를 통해 고차원 데이터를 저차원으로 축소하는 방법입니다. PCA는 데이터의 분산을 최대한 보존하면서, 주요 특성을 유지하고, 차원을 축소하여 데이터 분석을 용이하게 만듭니다. 다음은 PCA의 절차와 방법을 단계별로 설명합니다.

                                    PCA의 단계

                                    1. 데이터 표준화
                                    2. 공분산 행렬 계산
                                    3. 고유값과 고유벡터 계산
                                    4. 주성분 선택
                                    5. 데이터 변환

                                    1. 데이터 표준화

                                    PCA를 적용하기 전에 데이터 표준화는 중요한 단계입니다. 이는 각 변수(특성)의 평균을 0, 분산을 1로 변환하는 과정입니다. 데이터가 다른 단위를 가지거나 크기 차이가 있을 경우, 표준화는 공정한 비교를 가능하게 합니다.

                                    \[
                                    X_{\text{standardized}} = \frac{X – \mu}{\sigma}
                                    \]

                                    여기서 \( X \)는 원본 데이터, \( \mu \)는 각 변수의 평균, \( \sigma \)는 각 변수의 표준편차입니다.

                                    2. 공분산 행렬 계산

                                    표준화된 데이터의 공분산 행렬을 계산합니다. 공분산 행렬은 변수 간의 분산과 공분산을 나타내며, 데이터의 분산 구조를 이해하는 데 도움을 줍니다.

                                    \[
                                    \mathbf{Cov} = \frac{1}{n-1} \sum_{i=1}^n (X_i – \bar{X})(X_i – \bar{X})^T
                                    \]

                                    여기서 \( X_i \)는 \( i \)번째 표본, \( \bar{X} \)는 평균 벡터입니다.

                                    3. 고유값과 고유벡터 계산

                                    공분산 행렬의 고유값(eigenvalues)과 고유벡터(eigenvectors)를 계산합니다. 고유값은 주성분의 중요도를 나타내고, 고유벡터는 주성분의 방향을 나타냅니다.

                                    \[
                                    \mathbf{Cov} \mathbf{v} = \lambda \mathbf{v}
                                    \]

                                    여기서 \( \mathbf{v} \)는 고유벡터, \( \lambda \)는 고유값입니다.

                                    4. 주성분 선택

                                    고유값의 크기에 따라 주성분을 선택합니다. 고유값이 큰 주성분일수록 데이터의 분산을 많이 설명합니다. 일반적으로 누적 설명 분산 비율이 70-90% 이상이 되는 주성분을 선택합니다.

                                    \[
                                    \text{Explained Variance Ratio} = \frac{\lambda_i}{\sum \lambda}
                                    \]

                                    여기서 ( \lambda_i )는 ( i )번째 고유값입니다.

                                    5. 데이터 변환

                                    선택한 주성분을 사용하여 원본 데이터를 새로운 주성분 공간으로 변환합니다. 이 변환된 데이터는 저차원 공간에서 원본 데이터의 주요 특성을 유지합니다.

                                    [
                                    \mathbf{Z} = \mathbf{X} \mathbf{W}
                                    ]

                                    여기서 ( \mathbf{Z} )는 주성분으로 변환된 데이터, ( \mathbf{X} )는 표준화된 원본 데이터, ( \mathbf{W} )는 선택된 주성분(고유벡터)로 이루어진 행렬입니다.

                                    PCA의 예시 (Python 코드)

                                    다음은 PCA를 Python을 사용하여 구현하는 간단한 예시입니다.

                                    import numpy as np
                                    import pandas as pd
                                    from sklearn.decomposition import PCA
                                    import matplotlib.pyplot as plt
                                    
                                    # 예시 데이터 생성
                                    np.random.seed(0)
                                    data = np.random.randn(100, 5)  # 100개의 샘플과 5개의 특성
                                    
                                    # 데이터프레임으로 변환
                                    df = pd.DataFrame(data, columns=['Feature1', 'Feature2', 'Feature3', 'Feature4', 'Feature5'])
                                    
                                    # 데이터 표준화
                                    df_standardized = (df - df.mean()) / df.std()
                                    
                                    # PCA 모델 생성 및 학습
                                    pca = PCA(n_components=2)
                                    principal_components = pca.fit_transform(df_standardized)
                                    
                                    # 주성분 데이터프레임 생성
                                    df_pca = pd.DataFrame(data=principal_components, columns=['Principal Component 1', 'Principal Component 2'])
                                    
                                    # 주성분 분석 결과 시각화
                                    plt.figure(figsize=(10, 6))
                                    plt.scatter(df_pca['Principal Component 1'], df_pca['Principal Component 2'])
                                    plt.xlabel('Principal Component 1')
                                    plt.ylabel('Principal Component 2')
                                    plt.title('PCA Result')
                                    plt.grid(True)
                                    plt.show()
                                    
                                    # 설명된 분산 비율 출력
                                    print('Explained Variance Ratio:', pca.explained_variance_ratio_)

                                    결과 해석

                                    1. 분산 설명 비율 (Explained Variance Ratio):
                                    • pca.explained_variance_ratio_는 각 주성분이 전체 분산에서 차지하는 비율을 나타냅니다.
                                    • 예를 들어, 첫 번째 주성분이 70%의 분산을 설명하고, 두 번째 주성분이 20%의 분산을 설명하면, 이 두 주성분이 전체 분산의 90%를 설명합니다.
                                    1. 시각화:
                                    • 주성분 분석 결과를 2D 평면에 시각화하여, 데이터의 주요 구조와 패턴을 확인할 수 있습니다.
                                    • 각 점은 변환된 데이터 포인트를 나타내며, 주성분 공간에서의 위치를 보여줍니다.

                                    요약

                                    PCA는 데이터의 차원을 축소하고, 중요한 패턴을 발견하는 데 유용한 기법입니다. 이를 통해 데이터의 구조를 이해하고, 다양한 분석 및 머신러닝 기법에 활용할 수 있습니다.

                                    주성분 분석 예시

                                    다음은 PCA를 사용하여 보다 구체적인 예시를 보여주는 예입니다. 이 예제에서는 더 복잡한 데이터를 사용하여 PCA를 적용하고, 결과를 해석하는 방법을 설명합니다. 사용되는 데이터셋은 Iris 데이터셋으로, 세 가지 품종의 꽃을 다양한 특성으로 구분합니다.

                                    1. 데이터셋 설명

                                    Iris 데이터셋은 다음과 같은 특성을 포함합니다:

                                    • Sepal Length (꽃받침 길이)
                                    • Sepal Width (꽃받침 너비)
                                    • Petal Length (꽃잎 길이)
                                    • Petal Width (꽃잎 너비)
                                    • Species (품종)

                                    2. 데이터 준비 및 PCA 적용

                                    import numpy as np
                                    import pandas as pd
                                    import matplotlib.pyplot as plt
                                    from sklearn.datasets import load_iris
                                    from sklearn.decomposition import PCA
                                    from sklearn.preprocessing import StandardScaler
                                    
                                    # Iris 데이터셋 로드
                                    iris = load_iris()
                                    X = iris.data
                                    y = iris.target
                                    target_names = iris.target_names
                                    
                                    # 데이터프레임으로 변환
                                    df = pd.DataFrame(X, columns=iris.feature_names)
                                    df['Species'] = pd.Categorical.from_codes(y, target_names)
                                    
                                    # 데이터 표준화
                                    scaler = StandardScaler()
                                    X_standardized = scaler.fit_transform(X)
                                    
                                    # PCA 모델 생성 및 학습
                                    pca = PCA(n_components=2)
                                    principal_components = pca.fit_transform(X_standardized)
                                    
                                    # 주성분 데이터프레임 생성
                                    df_pca = pd.DataFrame(data=principal_components, columns=['Principal Component 1', 'Principal Component 2'])
                                    df_pca['Species'] = df['Species']
                                    
                                    # PCA 결과 시각화
                                    plt.figure(figsize=(10, 6))
                                    colors = ['navy', 'turquoise', 'darkorange']
                                    lw = 2
                                    
                                    for color, target_name in zip(colors, target_names):
                                        plt.scatter(df_pca.loc[df_pca['Species'] == target_name, 'Principal Component 1'],
                                                    df_pca.loc[df_pca['Species'] == target_name, 'Principal Component 2'],
                                                    color=color, alpha=0.8, lw=lw,
                                                    label=target_name)
                                    
                                    plt.legend(loc='best', shadow=False, scatterpoints=1)
                                    plt.title('PCA of IRIS dataset')
                                    plt.xlabel('Principal Component 1')
                                    plt.ylabel('Principal Component 2')
                                    plt.grid(True)
                                    plt.show()
                                    
                                    # 설명된 분산 비율 출력
                                    print('Explained Variance Ratio:', pca.explained_variance_ratio_)

                                    3. 결과 해석

                                    1. 분산 설명 비율 (Explained Variance Ratio):
                                    • pca.explained_variance_ratio_는 각 주성분이 전체 분산에서 차지하는 비율을 나타냅니다.
                                    • 예를 들어, 첫 번째 주성분이 72.77%의 분산을 설명하고, 두 번째 주성분이 23.03%의 분산을 설명하면, 이 두 주성분이 전체 분산의 95.80%를 설명합니다.
                                    Explained Variance Ratio: [0.72770452 0.23030523]
                                    1. 시각화:
                                    • 주성분 분석 결과를 2D 평면에 시각화하여, 데이터의 주요 구조와 패턴을 확인할 수 있습니다.
                                    • 각 점은 변환된 데이터 포인트를 나타내며, 색상은 서로 다른 품종을 나타냅니다.
                                    • 첫 번째 주성분과 두 번째 주성분으로 변환된 데이터 포인트를 통해 각 품종 간의 차이를 시각적으로 확인할 수 있습니다.

                                    이 예시는 PCA를 통해 고차원 데이터를 저차원으로 축소하고, 시각화를 통해 데이터의 주요 구조를 이해하는 방법을 보여줍니다. PCA는 특히 데이터의 분산을 최대한 보존하면서 차원을 축소하는 데 유용하며, 이를 통해 데이터 분석 및 시각화의 효율성을 높일 수 있습니다.

                                    PCA & ICA 비교

                                    주성분 분석(PCA, Principal Component Analysis)와 독립 성분 분석(ICA, Independent Component Analysis)는 모두 고차원 데이터를 저차원으로 축소하거나 데이터를 변환하는 기법입니다. 그러나 그들의 목적, 적용 방법, 그리고 데이터 변환의 특성에서 중요한 차이점이 있습니다. 아래는 PCA와 ICA의 주요 차이점을 설명합니다.

                                    1. 목적과 목표

                                    PCA (Principal Component Analysis):

                                    • 목적: 데이터의 분산을 최대한 보존하면서 고차원 데이터를 저차원으로 축소하는 것입니다.
                                    • 목표: 데이터의 주요 변동성을 설명하는 직교(orthogonal) 주성분을 찾는 것입니다. 각 주성분은 최대한의 분산을 가지며, 서로 직교합니다.

                                    ICA (Independent Component Analysis):

                                    • 목적: 서로 통계적으로 독립적인 성분을 추출하는 것입니다.
                                    • 목표: 데이터의 원천 신호를 복원하는 것입니다. 이는 특히 신호 처리, 이미지 복원, 뇌파 분석 등에서 중요한 역할을 합니다.

                                    2. 데이터 변환 방법

                                    PCA:

                                    • 변환: 공분산 행렬의 고유값과 고유벡터를 사용하여 데이터를 변환합니다. 주성분은 데이터의 최대 분산 방향을 따릅니다.
                                    • 결과: 주성분은 서로 직교하며, 원래 데이터의 분산을 최대한 설명합니다.

                                    ICA:

                                    • 변환: 통계적 독립성을 극대화하는 방향을 찾습니다. 주로 비선형 최적화 기법을 사용합니다.
                                    • 결과: 독립 성분은 서로 통계적으로 독립적입니다. 이는 고차원 데이터에서 서로 독립적인 신호나 특징을 분리하는 데 유용합니다.

                                    3. 가정

                                    PCA:

                                    • 선형성: 데이터의 구조가 선형적이라는 가정을 합니다.
                                    • 정규성: 데이터가 다변량 정규 분포를 따른다는 가정을 암묵적으로 포함할 수 있습니다.

                                    ICA:

                                    • 독립성: 각 성분이 서로 통계적으로 독립적이라는 가정을 합니다.
                                    • 비정규성: 데이터가 정규 분포를 따르지 않는다고 가정합니다.

                                    4. 결과의 해석

                                    PCA:

                                    • 주성분: 데이터의 분산을 최대한 설명하는 직교 성분.
                                    • 해석: 주성분은 데이터의 주요 변동 방향을 나타내며, 분산 비율로 설명됩니다.

                                    ICA:

                                    • 독립 성분: 서로 독립적인 성분.
                                    • 해석: 각 성분은 원천 신호를 나타내며, 주로 신호 처리에서 원 신호를 복원하는 데 사용됩니다.

                                    5. 응용 분야

                                    PCA:

                                    • 차원 축소: 고차원 데이터를 저차원으로 축소하여 시각화, 노이즈 감소, 데이터 압축 등에 사용.
                                    • 데이터 전처리: 변수 간의 상관 관계를 제거하여 분석 및 모델링의 효율성을 높입니다.
                                    • 이미지 압축: 이미지 데이터의 차원을 축소하여 저장 공간을 줄이고, 처리 속도를 향상시킵니다.

                                    ICA:

                                    • 신호 분리: 혼합 신호에서 원천 신호를 분리하는 데 사용. 예: 뇌파(EEG) 신호 분석, 음성 신호 분리.
                                    • 이미지 복원: 혼합된 이미지를 원래의 독립적인 이미지로 분리.
                                    • 금융 데이터 분석: 금융 데이터의 독립적인 요소를 식별하여 시장 분석에 사용.

                                    Python 예시 코드

                                    아래는 PCA와 ICA를 각각 수행하는 간단한 Python 예시입니다.

                                    import numpy as np
                                    import pandas as pd
                                    from sklearn.decomposition import PCA, FastICA
                                    import matplotlib.pyplot as plt
                                    
                                    # 예시 데이터 생성
                                    np.random.seed(0)
                                    data = np.random.randn(100, 5)  # 100개의 샘플과 5개의 특성
                                    
                                    # 데이터프레임으로 변환
                                    df = pd.DataFrame(data, columns=['Feature1', 'Feature2', 'Feature3', 'Feature4', 'Feature5'])
                                    
                                    # PCA
                                    pca = PCA(n_components=2)
                                    pca_components = pca.fit_transform(df)
                                    
                                    # ICA
                                    ica = FastICA(n_components=2)
                                    ica_components = ica.fit_transform(df)
                                    
                                    # PCA 결과 시각화
                                    plt.figure(figsize=(12, 6))
                                    
                                    plt.subplot(1, 2, 1)
                                    plt.scatter(pca_components[:, 0], pca_components[:, 1])
                                    plt.title('PCA Result')
                                    plt.xlabel('Principal Component 1')
                                    plt.ylabel('Principal Component 2')
                                    plt.grid(True)
                                    
                                    # ICA 결과 시각화
                                    plt.subplot(1, 2, 2)
                                    plt.scatter(ica_components[:, 0], ica_components[:, 1])
                                    plt.title('ICA Result')
                                    plt.xlabel('Independent Component 1')
                                    plt.ylabel('Independent Component 2')
                                    plt.grid(True)
                                    
                                    plt.show()

                                    결과 해석

                                    • PCA 결과: 주성분 공간에서 데이터의 분산을 최대화하는 방향으로 변환된 데이터 포인트.
                                    • ICA 결과: 통계적으로 독립적인 성분 공간에서 변환된 데이터 포인트.

                                    이 예시는 PCA와 ICA가 어떻게 데이터를 변환하는지, 그리고 결과가 어떻게 다른지를 보여줍니다. PCA는 데이터의 분산을 최대화하는 주성분을 찾고, ICA는 데이터의 독립적인 성분을 찾는 데 중점을 둡니다. 이 차이는 각 방법이 데이터 분석과 신호 처리에서 어떻게 사용되는지에 영향을 미칩니다.

                                    PCA 와 LDA 비교

                                    주성분 분석(PCA, Principal Component Analysis)과 선형 판별 분석(LDA, Linear Discriminant Analysis)는 모두 차원 축소와 데이터 변환을 위해 사용되는 기법입니다. 그러나 그들의 목적, 적용 방법, 그리고 데이터 변환의 특성에서 중요한 차이점이 있습니다. 아래는 PCA와 LDA의 주요 차이점을 설명합니다.

                                    1. 목적과 목표

                                    PCA (Principal Component Analysis):

                                    • 목적: 데이터의 분산을 최대한 보존하면서 고차원 데이터를 저차원으로 축소하는 것입니다.
                                    • 목표: 데이터의 주요 변동성을 설명하는 직교 주성분을 찾는 것입니다. PCA는 주로 데이터의 구조를 이해하고, 시각화 및 노이즈 감소를 위해 사용됩니다.

                                    LDA (Linear Discriminant Analysis):

                                    • 목적: 클래스 간의 분리를 최대화하면서 고차원 데이터를 저차원으로 축소하는 것입니다.
                                    • 목표: 클래스 간의 분산을 최대화하고, 클래스 내의 분산을 최소화하는 방향을 찾는 것입니다. LDA는 주로 분류 문제에서 클래스 간의 구분을 명확히 하기 위해 사용됩니다.

                                    2. 데이터 변환 방법

                                    PCA:

                                    • 변환: 공분산 행렬의 고유값과 고유벡터를 사용하여 데이터를 변환합니다. 주성분은 데이터의 최대 분산 방향을 따릅니다.
                                    • 결과: 주성분은 서로 직교하며, 원래 데이터의 분산을 최대한 설명합니다.

                                    LDA:

                                    • 변환: 클래스 간의 분산과 클래스 내의 분산을 고려하여, 가장 잘 분리되는 방향을 찾습니다. 이를 위해 산포 행렬(scatter matrix)을 사용합니다.
                                    • 결과: LDA는 클래스 간의 분리를 최대화하는 방향을 찾으며, 클래스 간의 분산 대비 클래스 내의 분산 비율을 최대화합니다.

                                    3. 가정

                                    PCA:

                                    • 선형성: 데이터의 구조가 선형적이라는 가정을 합니다.
                                    • 정규성: 데이터가 다변량 정규 분포를 따른다는 가정을 암묵적으로 포함할 수 있습니다.

                                    LDA:

                                    • 정규성: 각 클래스의 데이터가 정규 분포를 따른다고 가정합니다.
                                    • 동일한 공분산 행렬: 모든 클래스가 동일한 공분산 행렬을 가진다고 가정합니다.
                                    • 선형성: 클래스 간의 경계가 선형적이라고 가정합니다.

                                    4. 결과의 해석

                                    PCA:

                                    • 주성분: 데이터의 분산을 최대한 설명하는 직교 성분.
                                    • 해석: 주성분은 데이터의 주요 변동 방향을 나타내며, 분산 비율로 설명됩니다.

                                    LDA:

                                    • 판별 함수: 클래스 간의 분리를 최대화하는 성분.
                                    • 해석: 판별 함수는 데이터 포인트가 속할 클래스를 결정하는 기준을 제공합니다.

                                    5. 응용 분야

                                    PCA:

                                    • 차원 축소: 고차원 데이터를 저차원으로 축소하여 시각화, 노이즈 감소, 데이터 압축 등에 사용.
                                    • 데이터 전처리: 변수 간의 상관 관계를 제거하여 분석 및 모델링의 효율성을 높입니다.
                                    • 이미지 압축: 이미지 데이터의 차원을 축소하여 저장 공간을 줄이고, 처리 속도를 향상시킵니다.

                                    LDA:

                                    • 분류 문제: 클래스 간의 분리를 최대화하여 분류 모델의 성능을 향상시킵니다.
                                    • 특징 추출: 클래스 간의 차이를 강조하는 특징을 추출하여 분류 모델의 성능을 향상시킵니다.
                                    • 얼굴 인식: 얼굴 이미지에서 각 클래스(개인)를 구분하는 특징을 추출하는 데 사용됩니다.

                                    Python 예시 코드

                                    아래는 PCA와 LDA를 각각 수행하는 간단한 Python 예시입니다.

                                    PCA 예시

                                    import numpy as np
                                    import pandas as pd
                                    import matplotlib.pyplot as plt
                                    from sklearn.decomposition import PCA
                                    from sklearn.preprocessing import StandardScaler
                                    from sklearn.datasets import load_iris
                                    
                                    # Iris 데이터셋 로드
                                    iris = load_iris()
                                    X = iris.data
                                    y = iris.target
                                    target_names = iris.target_names
                                    
                                    # 데이터 표준화
                                    scaler = StandardScaler()
                                    X_standardized = scaler.fit_transform(X)
                                    
                                    # PCA 모델 생성 및 학습
                                    pca = PCA(n_components=2)
                                    principal_components = pca.fit_transform(X_standardized)
                                    
                                    # 주성분 데이터프레임 생성
                                    df_pca = pd.DataFrame(data=principal_components, columns=['Principal Component 1', 'Principal Component 2'])
                                    df_pca['Species'] = pd.Categorical.from_codes(y, target_names)
                                    
                                    # PCA 결과 시각화
                                    plt.figure(figsize=(10, 6))
                                    colors = ['navy', 'turquoise', 'darkorange']
                                    lw = 2
                                    
                                    for color, target_name in zip(colors, target_names):
                                        plt.scatter(df_pca.loc[df_pca['Species'] == target_name, 'Principal Component 1'],
                                                    df_pca.loc[df_pca['Species'] == target_name, 'Principal Component 2'],
                                                    color=color, alpha=0.8, lw=lw,
                                                    label=target_name)
                                    
                                    plt.legend(loc='best', shadow=False, scatterpoints=1)
                                    plt.title('PCA of IRIS dataset')
                                    plt.xlabel('Principal Component 1')
                                    plt.ylabel('Principal Component 2')
                                    plt.grid(True)
                                    plt.show()
                                    
                                    # 설명된 분산 비율 출력
                                    print('Explained Variance Ratio:', pca.explained_variance_ratio_)

                                    LDA 예시

                                    import numpy as np
                                    import pandas as pd
                                    import matplotlib.pyplot as plt
                                    from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA
                                    from sklearn.preprocessing import StandardScaler
                                    from sklearn.datasets import load_iris
                                    
                                    # Iris 데이터셋 로드
                                    iris = load_iris()
                                    X = iris.data
                                    y = iris.target
                                    target_names = iris.target_names
                                    
                                    # 데이터 표준화
                                    scaler = StandardScaler()
                                    X_standardized = scaler.fit_transform(X)
                                    
                                    # LDA 모델 생성 및 학습
                                    lda = LDA(n_components=2)
                                    lda_components = lda.fit_transform(X_standardized, y)
                                    
                                    # 판별 성분 데이터프레임 생성
                                    df_lda = pd.DataFrame(data=lda_components, columns=['LD1', 'LD2'])
                                    df_lda['Species'] = pd.Categorical.from_codes(y, target_names)
                                    
                                    # LDA 결과 시각화
                                    plt.figure(figsize=(10, 6))
                                    colors = ['navy', 'turquoise', 'darkorange']
                                    lw = 2
                                    
                                    for color, target_name in zip(colors, target_names):
                                        plt.scatter(df_lda.loc[df_lda['Species'] == target_name, 'LD1'],
                                                    df_lda.loc[df_lda['Species'] == target_name, 'LD2'],
                                                    color=color, alpha=0.8, lw=lw,
                                                    label=target_name)
                                    
                                    plt.legend(loc='best', shadow=False, scatterpoints=1)
                                    plt.title('LDA of IRIS dataset')
                                    plt.xlabel('Linear Discriminant 1')
                                    plt.ylabel('Linear Discriminant 2')
                                    plt.grid(True)
                                    plt.show()

                                    결과 해석

                                    • PCA 결과: 주성분 공간에서 데이터의 분산을 최대화하는 방향으로 변환된 데이터 포인트.
                                    • LDA 결과: 클래스 간의 분리를 최대화하는 방향으로 변환된 데이터 포인트.

                                    이 예시는 PCA와 LDA가 어떻게 데이터를 변환하는지, 그리고 결과가 어떻게 다른지를 보여줍니다. PCA는 데이터의 분산을 최대화하는 주성분을 찾고, LDA는 클래스 간의 분리를 최대화하는 성분을 찾습니다. 이 차이는 각 방법이 데이터 분석과 분류 문제에서 어떻게 사용되는지에 영향을 미칩니다.

                                    예시 : IRIS 데이터

                                    위 그림은 주성분 분석(PCA)을 사용하여 Iris 데이터셋의 결과를 시각화한 것입니다.

                                    구성 요소:

                                    1. 산점도 (Scatter Plot):
                                    • 각 점은 데이터 포인트를 나타내며, 서로 다른 색상은 세 가지 품종(Setosa, Versicolor, Virginica)을 나타냅니다.
                                    1. 주성분 (Principal Components):
                                    • X축은 첫 번째 주성분(Principal Component 1)을, Y축은 두 번째 주성분(Principal Component 2)을 나타냅니다.
                                    • 이 두 주성분은 데이터의 분산을 최대한 보존하면서, 데이터의 주요 변동성을 설명합니다.

                                    PCA 분석 그림을 그리기 위해 Iris 데이터셋을 이용한 예제를 준비했습니다. 아래 코드는 Iris 데이터셋을 사용하여 주성분 분석(PCA)을 수행한 결과를 시각화하는 과정을 보여줍니다.

                                    PCA 분석 및 시각화 코드

                                    import numpy as np
                                    import pandas as pd
                                    import matplotlib.pyplot as plt
                                    from sklearn.decomposition import PCA
                                    from sklearn.preprocessing import StandardScaler
                                    from sklearn.datasets import load_iris
                                    
                                    # Iris 데이터셋 로드
                                    iris = load_iris()
                                    X = iris.data
                                    y = iris.target
                                    target_names = iris.target_names
                                    
                                    # 데이터 표준화
                                    scaler = StandardScaler()
                                    X_standardized = scaler.fit_transform(X)
                                    
                                    # PCA 모델 생성 및 학습
                                    pca = PCA(n_components=2)
                                    principal_components = pca.fit_transform(X_standardized)
                                    
                                    # 주성분 데이터프레임 생성
                                    df_pca = pd.DataFrame(data=principal_components, columns=['Principal Component 1', 'Principal Component 2'])
                                    df_pca['Species'] = pd.Categorical.from_codes(y, target_names)
                                    
                                    # PCA 결과 시각화
                                    plt.figure(figsize=(12, 8))
                                    colors = ['navy', 'turquoise', 'darkorange']
                                    lw = 2
                                    
                                    for color, target_name in zip(colors, target_names):
                                        plt.scatter(df_pca.loc[df_pca['Species'] == target_name, 'Principal Component 1'],
                                                    df_pca.loc[df_pca['Species'] == target_name, 'Principal Component 2'],
                                                    color=color, alpha=0.8, lw=lw,
                                                    label=target_name)
                                    
                                    plt.legend(loc='best', shadow=False, scatterpoints=1)
                                    plt.title('PCA of IRIS dataset')
                                    plt.xlabel('Principal Component 1')
                                    plt.ylabel('Principal Component 2')
                                    plt.grid(True)
                                    plt.show()

                                    이 코드는 다음과 같은 작업을 수행합니다:

                                    Iris 데이터셋 로드:

                                    • load_iris() 함수를 사용하여 Iris 데이터셋을 로드합니다.

                                    데이터 표준화:

                                      • StandardScaler()를 사용하여 데이터의 각 특성을 평균이 0, 표준편차가 1이 되도록 표준화합니다.

                                      PCA 모델 생성 및 학습:

                                        • PCA(n_components=2)를 사용하여 PCA 모델을 생성하고, 데이터를 두 개의 주성분으로 변환합니다.

                                        주성분 데이터프레임 생성:

                                          • 변환된 주성분을 데이터프레임으로 생성하고, 각 데이터 포인트의 품종을 포함합니다.

                                          PCA 결과 시각화:

                                            • 각 품종(Setosa, Versicolor, Virginica)을 서로 다른 색상으로 구분하여 산점도로 시각화합니다.
                                            • X축은 첫 번째 주성분(Principal Component 1), Y축은 두 번째 주성분(Principal Component 2)을 나타냅니다.

                                            이 그림을 통해 데이터의 주요 변동성을 설명하는 주성분을 시각적으로 확인할 수 있으며, 각 품종 간의 분포를 비교할 수 있습니다.

                                            해석:

                                            • 분산 설명: 첫 번째 주성분과 두 번째 주성분이 Iris 데이터셋의 주요 변동성을 설명합니다.
                                            • 품종 구분: 세 가지 품종이 주성분 공간에서 어떻게 분포되어 있는지를 시각적으로 확인할 수 있습니다. 예를 들어, Setosa 품종은 다른 두 품종과 명확하게 분리되어 있습니다.
                                            • 데이터 패턴: 주성분 분석을 통해 데이터의 주요 패턴을 파악할 수 있습니다.

                                            이 그림을 통해 PCA가 데이터의 차원을 줄이면서 중요한 변동성을 유지하는 방법을 시각적으로 이해할 수 있습니다. 주성분 분석은 데이터의 구조를 이해하고, 데이터의 주요 특성을 강조하는 데 유용한 도구입니다.

                                            예제 : WINE 데이터 분석

                                            다른 데이터셋을 사용하여 PCA를 수행해 보겠습니다. 여기서는 “Wine” 데이터셋을 사용하여 PCA를 수행하고 결과를 시각화해보겠습니다. “Wine” 데이터셋은 와인의 화학적 분석 결과로, 세 가지 품종의 와인을 구분하는 13개의 화학적 특성으로 구성됩니다.

                                            Wine 데이터셋을 사용한 PCA 분석 및 시각화 코드

                                            import numpy as np
                                            import pandas as pd
                                            import matplotlib.pyplot as plt
                                            from sklearn.decomposition import PCA
                                            from sklearn.preprocessing import StandardScaler
                                            from sklearn.datasets import load_wine
                                            
                                            # Wine 데이터셋 로드
                                            wine = load_wine()
                                            X = wine.data
                                            y = wine.target
                                            target_names = wine.target_names
                                            
                                            # 데이터 표준화
                                            scaler = StandardScaler()
                                            X_standardized = scaler.fit_transform(X)
                                            
                                            # PCA 모델 생성 및 학습
                                            pca = PCA(n_components=2)
                                            principal_components = pca.fit_transform(X_standardized)
                                            
                                            # 주성분 데이터프레임 생성
                                            df_pca = pd.DataFrame(data=principal_components, columns=['Principal Component 1', 'Principal Component 2'])
                                            df_pca['Species'] = pd.Categorical.from_codes(y, target_names)
                                            
                                            # PCA 결과 시각화
                                            plt.figure(figsize=(12, 8))
                                            colors = ['navy', 'turquoise', 'darkorange']
                                            lw = 2
                                            
                                            for color, target_name in zip(colors, target_names):
                                                plt.scatter(df_pca.loc[df_pca['Species'] == target_name, 'Principal Component 1'],
                                                            df_pca.loc[df_pca['Species'] == target_name, 'Principal Component 2'],
                                                            color=color, alpha=0.8, lw=lw,
                                                            label=target_name)
                                            
                                            plt.legend(loc='best', shadow=False, scatterpoints=1)
                                            plt.title('PCA of Wine dataset')
                                            plt.xlabel('Principal Component 1')
                                            plt.ylabel('Principal Component 2')
                                            plt.grid(True)
                                            plt.show()

                                            코드 설명

                                            Wine 데이터셋 로드:

                                              • load_wine() 함수를 사용하여 Wine 데이터셋을 로드합니다.

                                              데이터 표준화:

                                                • StandardScaler()를 사용하여 데이터의 각 특성을 평균이 0, 표준편차가 1이 되도록 표준화합니다.

                                                PCA 모델 생성 및 학습:

                                                  • PCA(n_components=2)를 사용하여 PCA 모델을 생성하고, 데이터를 두 개의 주성분으로 변환합니다.

                                                  주성분 데이터프레임 생성:

                                                    • 변환된 주성분을 데이터프레임으로 생성하고, 각 데이터 포인트의 품종을 포함합니다.

                                                    PCA 결과 시각화:

                                                      • 각 품종을 서로 다른 색상으로 구분하여 산점도로 시각화합니다.
                                                      • X축은 첫 번째 주성분(Principal Component 1), Y축은 두 번째 주성분(Principal Component 2)을 나타냅니다.

                                                      이 코드를 실행하면 Wine 데이터셋에 대한 PCA 결과를 시각화한 그림이 생성됩니다. 이를 통해 데이터의 주요 변동성을 설명하는 주성분을 시각적으로 확인할 수 있으며, 각 품종 간의 분포를 비교할 수 있습니다.

                                                      댓글 달기

                                                      이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

                                                      위로 스크롤