데이터로그😎

LDA (Linear Descriminant Analysis) 본문

머신러닝/차원축소

LDA (Linear Descriminant Analysis)

지연v'_'v 2023. 9. 5. 15:49

LDA vs PCA

  PCA LDA
특징
  • 주성분 분석 = 주가 되는 성분을 분석한다.
  • PCA는 데이터의 고차원 공간에서 *가장 많은 분산(변동성)을 가지는 방향*을 찾아서 이를 기반으로 데이터를 저차원 공간으로 변환한다.
  • PCA에서 '가장 많은 분산을 가지는'은 주어진 데이터셋에서 가장 많은 정보를 가지는 축(axis)을 찾는 것을 의미
  • PCA와 유사하지만 중요한 차이점은 LDA에서는 지도학습의 분류(classification)에 사용하기 쉽도록 개별 클래스를 분별할 수 있는 기준을 최대한 유지하면서 차원을 축소함.
  • 입력 데이터의 결정 값 클래스를 최대한으로 분리할 수 있는 축을 찾는다.
  • 클래스 간 분산과 클래스 내부 분산의 비율을 최대화하는 방식으로 차원을 축소.
  • 클래스 간 분산은 최대한 크게 가져가고, 클래스 내부 분산은 최대한 작게 가져감.

진행
과정

  1. 원본 데이터의 공분산 행렬 생성
  2. 공분산 행렬의 고유벡터 구하고 고유값 분해
  3. 원본 데이터를 고유벡터로 선형변환
  4. PCA 변환값 도출
  1. 클래스 간 분산과 클래스 내부 분산행렬을 생성
  2. 이 행렬에 기반하여 고유벡터를 구하고 입력 데이터 투영

 

LDA 2차원 축소

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import load_iris

iris = load_iris()

# 스케일링
iris_scaled = StandardScaler().fit_transform(iris.data)

# LDA
lda= LinearDiscriminantAnalysis(n_components = 2)

# LDA는 클래스의 정보를 같이 입력해줘야 한다.
# 지도학습처럼 feature, target이 같이 들어간다.
lda.fit(iris_scaled, iris.target)
iris_lda = lda.transform(iris_scaled)
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd

iris_lda_df = pd.DataFrame(
            iris_lda,
            columns =['component_1', 'component_2'])

iris_lda_df['target'] = iris.target

 

sns.scatterplot(
    x='component_1',
    y='component_2',
    hue = 'target',
    palette = 'muted',
    data = iris_lda_df)
plt.title('LDA')
plt.show()

'머신러닝 > 차원축소' 카테고리의 다른 글

SVD (Singular Value Decomposition)  (0) 2023.09.05
PCA (Principal Component Analysis)  (0) 2023.09.05