본문 바로가기
TIL

[TIL] 241210 코사인 유사도, 고유값과 고유벡터

by 좌우지간에 2024. 12. 10.

코사인 유사도란?

  • 두 벡터 간의 각도를 이용하여 유사도를 측정하는 방법입니다.
  • 코사인 유사도는 두 벡터가 이루는 각의 코사인 값을 계산하여 유사도를 나타냅니다.
  • 이론상 값의 범위는 -1에서 1까지이며, 1에 가까울수록 두 벡터가 유사하다는 것을 의미합니다.
  • 실제 코사인 유사도를 구성하는 벡터값은 거의 1사분면만 지나기 때문에 값의 범위는 0에서 1범위이 됩니다.

 

코사인 유사도를 사용하는 이유

  1. 크기 무시: 벡터의 크기(길이)를 무시하고 방향만 비교합니다.
    • 예를 들어, 문서의 길이가 다르더라도 내용이 비슷하면 유사하다고 판단할 수 있습니다.
  2. 단순성: 계산이 간단하고 효율적입니다.
    • 두 벡터의 내적(dot product)과 크기(norm)만으로 계산할 수 있습니다.
  3. 정규화 필요 없음: 벡터를 정규화하지 않아도 됩니다.
    • 벡터의 크기에 영향을 받지 않기 때문에, 데이터 전처리가 간단해집니다.

 

사인과 탄젠트를 사용하지 않는 이유

  1. 사인(Sine)
    • 사인은 두 벡터가 이루는 각의 직교성을 측정합니다.
    • 유사도보다는 직교성(90도에 가까운지)을 측정하는 데 적합합니다.
    • 유사도를 측정하는 데는 부적합합니다.
  2. 탄젠트(Tangent)
    • 탄젠트는 각의 기울기를 나타냅니다.
    • 각도가 90도에 가까워지면 값이 무한대로 발산합니다.
    • 유사도를 측정하는 데 안정적이지 않습니다.

 

비유로 이해하기

  • 코사인: 두 사람이 같은 방향을 바라보고 있는지를 확인하는 것과 같습니다. 방향이 같으면 유사하다고 판단합니다.
  • 사인: 두 사람이 서로 직각으로 서 있는지를 확인하는 것과 같습니다. 직교성을 측정하는 데 사용됩니다.
  • 탄젠트: 두 사람이 바라보는 방향의 기울기를 측정하는 것과 같습니다. 각도가 커질수록 값이 불안정해집니다.

 

 


 

 

고유값과 고유벡터란?

  • 정방행렬 A에 어떤 벡터 v를 곱했을 때, 그 결과가 단순히 그 벡터에 상수 λ를 곱한 것과 같아지는 경우가 있습니다.
  • 이때 이 상수 λ를 '고유값(eigenvalue)'이라 하고, 벡터 v를 '고유벡터(eigenvector)'라고 합니다.

 

수식으로 표현하면:

Av = λv

여기서:

  • A는 n×n 정방행렬
  • v는 영벡터가 아닌 벡터
  • λ는 스칼라 값(고유값)

 

쉬운 예시로 이해하기

예를 들어, 다음과 같은 2×2 행렬이 있다고 가정해봅시다:

A = [2  0]
    [0  3]

이 행렬의 경우:

  1. λ = 2일 때의 고유벡터는 [1, 0]
  2. λ = 3일 때의 고유벡터는 [0, 1]

 

고유값과 고유벡터의 의미

  1. 방향 변화: 고유벡터는 행렬 변환 후에도 방향이 변하지 않는 특별한 벡터입니다.
  2. 크기 변화: 고유값은 고유벡터가 얼마나 늘어나거나 줄어드는지를 나타냅니다.

 

실생활 응용

  1. 검색 엔진: 구글의 PageRank 알고리즘
  2. 이미지 압축: JPEG 압축에서 사용
  3. 진동 분석: 건물이나 다리의 진동 특성 분석
  4. 양자역학: 입자의 상태를 표현

 

계산법

 

계산 단계

  1. 특성방정식(고유방정식) 구하기여기서:
  2. det(A - λI) = 0
  • det는 행렬식(determinant)
  • A는 주어진 행렬
  • λ는 고유값을 나타내는 미지수
  • I는 단위행렬
  1. 고유값 구하기
  • 특성방정식을 풀어서 λ값들을 구합니다.
  1. 고유벡터 구하기
  • 각 고유값을 (A - λI)v = 0 에 대입하여 연립방정식을 풉니다.

 

예시 문제

2×2 행렬의 경우를 살펴보겠습니다:

A = [3  1]
    [1  3]

 

1단계: 특성방정식 구하기

det([3-λ   1  ]) = 0
    [1    3-λ]

(3-λ)(3-λ) - 1 = 0
(3-λ)² - 1 = 0
λ² - 6λ + 8 = 0

 

2단계: 고유값 구하기

λ² - 6λ + 8 = 0
(λ - 2)(λ - 4) = 0
λ = 2 또는 λ = 4

 

3단계: 고유벡터 구하기

λ = 2일 때:

[3-2  1 ][x] = [0]
[1   3-2][y]   [0]

[1  1][x] = [0]
[1  1][y]   [0]

x + y = 0
x = -y

따라서 고유벡터는 [1, -1]

λ = 4일 때:

[3-4  1 ][x] = [0]
[1   3-4][y]   [0]

[-1  1][x] = [0]
[1  -1][y]   [0]

x = y

따라서 고유벡터는 [1, 1]

 

주의사항

  1. 고유벡터는 스칼라배를 해도 여전히 고유벡터입니다.
  2. n×n 행렬은 최대 n개의 서로 다른 고유값을 가질 수 있습니다.
  3. 중복 고유값이 있을 수 있습니다.

 

계산 팁

  1. 2×2 행렬의 경우:
    • 고유값의 합 = 대각선 원소의 합(trace)
    • 고유값의 곱 = 행렬식(determinant)
  2. 삼각행렬의 경우:
    • 대각선 원소가 바로 고유값입니다.

'TIL' 카테고리의 다른 글

Docker 소개  (0) 2025.01.31
[TIL] 241216  (2) 2024.12.16
[WIL] 24.12 1주차  (2) 2024.12.06
[TIL] 241206 Markdown 문법 정리  (1) 2024.12.06
[TIL] 241128 개발환경셋팅(Input-leap)  (2) 2024.11.28