선형대수 2
사실 선형대수의 기초적인 내용을 어제 하루 2시간 만에 다 흡수하려는 것은 말도 안된다는걸 모두가 알고 있습니다.
오늘은 조금 더 Data Science에 관련된 내용들을 추가로 배우도록 하겠습니다.
이 강의 이후에 여러분이 기억해야할 핵심 키워드들은 아래와 같습니다 .
벡터와 매트릭스의 기본 연산
상관계수
공분산
Linear Projection
🏆 학습 목표
- 공분산, 상관계수의 목적과 사용 예시, 차이점을 설명 할 수 있다.
- 벡터의 직교와 그 조건에 대해서 설명 할 수 있다.
- 단위 벡터와, 단위 벡터로의 구분을 설명 할 수 있다.
- span, basis, rank의 내용을 이해 할 수 있다.
- Gaussian elemination의 내용을 이해 할 수 있다.
- linear projection과 예시를 설명 할 수 있다.
정리
[n132]
이게 AI랑 무슨 관계가 있죠?¶
- 분산, 공분산, 상관계수는 왜 나온거죠?
다음과 같은 벡터가 있다고 칩시다.
이를 시각화하면 아래 그림과 같을 것 입니다.
좌표상에 있는 거의 모든 벡터는 다른 벡터와 상관이 아주 작게라도 있습니다.
(하나가 증가할때, 다른 하나도 증가 하는 경향을 파악하는 것이 공분산 임을 기억하세요)
딱 하나, 수직인 벡터만 상관 관계가 전혀 없다는 것이죠.
Span
Span 이란, 주어진 두 벡터의 (합이나 차와 같은) 조합으로 만들 수 있는 모든 가능한 벡터의 집합
선형 관계의 벡터 (Linearly Dependent Vector)
만약 두 벡터가 같은 선상에 있는 경우, 이 벡터들은 선형 관계에 있다고 표현합니다. 즉, 이 두 벡터들은 조합을 통해서 선 외부의 새로운 벡터를 생성 할 수 없습니다.
선형 관계가 없는 벡터 (Linearly Independent Vectors)
반대로 같은 선상에 있지 않은 벡터들은 선형적으로 독립되어 있다고 표현하며,
주어진 공간 (2개의 벡터의 경우평면)의 모든 벡터를 조합을 통해 만들어 낼 수 있습니다.
Basis
벡터 공간 의 basis 는,라는 공간을 채울 수 있는 선형 관계에 있지 않은 벡터들의 모음입니다. ( span 의 역개념 )예를 들어, 위의 그림에서 2개의 벡터 (빨강, 파랑)는 벡터 공간의 basis 입니다.
Orthogonal Basis
Orthogonal Basis란, Basis 에 추가로 Orthogonal 한 조건이 붙는, 즉 주어진 공간을 채울 수 있는 서로 수직인 벡터들입니다.
Orthonormal Basis
Orthonomal Basis란, Orthogonal Basis에 추가로 Normalized 조건이 붙은 것으로, 길이가 서로 1인 벡터들입니다.
Rank
- 매트릭스의 rank란, 매트릭스의 열을 이루고 있는 벡터들로 만들 수 있는 (span) 공간의 차원입니다.
- 매트릭스의 차원과는 다를 수도 있으며 그 이유는 행과 열을 이루고 있는 벡터들 가운데 서로 선형 관계가 있을 수도 있기 때문입니다.
- 이 Rank를 확인 하는 방법은 여러가지 가 있지만, 그중 하나인 Gaussian Elimination을 통해 알아보도록 하겠습니다.
이 행렬의 Rank 는 2이며 이는 3x3 매트릭스 이지만 공간이 아닌 만을 벡터들로 만들어 낼 수 있음을 의미합니다.
Linear Projections
과제
- 블로그에 올리기 (그래프 부분)
- 도전과제
v = [7, 4] def myProjection(v): w = [v[0],v[0]] inner_product = v[0]*w[0]+v[1]*w[1] v_in_pro = v[0]*v[0] + v[1]*v[1] result = (inner_product/v_in_pro)*np.array(v) return result myProjection(v) # array([8.29230769, 4.73846154]) # 그래프 plt.xlim(-1.1, 12) plt.ylim(-1.1, 10) v = [7, 4] # x=7,y=4 w = [7, 7] # y=x=7 proj = np.array([8.29230769, 4.73846154]) x_minus_proj = w - proj plt.gca().set_aspect('equal') x_vals = np.array(axes.get_xlim()) y_vals = 4/7 * x_vals plt.plot(x_vals, y_vals, '--', color = '#636e72') plt.arrow(0, 0, proj[0], proj[1], linewidth = 3, head_width = .05, head_length = .05, color = '#00b894') plt.arrow(0, 0, v[0], v[1], linewidth = 3, head_width = .05, head_length = .05, color = '#0984e3') plt.arrow(0, 0, w[0], w[1], linewidth = 3, head_width = .05, head_length = .05, color = '#d63031') # plt.arrow(proj[0], proj[1], x_minus_proj[0], x_minus_proj[1], linewidth = 3, head_width = .05, head_length = .05, color = '#00b894') plt.title("non x-axis projection") plt.show()
'코드스테이츠 Ai Boostcamp' 카테고리의 다른 글
[선형대수] 클러스터링(군집분류) (0) | 2021.06.12 |
---|---|
[선형대수]Dimension Reduction(차원축소) (0) | 2021.06.12 |
[n12x] Sprint Challenge (0) | 2021.06.12 |
[통계학] Bayesian(베이즈 정리) (0) | 2021.06.12 |
[통계학] chi-square-test(범주형 가설 검정) (0) | 2021.06.12 |
댓글