TOP
class="layout-aside-left paging-number">
본문 바로가기
[파이썬 Projects]/<파이썬 - 수학 | 통계학>

[개발자를 위한 수학] 선형대수학: 벡터, 선형변환

by 기록자_Recordian 2024. 10. 7.
728x90
반응형
선형대수학

 

선형대수학(linear algebra): 벡터 공간, 벡터, 선형 변환, 행렬, 연립 선형 방정식 등을 연구하는 대수학의 한 분야이다. 현대 선형대수학은 그중에서도 벡터 공간이 주 연구 대상이다.

 

선형대수학은 수학, 통계, 운용 과학, 데이터 과학 및 머신러닝의 여러 응용 분야에 기초를 형성하는데, 머신러닝과 통계 라이브러리를 사용하면 선형대수학을 무조건 배워야 하는 것은 아니지만 이러한 라이브러리 이면의 작동 방식에 대한 직관을 기르고, 데이터를 더 효율적으로 다루려면 선형대수학의 기본을 아는 것이 좋다.


벡터(vector)란 무엇인가?

 

벡터는 공간상에서 특정 방향과 길이를 가진 화살표이며 종종 데이터의 한 조각을 나타낸다. 벡터는 선형대수학의 핵심 구성요소로 여기에는 행렬과 선형 변환도 포함된다. 벡터의 기본 형태에는 위치에 대한 개념이 없으므로 항상 꼬리가 데카르트 좌표계의 원점(0, 0)에서 시작한다.

 

벡터의 용도는 무수히 많다.

  • 물리학: 방향과 크기로 간주
  • 수학: xy 평면에서의 방향과 스케일 (어떤 움직임과 같은 개념 표시)
  • 컴퓨터과학: 데이터를 저장하는 숫자 배열

벡터의 시각적 이해 없이는 선형 종속 및 행렬식과 같은 기본적인 선형대수학 개념을 이해할 수 없으므로, 벡터를 난해한 숫자 그리드로 생각하지 않도록 시각적인 측면을 잊지 말아야 한다.

 

★ 데카르트 좌표계(Cartesian coordinate system): 임의의 차원의 유클리드 공간(혹은 좀 더 일반적으로 내적 공간)을 나타내는 좌표계 중 하나이다. 천장을 날아다니며 옮겨붙는 파리를 통해 영감을 얻어 해당 좌표계를 발명한 프랑스의 철학자이자 수학자인 르네 데카르트의 이름을 따서 지어졌다. 

2차원 데카르트 좌표계는 좌표평면(coordinate plane), 3차원 데카르트 좌표계는 좌표공간(coordinate space)이라고도 한다.

좌표평면의 예 (출처: 위키백과)

벡터는 수학적으로 다음과 같이 선언한다.

 

[파이썬으로 벡터 선언하기]

파이썬 리스트와 같은 간단한 컬렉션을 사용해 벡터를 선언한다. 하지만 벡터로 수학 연산을 수행할 때, (특히 머신러닝 등) 일반 파이썬보다 더 효율적인 넘파이 라이브러리를 사용하는 것이 좋다. 물론, 심파이를 사용해 선형대수학 연산을 수행할 수도 있으나, 실전에서는 넘파이를 더 많이 사용한다.

넘파이로 벡터를 선언하려면 넘파이의 array() 함수를 사용한 숫자 컬렉션을 전달한다.

# 파이썬 리스트로 벡터 선언하기
v_1 = [3, 2]
print(v_1)

# 넘파이를 활용하는 것이 더 효율적
import numpy as np
v_2 = np.array([3, 2])
print(v_2)

 

<여러 가지 벡터 시각화 예시>

# 벡터 시각화 예시
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
%matplotlib inline

plt.arrow(0, 0, 3, 4, head_width = 0.1, head_length = 0.5, color = 'red')
plt.show

 

음수 방향의 벡터는 나중에 벡터를 결합할 때 더하지 않고 빼야 한다.


◆ 3차원 벡터

벡터는 2차원 이상을 가질 수 있다. 다음은 x, y, z 축을 따라 3차원 벡터를 선언한다.

 

[파이썬에서 넘파이로 3차원 벡터 선언하기]

# 파이썬에서 넘파이로 3차원 벡터 선언하기
import numpy as np
v = np.array([4, 1, 2]) # x, y, z
print(v)

 

3차원 이상의 벡터를 파이썬에서 선언하는 것 역시 간단하다.

# 5차원 벡터
import numpy as np
v = np.array([6, 1, 5, 8, 3])
print(v)


◆ 덧셈과 결합

벡터는 공간상의 이동처럼 방향과 크기를 표현한다.

벡터 덧셈(vector addition)을 통해 두 벡터의 이동을 하나의 벡터로 효과적으로 결합한다.

두 개의 벡터가 있다고 가정할 경우, 이를 더하는 방법은 수치적으로는 간단하다.

 

이를 파이썬에서 계산하면

[파이썬에서 넘파이로 두 개의 벡터 더하기]

#파이썬에서 넘파이로 두 개의 벡터 더하기
from numpy import array

v = array([3,2])
w = array([2,-1])

# 벡터 더하기
v_plus_w = v + w

# 출력하기
print(v_plus_w)

 

교환 법칙이 성립하여 덧셈 기호 전에 v 를 놓는지 w를 놓는지는 중요하지 않고, 연산 순서도 중요하지 않다. (v 와 w 를 바꿔도 값은 동일하다)


◆ 스케일링(scaling)

스케일링은 벡터의 길이를 늘이거나 줄이는 것이다. 벡터에 스칼라라는 값을 곱하거나 스케일링해서 벡터를 늘이거나 줄인다.

★ 스칼라(scalar): 벡터 공간에서 벡터를 곱할 수 있는 양

[넘파이로 숫자 크기 조정하기]

# 넘파이로 숫자 크기 조정하기
from numpy import array

v = array([3, 1])

#벡터 스케일링
scaled_v = 2.0 * v

print(scaled_v)

 

물론, 절반으로 축소(0.5 곱하기) 할 수도 있다.

from numpy import array

v = array([3, 1])

#벡터 스케일링
scaled_v = 0.5 * v

print(scaled_v)

 

벡터의 크기를 조정해도 벡터의 방향은 변하지 않고 크기만 변한다. 다만, 벡터에 음수를 곱하면 벡터의 방향이 뒤집혀버린다.

# 벡터 시각화 예시
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
%matplotlib inline

plt.arrow(0, 0, 3, 1, head_width = 0.1, head_length = 0.5, color = 'red')
plt.arrow(0, 0, 1.5, 0.5, head_width = 0.1, head_length = 0.5, color = 'blue')
plt.arrow(0, 0, -1.5, -0.5, head_width = 0.1, head_length = 0.5, color = 'green')
plt.show

 

하지만 음수로 스케일을 조정해도 여전히 같은 선상에 존재하므로 실제로 방향이 바뀌지는 않았다. 이는 선형 종속이라는 개념으로 이어진다.


◆ 스팬과 선형 종속

벡터를 더하고 크기를 조정하는 이 두가지 연산을 사용하면 두 벡터를 결합하고 크기를 조정해 원하는 결과 벡터를 만들 수 있다. 다른 두 방향으로 고정된 v와 w 의 스케일을 변경하고 더하면 새로운 벡터 v+w 를 얼마든지 만들 수 있다.

여기에서도 음수 스칼라로 뒤집는 것만 빼고는 v와 w 방향이 고정되어 있지만, 스케일링을 사용해 v+w로 어떤 벡터도 만들 수 있다. 이렇게 가능한 벡터의 전체 공간스팬(span) 이라고 하는데, 대부분의 경우 스팬은 두 벡터를 스케일링하고 더해 벡터를 무한하게 만들 수 있다. 

서로 방향이 다른 벡터 두 개가 있을 때, 두 벡터는 선형 독립이며 스팬이 무한하다.

그러나 만약 두 벡터가 같은 방향으로 존재하거나 같은 선상에 존재하면, 이러한 벡터를 조합해도 같은 선 위에 고정되므로 스팬이 제한된다. 스케일을 어떻게 조정하든 만들어진 벡터도 같은 선 위에 놓인다. 이를 선형 종속(linearly dependent)이 된다고 한다. 

앞의 이미지를 보면, 두 벡터가 동일한 기본 선 위에 있기 때문에 스케일링을 통해 여러 가지 새로운 벡터를 만들 수 없다.

 

두 벡터가 선형 종속인지 독립인지 신경써야 하는 이유는 선형 종속이면 많은 문제가 풀기 어렵거나 풀 수 없기 때문이다. 하지만 선형 독립이면 두 개 이상의 벡터에서 필요한 어떤 벡터도 만들어내는 유연성 덕분에 해를 쉽게 구할 수 있다.


선형 변환(linear transformation)

 

방향이 고정된 두 개의 벡터를 더하고 스케일링을 조정해 다른 결합 벡터를 얻는 이 개념은 선형 종속의 경우를 제외하면 원하는 방향과 길이를 가질 수 있다. 따라서 함수와 같은 방식으로 한 벡터를 다른 벡터로 변환하는 선형 변환을 떠올려 볼 수 있다.

 

◆ 기저 벡터

특정한 벡터 공간을 스팬(구성)해주는 선형 결합 벡터들의 최소 개수, 모든 벡터를 만들거나 변환하기 위한 구성 요소.

벡터 공간 V의 basis는 V라는 공간을 채울 수 있는, 선형 관계에 있지 않은 벡터들의 모음이다. 즉, 서로 독립인 벡터들을 의미하며, 다른 벡터의 변환을 설명하는 데 사용되는 벡터이다. 일반적으로 길이가 1이고 서로 수직이며 양의 방향을 가리킨다.

 

◆ 행렬(matrix)

벡터의 모음. 여러 개의 행과 열을 가질 수 있으며 데이터를 묶는 편리한 방법이다.

i(i햇)과 j(j햇)을 스케일링하고 더하면 어떤 벡터도 만들 수 있다.

 

예를 들어, 길이가 1인 벡터 v가 [3, 2] 위치에 도달하길 원하여 i을 3배, j을 2배로 늘이면 v는 어떻게 될까?

먼저 개별적으로 벡터의 스케일을 조정한다. (벡터 v는 i과 j의 덧셈으로 구성된다.)

이 두 방향으로 늘이면 v는 i과 j을 따라 늘어날 것이며, 이를 선형 변환이라고 한다. 즉, 기저 벡터의 움직임을 이용해 벡터를 늘이고, 줄이고, 비틀고, 회전하는 것을 말한다.

 

  • 벡터의 크기 조정: 늘이남, 줄어듦
  • 회전: 벡터 공간 돌림
  • 반전: 벡터 공간을 뒤집어 i과 j의 위치를 바꿈
  • 전단: 특정 방향의 직선과의 거리에 비례하여 각 포인트를 이동 시킴

비선형 변환을 사용하면 직선이 아닌 휘거나 구불구불한 변환을 만들기 때문에 사용할 수 없다는 점에 유의.

 

<도움이 되는 글>

 

선형변환(Linear Transformation)

Transformation 이번 포스팅은 행렬과 벡터의 곱과 선형변환에 대해 살펴보겠습니다. 중고등학교 때 지긋...

blog.naver.com


다음 내용

 

[개발자를 위한 수학] 선형대수학: 행렬

이전 내용  [개발자를 위한 수학] 선형대수학: 벡터, 선형변환선형대수학 선형대수학(linear algebra): 벡터 공간, 벡터, 선형 변환, 행렬, 연립 선형 방정식 등을 연구하는 대수학의 한 분

puppy-foot-it.tistory.com


[출처]

개발자를 위한 필수 수학

위키백과

도토리커피한잔 - 네이버 블로그

yuns_u.log - velog

서윤아빠의 Space of Thinking - 네이버 블로그

728x90
반응형