기계 학습 초보자는 확률의 주성분 분석을 이해하려고 노력했다

이 기사고천 연구실 Workout_calendar23일째 보도입니다.
이 보도는 고천 연구실 학생들이 학습의 일환으로 쓴 것이다.내용이 애매하거나 표현이 다소 다른 경우가 있다.

입문


나는 문장의 첫 번째 부분에서 선형 대수의 중요한 요소로서의 고유값을 썼고, 두 번째 부분에서는 딥러닝의 응용 사례를 사용한 VAE의 마조 VAE를 썼지만 VAE의 논문을 읽을 때 확률에 대한 이해가 부족하다는 것을 발견했다.따라서 확률력(조사)을 높이기 위해 지금까지 집필한 기사의 내용과 협동작용이 가능한 확률 주성분 분석에 관한 기사를 쓰고 싶습니다.
이 글의 목적은 자신이 확률의 주성분 분석을 깨물면서 이해하고 확률에 대한 이해(순도 100%의 자아)를 깊이 있게 하는 것이다.

무엇이 확률 주성분 분석입니까


확률의 주성분 분석은 주성분 분석을 다시 확률적으로 해석하는 것이다.
주성분 분석에 사용되는 값(협방차 행렬, 잠재 공간, 입력 데이터 등)을 확률적으로 표현하고 최대 유사 추정, EM 알고리즘, 베일스 추정을 통해 파라미터를 결정하는 것이 큰 장점인 것 같다.
확률 주성분 분석에서 관측 데이터 $\mathbf{x}\in\mathbb{R}^D$가 조건으로 $p(\mathbf{x}\mathbf{z})$분포되어 생성된다고 가정합니다.여기서 $\mathbf{x}$의 조건 $\mathbf{z}$를 잠재 변수라고 합니다.($\mathbf{z}\in\mathbb{R}^M$).
잠재 변수의 비트가 관측 데이터의 비트 $M$$
p(z)=N(z|0,I)
$$
에서 설명한 대로 해당 매개변수의 값을 수정합니다.이곳의 협방차 행렬은 단위 행렬로 서로의 차원을 나타내는 협방차가 0이고 잠재 변수 $z$의 각 차원이 서로 독립되어 있음을 의미한다.
만약 구하고자 하는 조건부 분포 $p (\mathbf{x}\mathbf{z}) $가 $\mathbf{z}$조건하의 고스 분포라고 가정합니다.
$$
p(\mathbf{x}|\mathbf{z})=N(\mathbf{x}|W\mathbf{z}+\mu_b,\sigma ^2 I)
$$
에서 설명한 대로 해당 매개변수의 값을 수정합니다.여기 행렬 $W$는 $D입니다.×$비트 행렬에서 $M$비트의 $\mathbf{z}$와 행렬을 쌓아 $D$비트가 됩니다.거기서 $\mathbf{x}$의 차원별 평균 $\mu_b\in\mathbb{R}^D$를 추가하여 $D$비트의 평균값으로 사용합니다.
또한 $\mathbf{x}$의 차원별 분포는 매개 변수 $\sigma^2$에만 결정됩니다.
모델 생성의 측면에서 볼 때 $D$비트의 관측 데이터 $\mathbf{x}$는 $M$비트의 잠재 변수 $\mathbf{z}$는 $W$와 $\mu_b$로 선형 변환을 하면 고스 분포된 잡음이 추가되었다고 생각할 수 있습니다. (대소는 $\sigma^2$에 의해 결정됩니다.)
$$
\mathbf{x}=W\mathbf{z}+\mu_b+\epsilon
$$
이 $\epsilon$는 $D$비트의 평균 0의 협방차 $\sigma^2I$의 고스 잡음을 나타냅니다.즉, 우리는 잠재 변수와 관측 데이터 x를 연결하는 $W$, $\mu_b$, $\sigma^2$를 구하면 됩니다.

예측 분포 내보내기


가장 유사한 방법 등으로 매개 변수를 확정하기 위해서는 내보낸 후 $p(\mathbf{z\x})$를 분포해야 합니다.내보내기 후 분포를 위해서는 관측 변수의 주변 분포 $p(\mathbf{x})$를 표시해야 합니다.주변 분포 $p(\mathbf{x})$확률의 덧셈정리, 곱셈정리
$$
p(\mathbf{x}) =\int p(\mathbf{x|z})p(\mathbf{z})d\mathbf{z}
$$
하계.
$p(\mathbf{x_z}), p(\mathbf{z}) $는 모두 고스 분포이기 때문에 포인트의 결과도 고스 분포이다.
따라서 $p(\mathbf{x}) $는 다음과 같습니다.
$$
p(\mathbf{x})=N(\mathbf{x}|\mathbf{\mu} ,C) , C=WW^T+\sigma ^2 I
$$
$p (\mathbf{x}) $의 고스 분포 매개 변수 $C,\mu$는 다음 주변 분포 공식에 따라 내보낼 수 있습니다.
주변 분포 공식
x의 주변 고스 분포와 x가 정해진 시간에 주어진 y의 조건 고스 분포는 다음과 같다.
$$
\begin{equation}
p(x)=N(x|\mu,\Lambda ^{-1})
\end{equation}
$$
$$
\begin{equation}
p(y|x)=N(y|Ax+b,L^{-1})
\end{equation}
$$
y의 주변 분포
$$
\begin{equation}
p(y)=N(y|A\mu+b,L^{-1}+A\Lambda ^{-1}A^T)
\end{equation}
$$
주다
이번에는 $p(\mathbf{z}) = N(\mathbf{z}\0, I) $, $p(\mathbf{x\) = N(\mathbf{x\Wz+\mu_b},\sigma^2I) $이기 때문에 각 파라미터를 위의 공식에 적용하면 $p(x) $를 내보낼 수 있습니다.공식이 있다니 깜짝 놀랐어요.
그러면 새 데이터 포인트 $\mathbf{x}^*$의 예상 분포 $p(\mathbf{x}^*|\mathbf{X})$를 내보냅니다.(PRML에 주변 분포와 같은 $p(\mathbf{x})$로 표시된 이유를 알 수 없습니다.)
분포를 예측하기 위해서는 주변 분포의 협방차 행렬 $C$의 역수 $C^{-1}$를 표시해야 합니다. $D입니다.×D$비트를 계산해야 하기 때문에 $D$가 크면 계산 비용이 매우 높습니다.따라서 아래와 같은 우드벨리 공식을 사용하여 전환한다.
우드버리 공식
$$
(A+BD^{-1}C)^{-1} = A^{-1}-A^{-1}B(D+CA^{-1}B)^{-1}CA^{-1}
$$
$$
C^{-1}=\sigma ^{-2}I-\sigma ^{-2}WM^{-1}W^T
$$
여기는 $M×$매트릭스 $M$는
$$
M=W^TW+\sigma ^{2}I
$$
에서 설명한 대로 해당 매개변수의 값을 수정합니다.
※ Woodbury를 통한 사후 분포의 의미를 이해하면 사후 분포 $p(\mathbf{z\x})$의 내보내기를 기술합니다

가장 유사한 법에 기초한 확률 주성분 분석


이전 장에 따르면 $p (\mathbf {x}) $의 주변 분포를 알았기 때문에 이를 유사함수로 하고 가장 유사법을 적용합니다.주변 배포 $p(\mathbf{x})$는
$$
p(\mathbf{x})=N(\mathbf{x}|\mu ,C) , C=WW^T+\sigma ^2 I
$$
$\mathbf{x}$는 $D$비트의 다변수이기 때문에 다변수 고스 분포에 상기 내용을 기록합니다.
다변량 고스 분포
$$
f(\mathbf{x})=\frac{1}{(\sqrt{2\pi})^D\sqrt{|\Sigma}|}\exp{(-\frac{1}{2}(\mathbf{x}-\mu)^T\Sigma ^{-1}(\mathbf{x}-\mu))}
$$
사용자 정의 모양을 정의합니다. $\Sigma$는 데이터의 분산 협방차 행렬입니다.
따라서 $p(\mathbf{x})$의 매개 변수를 대입하면 $\mu, C$
f(\mathbf{x})=\frac{1}{(\sqrt{2\pi})^D \sqrt{|C}|} \exp{(\sum^N_{n=1}-\frac{1}{2}(\mathbf{x}_n-\mu)^T  C^{-1}(\mathbf{x}_n-\mu))}
하계.가장 유사법을 응용할 때, 계산을 간소화하기 위해 대수를 취하는 유사법.
\ln p(X|\mu,C)=\sum^N_{n=1}\ln p(\mathbf{x}_n|\mu,C)=-\frac{ND}{2}\ln-\frac{N}{2}\ln (|C|)-\sum^N_{n=1}\frac{1}{2}(\mathbf{x}_n-\mu)^T  C^{-1}(\mathbf{x}_n-\mu)
$\mu$로 미세하게 나누어 평균값을 내보낼 수 있습니다.
1, 2항에 대해서는 분명히 미분하면 0이 되기 때문에 3항을 고려한다.아래와 같은 공식으로 3항을 편미분하다.
$$
\frac{\partial}{\partial x}(x^TAx)=(A+A^T)x
$$
$$
\frac{\partial}{\partial\mu}\ln p(X|\mu,C)=\frac{1}{2}(C^{-1}+C^{-T})\sum^N_{n=1}(\mathbf{x}_n-\mu)=0
$$
$$
\sum^N_{n=1}\mathbf{x}_n=N\mu
$$
$$
\frac{1}{N}\sum^N_{n=1}\mathbf{x}_n=\mu
$$
$\mu$는 최종적으로 주어진 모든 데이터의 평균이 됩니다.
이후 각 매개 변수 $W,\sigma^2$로 똑같이 진행하지만, 위대한 사람들(Tipping & Bishop)은 이미 답을 내놓았다.
$$
W_{ML}=U_M(L_M-\sigma ^2I)^{\frac{1}{2}}R
$$
여기, $U_$D×$매트릭스에서 각 열 벡터는 $X$에서 얻은 데이터 협방차 매트릭스 $S$의 고유 벡터의 임의의 하위 집합으로 구성됩니다. $L_$피쳐 벡터에 대한 피쳐 값 $\lambda_i$로 구성된 $M×$의 대각 행렬입니다. $R$는 모든 $M×$의 직교 행렬입니다.
또한 $W_{ML}$의 매개 변수 $\sigma$의 최대 유사해는 다음과 같습니다.
$$
\sigma^2_{ML}=\frac{1}{D-M}\sum^D_{i=M+1}\lambda_i
$$
또한 Tipping & Bishop 등은 고유값의 상위 $M$개를 선택하여 가장 가능성이 높은 $W_{ML}$및 $\sigma^2_{ML}$을 얻을 수 있음을 나타냅니다.
다음 절은 이 값을 사용하여 실제 설치 주성분 분석을 합니다.

실시


import numpy as np#numpyをインストール
import matplotlib.pyplot as plt#グラフを書くやつ
import scipy.linalg
from mpl_toolkits.mplot3d import Axes3D#3次元plotを行うためのツール
from sklearn.preprocessing import Normalizer
from sklearn.preprocessing import StandardScaler
from sklearn import decomposition#PCAのライブラリ
from sklearn import datasets#datasetsを取ってくる
from numpy import linalg as LA
UM=[]
n_component=2
np.set_printoptions(suppress=True)
fig = plt.figure(2, figsize=(14, 6))
iris = datasets.load_iris()
X = iris.data
y = iris.target
N=150
D=4
M=2
step=100
W =np.random.randn(4, 2)
sigma = 0
for i in range(4):#各データの平均を元のデータから引いている
    mean = np.mean(X[:,i])
    X[:,i]=(X[:,i]-mean)


X_cov=np.dot(X.T,X)#共分散行列を生成
w,v=np.linalg.eig(X_cov)#共分散行列の固有値、固有ベクトルを算出(固有値は既に大きさ順に並べられている)
for i in range(n_component):#固有値の大きい順に固有ベクトルを取り出す
    UM.append(v[:,i])
UM=np.array(UM)
a = np.array([w[0], w[1]])
Lm = np.diag(a)
m = float(D-M)

for i in range(D-M+1):
  sigma += w[i]/m

Xpc = scipy.linalg.sqrtm(Lm-sigma*np.eye(M))
Wml=np.dot(UM.T,Xpc)#WMLの計算
Xafter=np.dot(X,W)#取り出した固有ベクトルでデータを線形写像する


pca = decomposition.PCA(n_components=2)
pca.fit(X)
Xlib = pca.transform(X)    


ax1 = fig.add_subplot(121)
for label in np.unique(y):
    ax1.scatter(Xlib[y == label, 0],
                Xlib[y == label, 1])
ax1.set_title('library pca')
ax1.set_xlabel("X_axis")
ax1.set_ylabel("Y_axis")
ax2 = fig.add_subplot(122)
for label in np.unique(y):
    ax2.scatter(Xafter[y == label, 0],
                Xafter[y == label, 1])
ax2.set_title('original pca')
ax2.set_xlabel("X_axis")
ax2.set_ylabel("Y_axis")
plt.show()


왼쪽 그림은 주성분 분석 결과를 나타내고, 오른쪽 그림은 확률 주성분 분석 결과를 나타낸다. $W$의 초기 값은 무작위 수이기 때문에 매번 실행되는 결과는 변하지만, 나는 대체적으로 주성분을 보존하여 비례 삭감할 수 있다고 생각한다.

총결산


이번 보도는 가장 유사한 설치만 진행할 수 있다.최대 유사 추정에서 주성분 분석을 확률적으로 재해석하는 것은 좋은 점이 없다.앞으로 EM 알고리즘과 베일스가 추정한 확률 주성분 분석을 실시함으로써 확률 주성분 분석의 정수를 느껴보자.

참고 문헌


패턴 인식 및 머신러닝 (하권)

좋은 웹페이지 즐겨찾기