
안녕하세요, 여러분! 오늘 우리는 고유벡터의 필요성과 수학적 의미에 대해 알아보겠습니다. 고유벡터를 이해하기 위해서는 선형 변환과 고유값에 대한 배경 지식이 필요합니다. 차근차근 알아가면서 이해해 보도록 합시다.
선형 변환과 고유값
선형 변환은 벡터 공간 내에서 벡터를 다른 위치나 방향으로 이동시키는 함수입니다. 이 때, 선형 변환의 특성에 따라 벡터의 크기와 방향이 변하게 됩니다. 고유값 문제는 선형 변환을 적용한 후에도 방향이 변하지 않는 벡터(고유벡터)를 찾는 문제입니다. 고유값은 이 고유벡터의 크기가 얼마나 변하는지를 나타내는 스칼라 값입니다.
선형 변환의 고유값 문제는 다음과 같은 형태로 나타낼 수 있습니다.
$$ Av = \lambda v $$
여기서 $A$는 선형 변환을 나타내는 행렬, $v$는 고유벡터, $\lambda$는 고유값입니다.
1. 스케일링 (Scaling)
스케일링 변환은 각 축에 따라 벡터의 크기를 조절하는 변환입니다. 스케일링 변환 행렬은 대각 행렬로, 대각 성분은 각 축에 대한 스케일링 요소를 나타냅니다. 다른 성분은 모두 0입니다.
예시:
2차원 벡터 공간에서 x축 방향으로 2배, y축 방향으로 3배 스케일링을 적용하려면 다음과 같은 행렬을 사용합니다.
$$\begin{bmatrix} 2 & 0 \\ 0 & 3 \end{bmatrix}$$
2. 회전 (Rotation)
회전 변환은 벡터를 원점을 중심으로 일정한 각도로 회전시키는 변환입니다. 회전 변환 행렬은 직교 행렬(orthogonal matrix)입니다. 이 행렬은 역행렬이 전치 행렬과 동일합니다.
예시:
2차원 벡터 공간에서 시계 반대 방향으로 θ 각도 만큼 회전하는 변환 행렬은 다음과 같습니다.
$$\begin{bmatrix} \cos \theta & -\sin \theta \\ \sin \theta & \cos \theta \end{bmatrix}$$
3. 전단 (Shear)
전단 변환은 한 축을 따라 벡터를 밀어서 이동시키는 변환입니다. 전단 변환 행렬은 대각선이 1인 형태를 가지며, 나머지 성분은 전단 요소를 나타냅니다.
예시:
2차원 벡터 공간에서 x축에 대한 전단 변환을 적용하려면 다음과 같은 행렬을 사용합니다.
$$\begin{bmatrix} 1 & k \\ 0 & 1 \end{bmatrix}$$
여기서 k는 전단 요소입니다.
4. 반사 (Reflection)
선형 변환의 또 다른 기하적 특성은 반사입니다. 반사는 벡터를 특정 축에 대해 대칭시키는 변환입니다. 기하학적으로는 벡터를 미러 이미지로 변환하는 것과 같습니다. 반사 변환은 대칭 행렬로 표현할 수 있습니다.
예시:
2차원 벡터 공간에서 x축에 대해 반사하는 변환 행렬은 다음과 같습니다.
$$ \begin{bmatrix} 1 & 0 \\ 0 & -1 \end{bmatrix}$$
이 행렬은 y축에 대칭된 벡터를 생성합니다. 만약 y축에 대해 반사하려면, 대신 다음과 같은 행렬을 사용합니다.
$$\begin{bmatrix} -1 & 0 \\ 0 & 1 \end{bmatrix}$$
이 행렬은 x축에 대칭된 벡터를 생성합니다.
이처럼 선형 변환의 각 기하학적 특성에 따라 변환 행렬은 다양한 특징을 가집니다. 이러한 변환 행렬들을 이해하고 활용하면 선형 변환을 통해 벡터 공간 내에서 벡터의 위치와 방향을 조절할 수 있습니다.
고유벡터와 고유값을 구하는 과정: Av=λv
이번에는 선형 변환에서 고유벡터와 고유값을 어떻게 구하는지 살펴보겠습니다. 우리가 다루는 문제는 다음과 같은 형태로 나타낼 수 있습니다.
$$ Av = \lambda v $$
여기서 $A$는 선형 변환을 나타내는 행렬, $v$는 고유벡터, $\lambda$는 고유값입니다. 이 문제의 해답을 찾는 과정을 이해하려면 행렬, 벡터, 그리고 특성 방정식의 개념에 대한 이해가 필요합니다.
1. 고유값 문제를 변형하기
우선, 고유값 문제를 다음과 같이 변형합니다.
$$ Av - \lambda v = 0 $$
그리고 이를 다음과 같이 표현할 수 있습니다.
$$ (A - \lambda I) v = 0 $$
여기서 $I$는 항등행렬(identity matrix)입니다. 이 문제는 $(A - \lambda I)$라는 행렬이 영벡터(null vector)가 아닌 벡터 $v$를 영벡터로 변환하는 문제로 해석할 수 있습니다.
2. 특성 방정식 구하기
영벡터가 아닌 벡터 $v$가 존재할 때, 행렬 $(A - \lambda I)$는 역행렬이 존재하지 않아야 합니다. 이를 통해 행렬식(determinant)을 사용하여 다음과 같은 특성 방정식(characteristic equation)을 얻을 수 있습니다.
$$ |A - \lambda I| = 0 $$
특성 방정식은 고유값 $\lambda$에 대한 다항 방정식입니다.
3. 고유값 찾기
특성 방정식을 풀어 고유값 $\lambda$를 구합니다. 특성 방정식은 일반적으로 $n$차 다항 방정식이며, $n$개의 복소수 해를 가질 수 있습니다. 이 중 실수 해가 고유값이 됩니다.
4. 고유벡터 찾기
고유값을 구한 후, 원래의 고유값 문제로 돌아와 각 고유값에 해당하는 고유벡터를 찾습니다.
$$ (A - \lambda I) v = 0 $$
행렬 $(A - \lambda I)$와 벡터 $v$를 곱해 영벡터를 만드는 벡터 $v$를 찾으면 고유벡터를 구할 수 있습니다.
이렇게 선형 변환에서 고유벡터와 고유값을 찾는 과정을 통해 우리는 선형 변환의 특성을 파악할 수 있습니다. 고유벡터와 고유값은 선형 변환에서 가장 큰 영향력을 가진 방향과 크기를 나타냅니다. 이를 이용하면 데이터의 주성분을 찾거나 차원을 축소하는 등 다양한 문제를 해결할 수 있습니다.
고유벡터의 수학적 의미
선형 변환에는 고유벡터와 고유값이라는 중요한 개념이 있습니다. 고유벡터는 선형 변환을 적용하더라도 방향이 변하지 않고 크기만 변하는 벡터입니다. 고유값은 고유벡터의 크기가 얼마나 변하는지를 나타냅니다. 고유벡터와 고유값은 선형 변환의 주요 방향과 크기를 나타내며, 이를 활용하여 데이터의 주성분을 찾거나 차원을 축소하는 등 다양한 문제를 해결할 수 있습니다.
고유값이 큰 고유벡터의 중요성
고유값은 고유벡터의 크기가 선형 변환에 의해 얼마나 변하는지를 나타냅니다. 고유값이 큰 경우, 해당 고유벡터 방향의 정보가 더 많이 보존되는 것으로 해석할 수 있습니다. 이 말은 고유값이 큰 고유벡터가 선형 변환에서 가장 큰 영향력을 가진 방향임을 나타냅니다.
고유값이 큰 고유벡터의 특징
선형 변환에 의해 고유벡터의 크기만 변하고 방향은 변하지 않는다는 사실을 상기해봅시다. 고유값은 이 크기 변화를 나타내는 스칼라값입니다. 고유값이 크다는 것은 선형 변환에 의해 해당 방향의 벡터가 상대적으로 더 많이 확장되거나 축소된다는 것을 의미합니다.따라서 고유값이 큰 고유벡터는 데이터의 주요 패턴이나 구조를 나타낼 가능성이 높습니다. 이는 해당 방향에 있는 벡터들이 전체 데이터의 변동성을 더 많이 설명할 수 있다는 것을 의미합니다. 따라서 고유값이 큰 고유벡터를 사용하면 데이터의 중요한 정보를 보존하면서 차원을 축소할 수 있습니다.
고유벡터의 방향
고유벡터의 각 성분은 벡터의 방향을 결정하는 요소입니다. 벡터는 $n$차원 공간에서 한 점으로부터 다른 점으로의 방향과 거리를 나타내는 표현입니다. $n$차원 벡터의 경우, 각 성분은 해당 차원에서의 위치를 나타냅니다. 예를 들어, 3차원 벡터 $(x, y, z)$는 $x$축, $y$축, $z$축에서 각각의 위치를 의미합니다. 따라서 고유벡터의 각 성분은 고유벡터가 가리키는 방향을 결정합니다.
고유벡터의 길이
고유벡터의 길이는 벡터의 크기를 나타내는 척도입니다. 길이가 긴 벡터는 원점에서 멀리 떨어져 있는 점을 나타내며, 길이가 짧은 벡터는 원점에 가까운 점을 나타냅니다. 고유벡터의 길이는 고유값에 의해 결정되며, 고유값은 선형 변환에 의한 크기 변화를 나타냅니다.
주성분 분석(PCA, Principal Component Analysis)
주성분 분석은 다변량 데이터를 분석하는 방법 중 하나로, 고차원 데이터에서 가장 중요한 정보를 나타내는 적은 수의 차원(주성분)으로 데이터를 표현하는 기법입니다. 주성분 분석의 목적은 다음과 같습니다.
- 데이터의 차원 축소: 고차원 데이터에서 중요한 정보를 캡처하면서 차원을 줄여, 계산 복잡도를 줄이고 시각화를 용이하게 합니다.
- 데이터의 압축: 중요한 정보를 가장 잘 보존하면서 데이터의 크기를 줄여 저장 공간과 처리 시간을 절약할 수 있습니다.
- 노이즈 제거: 주성분들이 데이터의 중요한 패턴을 나타내기 때문에, 주성분으로 데이터를 표현하면 노이즈를 제거하거나 줄일 수 있습니다.
주성분 분석방법
주성분 분석은 데이터의 공분산 행렬을 통해 진행됩니다. 공분산 행렬은 데이터의 변수들 간의 선형 관계를 나타내는 행렬로, 이 행렬의 고유벡터와 고유값을 구하여 주성분을 찾습니다. 고유값이 큰 순서대로 정렬된 고유벡터가 주성분이 되며, 이 주성분들은 데이터의 가장 큰 변동성을 나타내는 방향으로 해석됩니다.
주성분 분석(PCA)은 고차원 데이터를 저차원 데이터로 변환하는 과정을 포함하며, 다음과 같은 순서로 진행됩니다.
- 데이터 정규화: 주성분 분석을 수행하기 전에, 데이터를 정규화하여 각 특성의 평균이 0이고 표준편차가 1이 되도록 조정합니다. 이렇게 하면 각 특성의 크기에 따른 영향을 제거하고, 모든 특성이 동일한 중요도를 가지도록 할 수 있습니다.
- 공분산 행렬 계산: 정규화된 데이터로부터 공분산 행렬을 계산합니다. 공분산 행렬은 데이터의 각 변수 간의 선형 관계를 나타내며, 이를 통해 데이터의 분포와 패턴을 파악할 수 있습니다.
- 고유값과 고유벡터 계산: 공분산 행렬의 고유값과 고유벡터를 구합니다. 고유값은 고유벡터의 크기가 변하는 정도를 나타내며, 고유벡터는 데이터의 변동성을 나타내는 방향입니다.
- 고유값 정렬: 고유값을 큰 순서대로 정렬합니다. 이때, 고유값이 큰 고유벡터가 데이터의 가장 큰 변동성을 나타내는 주성분이 됩니다.
- 주성분 선택: 가장 큰 고유값을 가진 고유벡터부터 차례대로 선택하여 주성분을 결정합니다. 선택할 주성분의 개수는 데이터의 차원을 얼마나 줄일지에 따라 결정됩니다.
- 새로운 데이터 투영: 선택한 주성분을 기준으로 원래의 고차원 데이터를 새로운 저차원 공간에 투영합니다. 이렇게 투영된 데이터는 원래 데이터의 주요 패턴과 정보를 최대한 보존하면서 차원이 축소됩니다.
주성분 분석 예시
다음은 4개의 2차원 데이터 포인트를 사용한 주성분 분석 예시입니다.
데이터 포인트:
$$A = \begin{bmatrix} 1 & 2 \\ 3 & 4 \\ 5 & 6 \\ 7 & 8 \end{bmatrix}$$
- 데이터 정규화: 각 열의 평균과 표준편차를 구한 후, 정규화를 진행합니다.
평균:
$$\mu_x = \frac{1+3+5+7}{4} = 4, \mu_y = \frac{2+4+6+8}{4} = 5$$
표준편차:
$$\sigma_x = \sqrt{\frac{(1-4)^2+(3-4)^2+(5-4)^2+(7-4)^2}{4}} = 2$$
$$\sigma_y = \sqrt{\frac{(2-5)^2+(4-5)^2+(6-5)^2+(8-5)^2}{4}} = 2$$
정규화된 데이터:
$$A_{norm} = \begin{bmatrix} \frac{1-4}{2} & \frac{2-5}{2} \\ \frac{3-4}{2} & \frac{4-5}{2} \\ \frac{5-4}{2} & \frac{6-5}{2} \\ \frac{7-4}{2} & \frac{8-5}{2} \end{bmatrix} = \begin{bmatrix} -1.5 & -1.5 \\ -0.5 & -0.5 \\ 0.5 & 0.5 \\ 1.5 & 1.5 \end{bmatrix}$$
- 공분산 행렬 계산: 정규화된 데이터로부터 공분산 행렬을 계산합니다.
$$C = \frac{1}{4} A_{norm}^T A_{norm} = \begin{bmatrix} 2.5 & 2.5 \\ 2.5 & 2.5 \end{bmatrix}$$
- 고유값과 고유벡터 계산: 공분산 행렬의 고유값과 고유벡터를 구합니다.
고유값: $$\lambda_1 = 5, \lambda_2 = 0$$
고유벡터: $$v_1 = \begin{bmatrix} \frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}} \end{bmatrix}, v_2 = \begin{bmatrix} -\frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}} \end{bmatrix}$$
- 고유값 정렬: 고유값이 큰 순서대로 고유벡터를 정렬합니다. 여기서는 $\lambda_1$이 가장 큰 고유값이므로, $v_1$이 첫 번째 주성분이 됩니다.
- 주성분 선택: 여기서는 첫 번째 주성분만 선택합니다. 이 경우, 데이터의 차원은 2차원에서 1차원으로 축소됩니다.
- 데이터 투영: 선택된 주성분으로 데이터를 투영합니다. 이를 위해 정규화된 데이터 행렬 $A_{norm}$과 첫 번째 주성분 벡터 $v_1$의 내적을 계산합니다.
$$A_{proj} = A_{norm} \cdot v_1 = \begin{bmatrix} -1.5 & -1.5 \\ -0.5 & -0.5 \\ 0.5 & 0.5 \\ 1.5 & 1.5 \end{bmatrix} \cdot \begin{bmatrix} \frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}} \end{bmatrix} =\begin{bmatrix} -1.5\frac{1}{\sqrt{2}} + (-1.5)\frac{1}{\sqrt{2}} \\ -0.5\frac{1}{\sqrt{2}} + (-0.5)\frac{1}{\sqrt{2}} \\ 0.5\frac{1}{\sqrt{2}} + 0.5\frac{1}{\sqrt{2}} \\ 1.5\frac{1}{\sqrt{2}} + 1.5\frac{1}{\sqrt{2}} \end{bmatrix}= \begin{bmatrix} -2.12 \\ -0.71 \\ 0.71 \\ 2.12 \end{bmatrix}$$
이제 데이터가 첫 번째 주성분에 투영되었으며, 2차원에서 1차원으로 차원 축소가 완료되었습니다. 이 과정을 통해 데이터의 분산이 최대한 유지되면서 차원이 축소되었습니다. 이렇게 주성분 분석을 사용하여 차원 축소를 진행하면 데이터의 패턴을 더 쉽게 이해할 수 있으며, 계산량도 줄일 수 있습니다.
주성분 분석 python code
Python의 scikit-learn 라이브러리를 사용하여 주성분 분석을 수행할 수 있습니다. 먼저 필요한 라이브러리를 설치하고, 데이터를 준비한 후 PCA를 적용해보겠습니다.
- 필요한 라이브러리를 설치합니다.
pip install numpy scikit-learn
- 주성분 분석을 수행할 Python 코드를 작성합니다.
import numpy as np
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
# 데이터 준비
data = np.array([[1, 1],
[2, 2],
[3, 3],
[4, 4]])
# 데이터 표준화 (평균을 0, 표준편차를 1로 만들어줍니다)
scaler = StandardScaler()
scaled_data = scaler.fit_transform(data)
# PCA 객체 생성 (n_components는 축소할 차원의 수를 설정합니다)
pca = PCA(n_components=1)
# PCA 적용
pca_data = pca.fit_transform(scaled_data)
# 결과 출력
print("원본 데이터:\n", data)
print("\n표준화된 데이터:\n", scaled_data)
print("\nPCA 결과:\n", pca_data)
이 코드는 2차원 데이터를 1차원으로 축소하는 예제입니다. data 변수에 사용할 데이터를 넣고, n_components를 변경하여 원하는 차원으로 축소할 수 있습니다. 실행하면 주성분 분석을 통해 차원 축소된 결과가 출력됩니다.
You know what's cooler than magic? Math.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!