특징값, 고유 벡터의 응용 예(주성분 분석)

입문


이 기사고천 연구실 Workout_calendar13일째 보도입니다.
이 보도는 고천 연구실 학생들이 학습의 일환으로 쓴 것이다.내용이 애매하거나 표현이 다소 다른 경우가 있다.
한편 이 기사는 총 3부작으로 후편이라고 할 수 있다.
전편:특징값과 특징방향량의 성질
중편:피쳐 값과 피쳐 벡터의 응용 예 (2차 형식)
후편: 고유 값과 고유 벡터의 응용 예 (주성분 분석) ← 지금 여기
이 글에서 전편에서 가볍게 언급한 고유치 문제의 예로 기계 학습에 사용된 절삭감법 중의 주성분 분석을 기술하고 싶습니다.

주성분 분석


주성분 분석은 차원 삭감 방법 중 하나로 다차원 데이터를 가시화할 때 사용된다.
주성분 분석의 관건은 다음과 같은 협방차 행렬이다.
S = \frac{1}{N}\sum_{n=1}^N(\mathbf{x}_n-\mathbf{\bar x})(\mathbf{x}_n-\mathbf{\bar x})^T
표현식의 $\mathbfx_n$는 D비트의 모든 데이터를 표시하고, $\mathbf{\barx}$는 모든 데이터의 평균값을 표시합니다.
D비트 데이터 $\mathbf x_n$를 1차원 공간에 투영하는 것을 고려하십시오.
또 주성분 분석에서 투영 후의 데이터를 최대한 분산시키기 위해 차원을 줄였다.
나는 그 사람이 많은 데이터 정보를 남겼다고 생각한다.
D비트 벡터로 $\mathbf{u}$를 도입하여 데이터를 투영합니다. $\mathbf{u}$와 $\mathbf{x}_n$의 행렬 곱셈을 가져옵니다.
또한 $\mathbf{u}$가 단위 벡터라고 가정합니다.즉, $\mathbf{u}^T\mathbf{u}=1$입니다.
투영된 데이터 분포
$$
\frac{1}{N}\sum_{n=1}^N{\mathbf{u}^T\mathbf{x}_n-\mathbf{u}\mathbf{\bar x}}^2
$$
하계.하면, 만약, 만약...
\frac{1}{N}\sum_{n=1}^N(\mathbf{\mathbf{u}^T\mathbf{x}_n-u\mathbf{\bar x})(\mathbf{u}^T\mathbf{x}_n-\mathbf{u}\mathbf{\bar x})}^T
\frac{1}{N}\sum_{n=1}^N\{(\mathbf{u}^T\mathbf{x}_n)(\mathbf{u}^T\mathbf{x}_n)^T-(\mathbf{u}^T\mathbf{x}_n)(\mathbf{u}^T\mathbf{\bar x})^T-(\mathbf{u}^T\mathbf{\bar x})(\mathbf{u}^T\mathbf{x}_n)^T+(\mathbf{u}^T\mathbf{\bar x})(\mathbf{u}^T\mathbf{\bar x})^T\}
$\mathbf {(A^TB)^T=B^TA}$를 각 항목에 적용하여 정리한 경우
\frac{1}{N}\sum_{n=1}^N(\mathbf{u}^T\mathbf{x}_n^2\mathbf{u}-2\mathbf{u}^T\mathbf{\bar x} \mathbf{x}_n\mathbf{u}+\mathbf{u}^T\mathbf{\bar x}^2\mathbf{u})
$\mathbf{u^T,u}$
\frac{1}{N}\sum_{n=1}^N\mathbf{u}^T(\mathbf{x}_n^2-2\mathbf{\bar x}_n \mathbf{x}_n+ \mathbf{\bar x}_n^2)\mathbf{u}\\
=\mathbf{u^T}\left \{\frac{1}{N}\sum_{n=1}^N{(\mathbf{x}_n-\mathbf{\bar x})(\mathbf{x}_n-\mathbf{\bar x})}^T\right \}\mathbf{u}
=\mathbf{u}^T\mathbf{Su}
하계.이렇게 분산된 $\mathbf{u}^T\mathbf{Su}$를 최대화합니다. $\mathbf{S}$는 데이터에 의해 확정된 협방차 행렬이기 때문에 $\mathbf{u}$를 최대화합니다.
$\mathbf{u}$를 최대화하려면 "$\mathbf{u}$=∞가 가장 크지 않습니까? 하하하"라는 말이 많아서 추가 제한이 있습니다.
\mathbf{u}^TS\mathbf{u}+\lambda (1-\mathbf{u}^T\mathbf{u})
$\lambda$는 계수(라그랑 일승수)입니다.이 표현식을 $\mathbf{u}$로 미세하게 나누어 0의 위치를 찾습니다.
S\mathbf{u}-\lambda \mathbf{u}=0\\
S\mathbf{u}=\lambda \mathbf{u}
이 형식은 뜻밖에도 이 문장의 제1판에 기재된 고유값 문제의 공식인 $A\mathbf{x}=\lambda\mathbf{x}$와 일치한다.즉, $\lambda$는 고유 값입니다.너 정말 대단하다
$S\mathbf{u}=\lambda\mathbf{u}$왼쪽에서 오른쪽으로 $\mathbf{u}^T$
$$
\mathbf{u}^TS\mathbf{u}=\lambda\mathbf{u}^T\mathbf{u}
$$
$\mathbf{u}^T\mathbf{u}=1$
$$
\mathbf{u}^TS\mathbf{u}=\lambda
$$
에서 기술한 장면은 다음 절차를 이용하여 명세표를 작성하여 개념 디자인에서 체량의 둘레를 분석하도록 한다.또한 2차원, 3차원에 투영하기 위해 협방차 행렬의 고유값이 큰 것부터 그에 대응하는 고유 벡터를 순서대로 선택하면 된다.고유치 문제.
예를 들어 데이터가 4차원이면 4개의 특징 값이 나타난다.2차원으로 가시화하기 위해 고유값이 큰 순서부터 두 개를 주요 성분으로 하고 이 고유값에 대응하는 고유 벡터 투영 데이터를 통해
실제 느낌을 위해 구체적인 실시 예는 다음과 같다.
print(__doc__)

#PCA:主成分分析
# Code source: Gaël Varoquaux
# License: BSD 3 clause

import numpy as np#numpyをインストール
import matplotlib.pyplot as plt#グラフを書くやつ
from mpl_toolkits.mplot3d import Axes3D#3次元plotを行うためのツール
from sklearn import decomposition#PCAのライブラリ
from sklearn import datasets#datasetsを取ってくる

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
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):#固有値の大きい順に固有ベクトルを取り出す
    Xpc[i]=v[:,i]
Xpc=np.array(Xpc)
Xafter=np.dot(X,Xpc.T)#取り出した固有ベクトルでデータを線形写像する


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()

이번에 Scikit-learn에 공개됩니다Iris 데이터 세트 4차원 데이터를 2차원으로 줄여 가시화시킨다.
왼쪽은 scikit-learn이 공개한 주성분 분석용 라이브러리의 결과이고, 오른쪽은 실제 재현 공식으로 주성분 분석을 한 결과다.
오른쪽과 왼쪽의 결과는 scikit-learn 라이브러리의 규격에 따라 다르다.일반적으로 고유 벡터는 유일하게 확정된 것이 아니지만 scikit-learn에서 고유 벡터를 제1주성분인 고유 벡터의 제1요소를 정으로 설정하여 결과가 반전된다.
아이리스 데이터 집합은 아이리스 품종의 데이터 집합이다.그것은 세트나, 바시크, 버지니아 세 종류의 아이리스 꼬리의 학편 길이, 학편 너비, 꽃잎 길이와 꽃잎 너비로 구성되어 있다.
아이리스 데이터 집합을 직접 보여주려고 해도 아이리스 꼬리 데이터가 4개나 되기 때문에 2차원이나 3차원에서 보여줄 수 없다.
그곳에서 차원 삭감을 하지만 최대한 메시지를 남겨 차원을 낮추고 싶다.
주성분 분석 결과를 보면 세트나, 브라질, 버지니아의 세 가지 데이터가 예쁘게 나뉘어 보인다.
이것이 바로 대축을 분산시키는 것을 선택하는 장점이다.분산된 축을 선택하여 데이터 정보를 보존하는 상황에서 차원 삭감을 한다.
그리고 그것을 가능하게 하는 것은 고유치, 고유 벡터라는 요소이다.

총결산


본 보도는 고유치 문제의 한 예로 주성분 분석을 설치하였다.
따라서 우리는 특징치, 특징 벡터가 기계 학습에서도 중요한 요소임을 발견했다.
3편의 문장에 고유값, 고유벡터를 기술하였는데, 3편의 읽기를 통해 고유값, 고유벡터가 무엇인지, 어떻게 사용되는지 이해할 수 있다면 좋겠다.
전편:특징값과 특징방향량의 성질
중편:피쳐 값과 피쳐 벡터의 응용 예 (2차 형식)
후편: 고유 값과 고유 벡터의 응용 예 (주성분 분석) ← 지금 여기
참고 문헌: 0부터 학습하는 선형 대수, 기계 학습의 정수, 패턴 식별과 기계 학습(하권)

좋은 웹페이지 즐겨찾기