【기계 학습】Kernel PCA를 공부해 본다
11896 단어 PCAMachineLearning데이터 과학기계 학습
PCA
Kernel PCA의 설명에 들어가기 전에 PCA란 무엇인가, 대략 드러내고 싶습니다.
PCA란?
PCA(Principle Component Analysis)/주성분 분석은 기계 학습에서 주로 데이터의 차원을 줄이는 데 사용되는 기술입니다. 「차원의 저주」라고도 알려지도록, 특징량이 너무 많으면 학습에 지장을 줍니다. 그래서 "불필요한 특징량은 가능한 한 제거하고 싶다. 정말 필요한 특징량만을 사용하고 싶다"입니다.
PCA의 메커니즘
각 $x_i$가 D차원(D개의 특징량) 벡터의 데이터 세트를 가지고 있다고 가정합니다. 이것을 M차원에 찍는데, y = Ax 가 되는 $A = [u_1^{T}, ... u_M^{T}]$, $u_k^{T}u_k = 1, k = 1,2 ... M$이 있다고 가정합니다. 이때 PCA에서는 $y_i$의 분산이 최대가 되는 A를 찾습니다.
A^* = argmax tr(S_y)
S_y=\dfrac {1}{N}\sum ^{N}_{i=1}\left( y_{i}-\overline {y}\right) \left( y_{i}-\overline {y}\right) ^{T}
\overline {y} = \dfrac {1}{N}\sum ^{N}_{i=1}x_i
$S_x$를 S의 분산 공분산 행렬로 했을 때, $tr(S_y) = tr(AS_xA^T)$ 에 의해, 라그랑지 정수를 사용 미분하면, 아래와 같은 고유치 벡터 $u_k$ 에 의한 식이 됩니다 .
S_xu_k = \lambda_ku_k
이와 같이 PCA에서는 x의 분산이 최대가 되는 고유치를 취함으로써 특징량을 좁힐 수 있습니다.
이 고유치 벡터에 의한 매핑은 아래와 같은 회전사 이미지가 됩니다.
세로와 가로의 퍼짐인 각각의 특징량의 분산만이 남은 것을 알 수 있습니다.
커널 PCA
위의 PCA에서는 선형 분리할 수 있는 데이터에 대해서 차원 삭제를 실시했습니다만, 데이터가 선형 분리할 수 없을 때 Kernel PCA를 사용합니다.
D차원의 특징량을 가진 데이터를 M차원에 찍는 $\phi(x)$가 있다고 합니다. 이 때 표준 PCA를 새로운 차원 공간에서 할 수 있지만, 힘들기 때문에 커널 트릭을 사용합니다.
우선, 매핑 후의 특징량은 평균 0을 취한다고 가정합니다.
\dfrac {1}{N}\sum ^{N}_{i=1} \phi(x_i) = 0
이때 분산공분산은
C = \dfrac {1}{N}\sum ^{N}_{i=1} \phi(x_i)\phi(x_i)^T
됩니다.
고유값 벡터 $v_i$는 아래 수식에서 구할 수 있습니다.
Cv_k = \lambda_k v_k
예를 들어 아래와 같이 왼쪽 데이터에서는 선형 분리할 수 없지만 커널을 사용하면 선형 분리가 가능합니다.
scikit learn Kernel PCA
매개변수
개요
선택
기본
n_components
타겟의 차원 수
int
None(그대로)
커널
커널 타입
“linear” ,“poly” , “rbf” ,“sigmoid” ,“cosine”
"linear"
gamma
rbf와 poly의 커널 계수
float
1/n_features
degree
poly 계수
int
3
coef0
poly와 sigmoid의 독립 계수
float
1
kernel_params
커널 매개 변수의 이름
String에서 mapping
None
알파
리지 회귀
1.0
eigen_solver
고유값 선택
"auto", "dense", "arpack"
"자동"
tol
arpack 수렴
float
0
max_iter
arpack의 최대 반복 횟수
int
None
remove_zeros
고유치 0 삭제
bool
거짓
random_state
arpack의 random_state
RandomState Instance or None
None
n_jobs
병렬 작업
int/None
None
사용 예
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA, KernelPCA
from sklearn.datasets import make_circles
np.random.seed(0)
X, y = make_circles(n_samples=400, factor=.3, noise=.05)
plt.figure(figsize=(10,10))
plt.subplot(2, 2, 1, aspect='equal')
plt.title("Original space")
reds = y == 0
blues = y == 1
plt.scatter(X[reds, 0], X[reds, 1], c="red",s=20, edgecolor='k')
plt.scatter(X[blues, 0], X[blues, 1], c="blue",s=20, edgecolor='k')
plt.xlabel("$x_1$")
plt.ylabel("$x_2$")
-> 선형분열할 수 없다. . .
RBF 커널!
kpca = KernelPCA(kernel="rbf", fit_inverse_transform=True, gamma=10)
X_kpca = kpca.fit_transform(X)
pca = PCA()
X_pca = pca.fit_transform(X)
plt.scatter(X_kpca[reds, 0], X_kpca[reds, 1], c="red",s=20, edgecolor="k")
plt.scatter(X_kpca[blues, 0], X_kpca[blues, 1], c="blue",s=20, edgecolor="k")
x = np.linspace(-1, 1, 1000)
plt.plot(x, -0.1*x, linestyle="solid")
plt.title("Projection by KPCA")
plt.xlabel(r"1st PC induced by $\phi$")
plt.ylabel("2nd component")
분할 후:
PCA의 장점과 단점
장점
A^* = argmax tr(S_y)
S_y=\dfrac {1}{N}\sum ^{N}_{i=1}\left( y_{i}-\overline {y}\right) \left( y_{i}-\overline {y}\right) ^{T}
\overline {y} = \dfrac {1}{N}\sum ^{N}_{i=1}x_i
S_xu_k = \lambda_ku_k
위의 PCA에서는 선형 분리할 수 있는 데이터에 대해서 차원 삭제를 실시했습니다만, 데이터가 선형 분리할 수 없을 때 Kernel PCA를 사용합니다.
D차원의 특징량을 가진 데이터를 M차원에 찍는 $\phi(x)$가 있다고 합니다. 이 때 표준 PCA를 새로운 차원 공간에서 할 수 있지만, 힘들기 때문에 커널 트릭을 사용합니다.
우선, 매핑 후의 특징량은 평균 0을 취한다고 가정합니다.
\dfrac {1}{N}\sum ^{N}_{i=1} \phi(x_i) = 0
이때 분산공분산은
C = \dfrac {1}{N}\sum ^{N}_{i=1} \phi(x_i)\phi(x_i)^T
됩니다.
고유값 벡터 $v_i$는 아래 수식에서 구할 수 있습니다.
Cv_k = \lambda_k v_k
예를 들어 아래와 같이 왼쪽 데이터에서는 선형 분리할 수 없지만 커널을 사용하면 선형 분리가 가능합니다.
scikit learn Kernel PCA
매개변수
개요
선택
기본
n_components
타겟의 차원 수
int
None(그대로)
커널
커널 타입
“linear” ,“poly” , “rbf” ,“sigmoid” ,“cosine”
"linear"
gamma
rbf와 poly의 커널 계수
float
1/n_features
degree
poly 계수
int
3
coef0
poly와 sigmoid의 독립 계수
float
1
kernel_params
커널 매개 변수의 이름
String에서 mapping
None
알파
리지 회귀
1.0
eigen_solver
고유값 선택
"auto", "dense", "arpack"
"자동"
tol
arpack 수렴
float
0
max_iter
arpack의 최대 반복 횟수
int
None
remove_zeros
고유치 0 삭제
bool
거짓
random_state
arpack의 random_state
RandomState Instance or None
None
n_jobs
병렬 작업
int/None
None
사용 예
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA, KernelPCA
from sklearn.datasets import make_circles
np.random.seed(0)
X, y = make_circles(n_samples=400, factor=.3, noise=.05)
plt.figure(figsize=(10,10))
plt.subplot(2, 2, 1, aspect='equal')
plt.title("Original space")
reds = y == 0
blues = y == 1
plt.scatter(X[reds, 0], X[reds, 1], c="red",s=20, edgecolor='k')
plt.scatter(X[blues, 0], X[blues, 1], c="blue",s=20, edgecolor='k')
plt.xlabel("$x_1$")
plt.ylabel("$x_2$")
-> 선형분열할 수 없다. . .
RBF 커널!
kpca = KernelPCA(kernel="rbf", fit_inverse_transform=True, gamma=10)
X_kpca = kpca.fit_transform(X)
pca = PCA()
X_pca = pca.fit_transform(X)
plt.scatter(X_kpca[reds, 0], X_kpca[reds, 1], c="red",s=20, edgecolor="k")
plt.scatter(X_kpca[blues, 0], X_kpca[blues, 1], c="blue",s=20, edgecolor="k")
x = np.linspace(-1, 1, 1000)
plt.plot(x, -0.1*x, linestyle="solid")
plt.title("Projection by KPCA")
plt.xlabel(r"1st PC induced by $\phi$")
plt.ylabel("2nd component")
분할 후:
PCA의 장점과 단점
장점
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA, KernelPCA
from sklearn.datasets import make_circles
np.random.seed(0)
X, y = make_circles(n_samples=400, factor=.3, noise=.05)
plt.figure(figsize=(10,10))
plt.subplot(2, 2, 1, aspect='equal')
plt.title("Original space")
reds = y == 0
blues = y == 1
plt.scatter(X[reds, 0], X[reds, 1], c="red",s=20, edgecolor='k')
plt.scatter(X[blues, 0], X[blues, 1], c="blue",s=20, edgecolor='k')
plt.xlabel("$x_1$")
plt.ylabel("$x_2$")
kpca = KernelPCA(kernel="rbf", fit_inverse_transform=True, gamma=10)
X_kpca = kpca.fit_transform(X)
pca = PCA()
X_pca = pca.fit_transform(X)
plt.scatter(X_kpca[reds, 0], X_kpca[reds, 1], c="red",s=20, edgecolor="k")
plt.scatter(X_kpca[blues, 0], X_kpca[blues, 1], c="blue",s=20, edgecolor="k")
x = np.linspace(-1, 1, 1000)
plt.plot(x, -0.1*x, linestyle="solid")
plt.title("Projection by KPCA")
plt.xlabel(r"1st PC induced by $\phi$")
plt.ylabel("2nd component")
장점
단점
인용
Quan Wang, "Kernel Principal Component Analysis and its Applications in Face Recognition and Active Shape Models", 2014
htps : // / r ぃ v. rg / pdf / 1207. 3538. pdf
Reference
이 문제에 관하여(【기계 학습】Kernel PCA를 공부해 본다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/shuva/items/9625bc326e2998f1fa27
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(【기계 학습】Kernel PCA를 공부해 본다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/shuva/items/9625bc326e2998f1fa27텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)