codestates / codestates/ds-blog

Linear Algebra Concepts

Open
#137 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
No language data
Stars
2
Forks
4
PR merge metrics
No merged PRs in 30d

Description

--------
------

A 와 A_inv를 내적 하면, Identity Matrix가 형성됨

Through Gaussian Elimination, make a square matrix into a row echelon form.

1. 해당 Matrix에 Inverse가 존재하는지 존재하지 않는지 확인할때, Determinant를 사용한다. 만약 Determinant가 0으로 나온다.
- 그렇다면, Inverse의 의미는 무엇이며, 왜 쓰이는가?

Inverse의 의미는 다음과 같다.

A 라는 square matrix있다고 가정 하자.
A_inv는 A의 inverse matrix이다.

A*A_inv = Identity Matrix

2. Matrix에 선형관계가 있는지 어떻게 확인하는가? 선형관계가 왜 있으면 안돼는가?

3. Matrix에 왜 transformation을 하는가?
- Eigenvector / Eigenvalue
- Basis / Unitvector / Rank / Span
- 이것이 차원축소와 무슨 관계인가?

****
유닛 벡터란 길이가 1인 벡터를 뜻합니다. two dimension vector로 예를 들면, [1,0], [0,1], [np.sqrt(0.5),np.sqrt(0.5)] 등이 될수있겠습니다. Vector의 길이를 확인하는 코드는 다음과 같습니다.

```py
import numpy as np

vector_a = [1,0]
np.linalg.norm(vector_a)
```

****
벡터공간, R^2 에서 [2,3]이란 벡터를 예시로 보겠습니다.

```py
import numpy as np
vector_a = np.array([2,3])
trans_matrix = np.array([[1,2/3],
[1, 4/3]])

np.dot(trans_matrix, vector_a)
```
위에 있는 transformation matrix와 vector_a를 내적했을시, output값은 [4,6], 즉 [2,3]에 scalar값 2를 곱한값과 같습니다. 따라서 transformation matrix를 내적하더라도, vector_a의 방향은 바뀌지 않았고, magnitude에만 영향을 주었습니다.

다른 임의의 벡터에 같은 transformation matrix를 내적해보겠습니다. 어떤 결과가 나올까요?

```py
vector_b = np.array([1,5])
vector_c = np.array([-2,5])

print(np.dot(trans_matrix, vector_b))
print(np.dot(trans_matrix, vector_c))
```

결과는 다음과 같습니다. array([4.33333333, 7.66666667]) 과 array([1.33333333, 4.66666667]).
보이는 바와 같이 direction, magnitude 모두 바뀌었습니다.

여기서 말하고자 하는 바는, tranformation matrix를 R^2에 존재하는 모든 벡터에 모두 내적했을시, direction이 변하지 않는 벡터가 eigenvector입니다. [2,3], [1,5], [-2,5] 모두 R^2상에 존재하는 벡터이지만, 여기서 eigenvector는 오직 [2,3]입니다. 왜냐하면, [[1,2/3],[1, 4/3]] 라는 특정 transformation matrix를 내적했을시 방향이 변하지 않았기 때문입니다.

그렇다면 eigenvalue는 무엇일까요? Transformation matrix를 eigenvector에 내적할시 output이 eigenvector의 배수 형태로 나타납니다. 위에 예시에서는 output이 [4,6] 이었기때문에 기존 벡터 [2,3]에 2를 곱한 값이 되겠죠. 여기서 이 어떠한 scalar값이 eigenvalue입니다. 예시에서는 2가 eigenvalue가 되는것입니다.

****
먼저 벡터 공간이란 것에 대해서 이야기 해보겠습니다. 벡터 공간엔 R^2, R^3, R^4 ... 등등이 있습니다. 예를 들어 R^2는 두개의 dimension이 존재하는 평면적인 공간이고, R^3는 세개의 dimension이 존재하는 3d 공간입니다. R^2 에는 예를들어 [1,2] 라는 2개의 dimension을 가진 벡터가 존재할 것이고, R^3에는 세게의 dimension이 존재하는 [1,2,3] 이란 벡터가 존재할 것입니다.

Span을 이야기 하기에 앞서 두 백터가 linearly dependent 하다라는 컨셉과 linearly independent하다라는 컨셉을 먼저 짚고 넘어가겠습니다.

R^2 벡터공간에 [1,2] 와 [2,4]라는 벡터들이 존재합니다. 이 둘은 linearly dependent(선형관계) 합니다. [1,2]벡터에 2라는 scalar를 내적했을 때 [2,4]라는 벡터를 만들수 있기 때문입니다. 하지만 [1,3]은 [1,2]와 linearly independent(비선형관계) 합니다. 왜냐하면 [1,2]에 어떠한 scalar를 내적하더라도 [1,3]이란 벡터를 만들수 없기 때문입니다. 다르게 말하자면, 두 벡터가 같은 선상에 위치한다면 선형관계에 있는것이고 그렇지 않다면 비선형관계에 있는 것입니다.

**Span**
자, 이제 본래의 주제로 돌아와서 이야기 해보겠습니다. Span은 그렇다면 무엇일까요? Span 이란, 주어진 두 벡터의 (합이나 차와 같은) 조합으로 만들 수 있는 모든 가능한 벡터의 집합입니다. [2,2] 와 [2,3]이란 두 벡터가 주어졌다고 하면, 이 둘로 만들수 있는 벡터는 예를들어 [2,5] 가 될수있습니다. ([2,2] + [2,3]). 또는 [0,-1]과 같은 벡터도 만들수 있습니다. ([2,2] - [2,3]). 더 나아가 [14,18] 과 같은 벡터도 만들수있습니다. (3*[2,2]+4*[2,3]). 두 벡터로 합이나 차로 새로운 조합을 만들시 각 벡터에 어떠한 scalar 값을 곱하여도 상관없습니다. 이러한 두 벡터의 조합의 조건으로 무수히 많고 다른 벡터들을 만들수 있습니다. 이 무수히 많은 벡터들의 집합을 span 이라고 합니다.

여기서 한가지 주의 할점은, 두벡터의 관계가 선형관계냐 아니냐에 따라 span이 달라질수 있습니다. 만약에 R^2 벡터공간에서 두벡터가 linearly independent하다면 위와 같은 조합의 조건으로 direction과 magnitude를 원하는데로 변형시키며 여러가지 셋들을 만들수있는데 이 셋은 결국 R^2 평면을 모두 아우르는 조합이 되는 것입니다. 따라서 주어진 두벡터가 비선형관계이면 이것들의 span은 R^2 벡터 공간 전체가 되는 것입니다.

하지만 두 벡터가 선형관계에 있다면, 두 벡터는 같은 선상에 있을것이며, 그 선이 이 두벡터의 span이 되는 것입니다. 선형관계의 두 벡터로 만들수 있는 조합은 direction은 바뀌지않는 magnitude만 다른 벡터만 만들수 있기 때문입니다.

**Basis**
Span의 개념을 이해한 상태에선 basis의 개념을 이해하기 쉽습니다. ........

****
Rank의 개념은 span의 개념의 연장선상이라고 할 수 있습니다.

우선 rank의 정의부터 하겠습니다. Rank란 Matrix로부터 구하는 것이며, matrix안에 존재하는 vector들로 만들어낼수 있는 vector space의 dimension 갯수입니다.

앞서 span에서 예시로 들었던 두 벡터 [2,2],[2,3]를 이용하여 설명해보겠습니다.

```py
vector_1 = np.array([2,2])
vector_2 = np.array([2,3])
```
두 벡터를 생성하였습니다. 2 dimensional vector에서는 우리가 한눈에 두벡터가 선형관계에 있지 않다는 것을 알수있습니다. 왜냐하면, 어떠한 scalar를 한 벡터에 곱해도 다른백터값을 만들수 없기 때문입니다.

시각적으로도 한번 보여드리겠습니다.

```py
fig = plt.figure()
ax = fig.add_subplot(111)
ax.quiver((0,0), (0,0), vector_1, vector_2, units = 'xy', scale = 1)
plt.axis('equal')
plt.xticks(range(-4,6))
plt.yticks(range(-2,6))

plt.grid()
plt.show()
```

![Capture](https://user-images.githubusercontent.com/43943159/94789681-2fa0fe80-0410-11eb-8b5b-3d4b542b0522.PNG)

두 벡터는 같은 선상에 있지 않기 때문에 linearly independent하며, 2 dimension의 벡터 space를 만들수 있습니다. 즉, 이 두 벡터로 만들어진 matrix의 rank는 2라는 뜻입니다. 앞서 말한데로 linearly independent한 두 벡터의 조합으로 R^2의 평면을 만들수 있는데, 여기서는 이 평면이 vector space가 되는 것이고 이 평면 전체를 아우르기때문에 dimension은 2가 되는 것입니다.

```py
vector_1 = np.array([2,2])
vector_2 = np.array([2,3])

matrix_1 = np.array([vector_1, vector_2])
np.linalg.matrix_rank(matrix_1)
```
matrix_rank 함수를 사용하여 rank를 확인할수 있습니다. 값은 2가 나옵니다.

이번엔 선형관계가 있는 두 벡터 [1,2], [2,4] 를 사용하여 rank를 확인해보겠습니다.
```py
A = np.array([[1,2],
[2,4]])
np.linalg.matrix_rank(A)
```
값은 1이 나옵니다. 두 벡터는 선형관계이기 때문에 만들수 있는 vector space는 하나의 선이고, 하나의 선이기 때문에 dimension은 1입니다.

선형관계에 있는 두 벡터의 그림은 다음과 같습니다.

![Capture](https://user-images.githubusercontent.com/43943159/94791383-7f80c500-0412-11eb-8f63-8761462bacb7.PNG)

이번엔 조금더 까다로운 R^3에 있는 벡터들을 다루어 보겠습니다.

[1,1,3], [2,-1,0], [3,1,5] 이 3개의 벡터들은 선형관계에 있을까요? 3 dimensional vector는 선형관계에 있는지 눈으로 확인하기 어렵습니다. 시각화를 하더라도 다소 어려움이 있을수 있습니다.

```py
matrix_A = np.array([[1,1,3],
[2,-1,0],
[3,1,5]])

starting_points = np.array([[0,0,0],
[0,0,0],
[0,0,0]])

U,V,W = zip(*matrix_A)
X,Y,Z = zip(*starting_points)

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.quiver(X, Y, Z, U, V, W, color="red")
ax.set_xlim([-1, 3])
ax.set_ylim([-1, 3])
ax.set_zlim([-1, 5])
plt.show()
```
![Capture](https://user-images.githubusercontent.com/43943159/94791759-0df54680-0413-11eb-836e-ee313dea8657.PNG)

눈으로 확인하기 어렵기때문에 다시한번 rank 함수를 이용해 확인해보겠습니다.

```py
np.linalg.matrix_rank(matrix_A)
```
Output 값은 2입니다. 그렇다면 무슨 뜻일까요? 이 세개의 벡터로 만들어 낼수있는 vector space는 2 dimensional space 이며 그뜻은 3개의 벡터중 2개의 백터만 비선형관계를 가지고 있다는 뜻입니다.

만약에 세게의 백터가 모두 비선형 관계가 있다면 어떻게 될까요? rank의 값은 3이 될테고, 그 뜻은 3 dimension을 모두 아우르는 vector space를 만들수 있다는 뜻입니다.

4. How does clustering work? What does it have to do with norm?

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.