본문 바로가기
컴퓨터/선형대수

[선형대수] 1. 선형대수는 어디에 쓰이는지, 내적활용

by IT황구 2021. 1. 5.
728x90
반응형

안녕하세요!!

인공지능을 위한 선형대수를 수강하면서 어떤 부분들이 선형대수에 사용되는지 궁금했습니다.

그리고 포스팅 방식에 대해서도 고민을 많이 했는데..

내용들이 매 주차마다 너무 길어서 그냥 제 기준대로 포스팅 하겠습니다.

1. 새로 배웠거나

2. 새로운 활용을 배웠거나

3. 중요한것 같다고 생각되는 부분

SageMath(과거 명칭: Sage 또는 SAGE, "System for Algebra and Geometry Experimentation"[1])는 대수학, 조합론, 그래프 이론, 수치해석, 수론, 미적분학, 통계학 등 수학의 다양한 분야의 기능을 갖춘 컴퓨터 대수학 시스템

- wikipedia

SageMath라는 python 기반 시스템을 이용해서 실습합니다.

https://sagecell.sagemath.org/

 

Sage Cell Server

Loading [MathJax]/extensions/TeX/color.js Type some Sage code below and press Evaluate. 1 ​ Evaluate Language: About SageMathCell About SageMathCell project is an easy-to-use web interface to a free open-source mathematics software system SageMath . You can help SageMath by becoming a . It allows em...

sagecell.sagemath.org

앞으로 여기서 실행을 해보면 됩니다.

1. 행렬 기반 데이터 분석

---참고 : 아직 저도 내용에 대해서 자세히 배우지 않아서 개요만 알고 있습니다.

(1) Linear Regression (선형 회귀)

이 부분은 저도 용어만 들어봤는데 결국 최소제곱의 해를 구하는 문제라는걸 처음 알았습니다.

예전에 공부하면서 통계쪽에서 쓰인다고 들었던것 같은데.. 여기서 오랜만에 만나서 반가웠습니다.

출처 - https://en.wikipedia.org/wiki/Linear_regression

(2) Principal Component Analysis (PCA 주성분 분석)

출처 - https://chrisalbon.com/

Data Label이 없는경우에 사용한다고 들었는데 사실 무슨 내용인지 모르겠습니다. 이 부분은 나중에 배우게 될 것 같습니다.

안에 내용을 보면 주성분의 특징을 예상? 같은 걸 하는것 같은데.. 정보를 최대한 잃지 않으면서 차원을 축소하려고 쓴다고 되어있는데

어떻게 쓰일지 궁금합니다.

(3) Support Vector Machine (SVM)

Data에 Label이 있는경우 data를 구분할때 사용한다고 들었습니다.

아직 배우지 않아 이해는 안가지만, cs231n 강의에서 SVM 얘기를 좀 했던것 같은데.. 다 중요한 내용일것 같습니다.

출처 : Deng N.Y., Tian Y.J., New methods in data mining-support vector machines, Beijing: Science Press, 2004. (in Chinese)

2. 기본 개념들

(1) 내적 (inner product)

->사잇각을 구할때 사용했는데, 패턴인식에서 사용한다는것을 처음 알게됐습니다.

= 그냥 크기*크기*cos세타 로 외웠던것 같은데

<x,y> = x·y = y^Tx

내적을 3가지의 방법으로 표현할 수 있습니다.

y트랜스포즈는 나중에 벡터를 행렬로 표현해서 내적을 표현할때 사용하게 될 것입니다.

*참고 Sagemath 의 내적은 x.inner_product(y) 이다.

(1) -1 내적의 활용 : 코사인 유사도(cosine Similarity)

오우.. 이건 처음 알았습니다.

선형대수응용 - 이재화 교수님 ppt 중 일부

유사도 측정을 할때 사용을 할 수 있습니다.

c1과 c2의 데이터의 유사도를 거리를 이용해서 판단한다면, c1 c2 벡터의 distance를 구하는 공식을 이용해서 구할 수 있는데

그렇게 한다면 두개의 데이터가 다르다는걸 알 수 있습니다.

하지만 이 두개의 패턴의 유사도를 측정하기 위해서는 두개의 사잇각을 알면 됩니다.

두개의 사잇각이 줄어들수록 패턴이 유사하다는 뜻입니다.

이걸 용어로 코사인 유사도(Cosine Similarity) 라고 합니다.

두가지의 사잇각을 구하기 위해 내적을 이용합니다. 또한 distance는 필요 없기 때문에 unit vector로 만들어서 계산합니다.

(거리는 필요없고 각도만 봐서 유사도만 보겠다는 뜻입니다)

사진의 원이 단위원 입니다.

cosine 값이 높을수록 theta는 작아지고 (내적의 범위는0<= 세타 <= 파이) SImilarity는 높아집니다

따라서 사잇각이 작을수록 유사도가 높다고 말 할 수 있습니다.

(2) Norm 표기의 특징

선형대수응용 - 이재화 교수님 ppt 중 일부

우리가 평소에 사용하던 norm은 two-norm 입니다. 2가 생략되어 있습니다.

아래는 one-norm 으로 자신의 원소의 절댓값들을 모두 더한 값 입니다.

마지막으로 infinity-norm 으로 원소중 절댓값이 가장 큰 녀석입니다.

그렇다면 저것을 그래프로 표현하면 어떻게 되는가?

선형대수응용 - 이재화 교수님 ppt 중 일부

one-norm 기준 v = (x,y) 일 때

l x l + l y l <= 1 의 그래프를 생각하시면 됩니다. 즉 마름모의 테두리를 포함한 내부입니다.

two-norm 기준

x^2 + y^2 <=1 입니다. 단위원을 생각하시면 되겠죠?

infinity-norm 기준

왜 사각형일까요?

x가 1이나 -1 인 경우에는 y는 모든 값이 가능합니다. 따라서 y가 저렇게 -1 <= y <= 1 로 찍히게 됩니다.

그 외에는 y가 -1이나 1이기만 하면 ㅣ -1 ㅣ = 1 이므로 어떠한 x가 나오더라도 상관 없기에 저런 모양이 나옵니다.

조금만 천천히 생각해보시면 금방 이해가 되실겁니다.

3. 벡터 문제 실습해보기 (SageMath 이용)

1. 4차원 벡터 x = (1,2,-3,4) y = (-2,4,1,0) 일때 x+y를 구하는 코드

x = vector([1,2,-3,4])
y = vector([-2,4,1,0])

print("x+y =",x+y)

이런식으로 x,y에 벡터값을 넣고 그냥 더해버릴 수 있습니다.

신기합니다..

2. 어떤 벡터의 norm(크기) 구하기

 

a = vector([2,-1,3,2]) 라고 했을때

a.norm() 을 하면 크기가 구해집니다

= 3*sqrt(2) 가 나오게 됩니다.

 

3. x위로의 y정사영 projx(y) 구하기

x = (2,-1,3) y=(4,-1,2) 일때 정사영 구하기

x = vector([2,-1,3])
y = vector([4,-1,2])

xx = x.inner_product(x)
xy = x.inner_product(y)

proj = xy/xx*x
print("proj =",proj)

4. 두 벡터 x = (2,-1,3) y=(4,-1,2) 가 이루는 사잇각 구해보기

x = vector([2,-1,3])
y = vector([4,-1,2])

norm = x.norm() * y.norm()
ip = x.inner_product(y)

degree = arccos(ip / norm)
print("degree =",degree)

평면과 점사이의 거리 이런것도 해결할 수 있는데..

그냥 명령어만 알아봤습니다.

기본적인 내용은 아는것이기도 하고.. 시간도 많이들어서

내가 신기하거나 처음하는 것들만 포스팅 할 계획입니다. (앞으로도)

---END

감사합니다!

728x90
반응형