고차원 데이터(다수의 feature를 가진 데이터셋)를 상관관계가 없는 새로운 축으로 변환
데이터의 분산을 최대한 보존하면서 차원을 줄여서 시각화
parameter(매개변수)
n_components
기본값 : None
주성분의 개수 또는 비율로 설정
None : 모든 주성분을 유지
int : 선택할 주성분의 개수
float(0 ~ 1) : 누적 설명 분산 비율을 기준으로 필요한 주성분의 개수를 선택
'mle' : 자동으로 최적 차원의 수 측정 (샘플의 개수 < feature의 개수 인 경우에만 사용이 가능)
whiten
기본값 : False
주성분 벡터를 단위 분산으로 정규화를 할 것인가 지정
데이터의 정규화 효과
svd_solver
기본값 : 'auto'
분해 방식 지원
'auto' : 데이터의 크기에 따라서 자동 선택
'full' : 정확한 SVD 계산 (작은 데이터에서 사용)
'randomized' : 확률적 근사 알고리즘 (대규모 데이터에서 유용)
속성
components_ : 선택된 주성분 벡터
explained_variance_ : 각 주성분이 설명하는 분산의 값
explained_variance_ratio_
각 주성분이 설명하는 분산의 비율
합계가 1에 가까울수록 원래 분산을 잘 보존
singular_values_ : 선택된 주성분에 대응하는 특이값
noise_variance_ : 유지하지 않은 차원에서의 분산 추정
메서드
fit(X, y) : 주성분을 학습
transform(X) : 학습된 주성분 축을 기준으로 하여 새로운 데이터 변환
fit_transform(X, y) : PCA학습 + 변환
get_covariance() : PCA로 추정된 공분산 행렬 변환
get_precision() : PCA로 추정된 정밀도 행렬 변환
from sklearn.decomposition import PCA
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
#iris 데이터 로드
iris=pd.read_csv('../csv/iris.csv')
iris
X=iris.drop('species',axis=1)
y=iris['species']
#PCA 객체 생성
pca=PCA()
X_pca=pca.fit_transform(X, y)
pd.DataFrame(X_pca)
t-SNE
비선형 차원 축소 기법으로 고차원의 데이터를 국소 구조를 보존하면서 2차원 또는 3차원 시각화를 하기 위해 사용
고차원 데이터의 경우에는 거리 기반 유사도 (가우시안 분포를 이용한 계산)
저차원의 경우에는 확률적으로 비슷하게 재현 (t-분포를 이용한 계산)
t-분포를 사용하는 이유는 멀리 떨어진 점 간의 차이를 완화시키기 위한 방법
거리 계산 방법
유클리드거리 (Euclidean) : 기본적인 거리 계산 방식 (직선의 거리) > 수치형 데이터에서 사용
맨해튼 거리 (Manhatten) : 직각 축 기반 거리
체비셰프 거리 (Chebyshev) : 최대의 축 차이 기반 거리
코사인 거리(유사도) (Cosine) : 벡터 방향 기반 거리 -> 자연어 데이터에서 사용
마할라노비스 거리 (Mahalanobis) : 변수 간의 상관 반영
parameter(매개변수)
n_components
기본값 :2
축소할 차원의 개수
perplexity
기본값 : 30
이웃의 수 제어 (군집 크기에 민감)
보통 5 ~ 50 정도의 값을 사용
값이 작은 경우 작은 구조, 값이 큰 경우 전체의 구조
일반적으로 '샘플의 개수 / 3'
너무 큰 값을 설정하면 전체를 포함하는 형태가 될 수 있다.
early_exggeration
기본값 : 12
초기 학습에서 군집 간의 거리를 지정 (분리 촉진)
learning_rate
기본값 : 'auto'
학습의 속도
너무 작게 지정하면 수렴이 느려질 수 있음
너무 크게 지정하면 군집이 왜곡될 수 있음
100 ~ 1000 정도의 값을 사용
max_iter
기본값 : 1000
전체 학습의 반복 횟수
n_iter_without_progress
기본값 : 300
개선이 없을 때 조기 종료의 기준
metric
기본값 : 'euclidean'
거리 계산 방식
속성
embedding_ : 변환된 저차원 데이터를 반환
kl_divergence_ : 최종 KL 발산 값을 반환 (작을수록 원래의 구조와 유사)
메서드
fit() : 데이터를 학습
transform() : 데이터를 저차원으로 변환
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_digits
from sklearn.preprocessing import StandardScaler
from sklearn.manifold import TSNE
#digits 데이터를 로드
digits=load_digits()
pd.DataFrame(digits.data)
#64차원의 데이터를 2차원으로 변경
tsne = TSNE(
n_components=2,
perplexity=40,
random_state=42,
n_jobs=-1
)