데이터 분석/Python

[Sklearn] 차원 축소

eunki 2021. 5. 21. 16:43
728x90

비지도 학습 (Unsupervised Learning)

기계 학습의 일종으로 데이터가 어떻게 구성되었는지를 알아내는 문제의 범주에 속한다.

이 방법은 지도 학습(Supervised Learning) 혹은 강화 학습(Reinforcement Learning)과는 달리 입력값에 대한 목표치가 주어지지 않는다.

  • 차원 축소: PCA, LDA, SVD
  • 군집화: KMeans Clustering, DBSCAN
  • 군집화 평가

 

 

 


차원 축소

feature의 갯수를 줄이는 것을 뛰어 넘어 특징을 추출하는 역할

계산 비용을 감소하고, 전반적인 데이터에 대한 이해도를 높이는 효과

 

 

 

 

1. PCA 차원축소

주성분 분석(PCA)는 선형 차원 축소 기법이다.

매우 인기 있게 사용되는 차원 축소 기법 중 하나이다.

주요 특징중의 하나는 분산(variance)을 최대한 보존한다는 점이다.

 

  • components에 1보다 큰 값을 넣으면, 해당 값을 기준으로 feature를 축소
from sklearn.decomposition import PCA

pca = PCA(n_components=2)

data_scaled = StandardScaler().fit_transform(df.loc[:, 'sepal length (cm)':'petal width (cm)'])

pca_data = pca.fit_transform(data_scaled)

 

 

 

 

  • components에 1보다 작은 값을 넣으면, 분산을 기준으로 차원 축소
pca = PCA(n_components=0.99)

pca_data = pca.fit_transform(data_scaled)

 

 

 

 

2. LDA 차원 축소

LDA(Linear Discriminant Analysis): 선형 판별 분석법 (PCA와 유사)

클래스(Class) 분리를 최대화하는 축을 찾기 위해, 클래스 간 분산과 내부 분산의 비율을 최대화 하는 방식으로 차원 축소를 한다.

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

lda = LinearDiscriminantAnalysis(n_components=2)

data_scaled = StandardScaler().fit_transform(df.loc[:, 'sepal length (cm)':'petal width (cm)'])

lda_data = lda.fit_transform(data_scaled, df['target'])

 

 

 

 

 

3. SVD (Singular Value Decomposition)

상품의 추천 시스템에도 활용되어지는 알고리즘 (추천시스템)

특이값 분해기법으로, PCA와 유사한 차원 축소 기법이다.

scikit-learn 패키지에서는 truncated SVD (aka LSA)을 사용한다.

from sklearn.decomposition import TruncatedSVD

data_scaled = StandardScaler().fit_transform(df.loc[:, 'sepal length (cm)':'petal width (cm)'])

svd = TruncatedSVD(n_components=2)

svd_data = svd.fit_transform(data_scaled)

 

728x90