자료를 공개한 저자 오렐리앙 제롱과 강의자료를 지원한 한빛아카데미에게 진심어린 감사를 전합니다.
대부분의 고차원 데이터셋이 더 낮은 차원의 다양체게 가깝다는 가정
저차원의 다양체 공간으로 차원축소를 진행하면 보다 간단한 다양체가 된다라는 가정과 함께 사용되지만 일반적으로 사실 아님. (아래 그림 참조)
특잇값 분해: m x n 모양을 가지며, 평균값이 0인 데이터셋 $X$가 주어졌을 때 아래 조건을 만족시키는 세 개의 행렬 $U$, $\Sigma$, $V$가 존재.
$V$: n x n 행렬. 윗첨자 $T$는 전치행렬을 의미함.
$$ X = U\, \Sigma \, V^{\!T} $$
주성분 벡터는 행렬 $V$의 열에 해당하며, 따라서 $d$차원으로의 사영은 아래와 같이 계산됨:
$$ X\, (V\text{[: , :d]}) $$
예제: 데이터셋의 차원을 2로 줄이기
from sklearn.decomposition import PCA
pca = PCA(n_components = 2)
X2D = pca.fit_transform(X)
explained_variance_ration_
속성 변수: 각 주성분에 대한 원 데이터셋의 분산 비율 저장아래 코드: 154개 주성분 사용하여 차원축소하기
pca = PCA(n_components = 154)
X_reduced = pca.fit_transform(X_train)
아래 코드: svd_solver
옵션을 "randomized"
로 설정
rnd_pca = PCA(n_components = 154, svd_solver="randomized")
X_reduced = rnd_pca.fit_transform(X_train)
partial_fit()
활용에 주의할 것.
from sklearn.decomposition import IncrementalPCA
n_batches = 100
inc_pca = IncrementalPCA(n_components=154)
for X_batch in np.array_split(X_train, n_batches):
inc_pca.partial_fit(X_batch)
X_reduced = inc_pca.transform(X_train)
memmap()
클래스 활용 가능¶이를 이용하여 미니배치/온라인 학습 가능
X_mm = np.memmap(filename, dtype="float32", mode="readonly", shape=(m, n))
inc_pca = IncrementalPCA(n_components=154, batch_size=batch_size)
inc_pca.fit(X_mm)
사영된 후에 샘플의 군집을 유지하거나 꼬인 다양체 모양의 데이터셋을 펼칠 때 유용.
from sklearn.decomposition import KernelPCA
rbf_pca = KernelPCA(n_components = 2, kernel="rbf", gamma=0.04)
X_reduced = rbf_pca.fit_transform(X)
전처리 용도로 사용 후 예측기와 연동하는 그리드탐색 등을 활용하여 성능 측정 가능
clf = Pipeline([
("kpca", KernelPCA(n_components=2)),
("log_reg", LogisticRegression(solver="lbfgs")) ])
param_grid = [{
"kpca__gamma": np.linspace(0.03, 0.05, 10),
"kpca__kernel": ["rbf", "sigmoid"] }]
grid_search = GridSearchCV(clf, param_grid, cv=3)
grid_search.fit(X, y)
from sklearn.manifold import LocallyLinearEmbedding
lle = LocallyLinearEmbedding(n_components=2, n_neighbors=10)
X_reduced = lle.fit_transform(X)
다음 세 단계를 거쳐야 함.
$1$. 최근접 이웃 찾기: 지정된 숫자의 최근접 이웃 찾기
$2$. 가중치 행렬 찾기: 아래 최적화 문제를 해결하는 가중치 행렬 찾기
$$ \hat{\mathbf{W}} = \underset{\mathbf{W}}{\textrm{argmin}} \sum_{i=1}^{m} \left( \mathbf{x}^{(i)} - \sum_{j=1}^{m}w_{i,j}\, \mathbf{x}^{(j)} \right) $$단, 아래 조건 성립해야 함:
$3$. 아래 관계를 만족하는 최적의 $d$ 차원의 데이터셋 찾기
$$ \mathbf{Z} = \underset{\mathbf{Z}}{\textrm{argmin}} \sum_{i=1}^{m} \left( \mathbf{z}^{(i)} - \sum_{j=1}^{m}\hat{w}_{i,j}\, \mathbf{z}^{(j)} \right)^2 $$단, $\hat{w}_{i,j}$ 는 2단계에서 찾은 $\hat{\mathbf{W}}$의 항목임.
LocallyLinearEmbedding
모델의
method
옵션이 달라짐.method
옵션 종류: "statndard"
, "modified"
, "hessian"
, "ltsa"
"statndard"
: 국소적 주성분 분석 아이디어를 활용하는 알고리즘. 기본값임."modified"
: 이웃 개수가 훈련 샘플의 차원보다 클 때 적용. 다중 가중치 벡터 활용."hessian"
: 헤세(Hesse)의 아이겐맵(Eigenmap)을 활용하는 알고리즘."ltsa"
: 국소적 접공간 설정(Local Tangent Space Alignment) 알고리즘.