차원 축소란?
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()
다음 내용
[출처]
파이썬 머신러닝 완벽 가이드
'[파이썬 Projects] > <파이썬 머신러닝>' 카테고리의 다른 글
[머신러닝] 차원 축소 - SVD (0) | 2024.10.24 |
---|---|
[머신러닝] 차원 축소 - NMF (1) | 2024.10.24 |
[머신러닝] 차원 축소 - PCA (0) | 2024.10.24 |
[머신러닝] 차원 축소(Dimension Reduction) (0) | 2024.10.24 |
[머신러닝] 회귀 - 캐글 주택 가격 (0) | 2024.10.23 |