TOP
class="layout-aside-left paging-number">
본문 바로가기
[파이썬 Projects]/<파이썬 머신러닝>

[머신러닝] 차원 축소 - LDA

by 기록자_Recordian 2024. 10. 24.
728x90
반응형
차원 축소란?
 

[머신러닝] 차원 축소(Dimension Reduction)

차원 축소(Dimension Reduction)차원 축소의 중요한 의미는차원 축소를 통해 좀 더 데이터를 잘 설명할 수 있는잠재적인 요소를 추출하는 데 있다.차원 축소: 매우 많은 피처로 구성된 다차원 데이터

puppy-foot-it.tistory.com


LDA(Linear Discriminant Analysis, 선형 판별 분석)

 

[PCA vs LDA]

- LDA는 PCA와 유사하게 입력 데이터 세트를 저차원 공간에 투영해 차원을 축소하는 기법이지만, 중요한 차이는 LDA는 지도학습의 분류(Classification)에서 사용하기 쉽도로 개별 클래스를 분별할 수 있는 기준을 최대한 유지하면서 차원을 축소한다.

- PCA는 입력 데이터의 변동성의 가장 큰 축을 찾으나, LDA는 입력 데이터의 결정 값 클래스를 최대한으로 분리할 수 있는 축을 찾는다.

 

LDA는 클래스 간 분산은 최대한 크게 가져가고, 클래스 내부의 분산은 최대한 작게 가져가는 방식이다.

즉, 특정 공간상에서 클래스 분리를 최대화하는 축을 찾기 위해 클래스 간 분산과 클래스 내부 분산의 비율을 최대화하는 방식으로 차원을 축소한다.

 

[LDA를 구하는 단계]

  • 클래스 내부와 클래스 간 분산 행렬 구함: 이 두 개의 행렬은 입력 데이터의 결정 값 클래스별로 개별 피처의 평균 벡터(mean vector)를 기반으로 구한다.
  • 클래스 내부 분산 행렬과 클래스 간 분산 행렬을 고유벡터로 분해
  • 고유값이 가장 큰 순으로 K개(LDA 변환 차수만큼) 추출
  • 고유값이 가장 큰 순으로 추출된 고유벡터를 이용해 새롭게 입력 데이터 변환

붓꽃 데이터 세트에 LDA 적용하기

 

사이킷런은 LDA를 LinearDiscriminantAnalysis 클래스로 제공한다.

 

[붓꽃 데이터 세트 로드, 표준 정규 분포로 스케일링]

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)

 

[2개의 컴포넌트로 붗꽃 데이터를 LDA 변환]

LDA에서 한 가지 유의해야 할 점은 LDA는 실제로는 PCA와 다르게 비지도학습이 아닌 지도학습이라는 것이다. 즉, 클래스의 결정값이 변환 시에 필요한데, 다음 lda 객체의 fit() 메서드를 호출할 때 결정값을 입력한다. (iris.target)

lda = LinearDiscriminantAnalysis(n_components=2)
lda.fit(iris_scaled, iris.target)
iris_lda = lda.transform(iris_scaled)
print(iris_lda.shape)

 

[LDA 변환된 입력 데이터 값을 2차원 평면에 품종별로 표현]

import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

lda_columns = ['lda_component_1', 'lda_component_2']
irisDF_lda = pd.DataFrame(iris_lda, columns = lda_columns)
irisDF_lda['target']=iris.target

# setosa는 세모, versicolor는 네모, virginoca는 동그라미로 표현
markers = ['^', 's', 'o']

# setosa의 target 값은 0, versicolor는 1, virginoca는 2. 각 target별로 다른 모양으로 산점도 표시
for i, marker in enumerate(markers):
    x_axis_data = irisDF_lda[irisDF_lda['target']==i]['lda_component_1']
    y_axis_data = irisDF_lda[irisDF_lda['target']==i]['lda_component_2']

    plt.scatter(x_axis_data, y_axis_data, marker=marker, label=iris.target_names[i])

plt.legend(loc='upper right')
plt.xlabel('lda_component_1')
plt.ylabel('lda_component_2')
plt.show()

 

 


다음 내용

 

[머신러닝] 차원 축소 - SVD

차원 축소란? [머신러닝] 차원 축소(Dimension Reduction)차원 축소(Dimension Reduction)차원 축소의 중요한 의미는차원 축소를 통해 좀 더 데이터를 잘 설명할 수 있는잠재적인 요소를 추출하는 데 있다.

puppy-foot-it.tistory.com


[출처]

파이썬 머신러닝 완벽 가이드

728x90
반응형