Math

[AI class day 8] 인공지능 수학- 자료의 정리 TIL

makeitworth 2021. 4. 28. 17:35

1. 벡터와 직교 분해

1) 벡터의 표현

n-벡터는 크기와 방향을 가진 물리량, 표현 방법 2가지

1. 좌표계 없이 표현

  • v : 화살표로 표현
  • v의 크기 : 화살표의 길이 측정
  • v의 방향 : 화살표의 방향 측정

2. 좌표계를 도입하여 표현

  • v = (v1, v2, ..., vn)
  • v의 크기 : |v| = sqrt(v1^2 + v2^2 + ... + vn^2)
  • v의 방향 : 1/|v|*v (주어진 벡터에서 길이를 나누어서 길이를 1로 만들면 방향이 남는다)

2) 벡터의 내적

두 벡터 u 와 v에 대한 내적 (inner product / dot product)의 정의

1. 좌표계 없이 표현

  • 두 n-벡터의 길이와 두 벡터 간 사이각 θ를 통해 정의 가능
  • u ⋅v = |u||v|cosθ

2. 좌표계 도입하여 표현

  • 두 벡터u=(u1,u2,...,un),v=(v1,v2,...,vn)의 좌표값을 통해 다음과 같이 계산된다.
  • u ⋅ v= u1v1+u2v2+...+unvn
  • 두 벡터간의 내적이 0이면, 두 벡터는 직교

* 벡터가 직교라는 것의 물리적 의미

u 방향으로의 전진은 v의 방향에서 측정 x

--> 즉 따로따로 측정해도 됨

--> 고교 과정에서 배운 xy좌표계나 xyz좌표계는 다 직교좌표계였다.

3) 투영(Projection)

두 벡터 u, a가 있을 때, 벡터 u를 a 위에 투영한 벡터를projau라고 하며, 다음과 같이 구한다.

(u벡터의 수선의 발을 a벡터에 내리는 것)

                  (길이) \* (방향) = (기저에 대한 좌표값)\*a

projau = (u ⋅ a/ |a|)(1/|a| * |a|) = (u⋅a / |a|2) * a

길이 = u *cosθ

벡터 u를 a위에 투영하고 남은 보완 벡터(complement vector) 는u−projau이다.

두 벡터 u,a가 있을 때, 투영과 보완의 개념을 이용해 직교분할할 수 있다.

projau⊥(u−projau)

프로젝션된 벡터와 보완 벡터는 직교한다.

u=projau+(u−projau)

프로젝션된 벡터와 보완 벡터를 더하면 원래 벡터로 돌아올 수 있다.

--> 다시 얘기하면 u를 프로젝션된 벡터와 보완 벡터로 나눌 수 있고, 그 둘은 서로 직교함을 보장할 수 있는 나눔이다.

--> 그렇다면 이 직교성을 가지고 무엇을 할 수 있는가?

벡터 프로젝션

4) 직교 행렬(orthogonal matrix) : 직교좌표계에 대한 행렬 표현

행렬은 좌표계이다. 각 열벡터가 기저(basis)를 이루는 좌표계(coordinate system)

1. 직교행렬(orthogonal matrix)

직교행렬은QQ_-1=Q-1_Q_=_I

  • 주어진 행렬의 모든 열벡터가 서로 직교한다면, 이 행렬을 직교행렬이라 한다.
  • 직교행렬은 직교좌표계를 의미한다.

2. 정규직교행렬(orthonomal matrix)

  • 주어진 행렬이 직교행렬이며, 모든 열벡터의 크기가 1인 행렬이다.
  • 정규직교행렬은 정규직교좌표계를 의미한다.

3. 직교 행렬을 이용한 선형 시스템

선형시스템 Ax = b에서 행렬 A가 직교행렬이면, 해(solution)x는 역행렬 A-1의 계산 없이 구할 수 있다.

  • x의 i번째 요소는 projection으로 계산 가능 즉, 벡터 b를 행렬 A의 각 열벡터 ai에 투영한 연산 projaib로 부터
  • xi = b⋅ai / |ai|2 임을 계산 가능
  • x의 i번째 요소와 j번째 요소의 계산은 독립적. 즉, x의 계산 병렬 처리 가능

4. 정규직교행렬을 이용한 선형시스템

선형 시스템 Ax = b에서 행렬 A가 직교행렬이면, 해(solution)x는 역행렬 A-1의 계산 없이 구할 수 있다.

  • x의 i번째 요소는 내적으로 계산 가능. 즉, 벡터 b를벡터 b를 행렬 A의 각 열벡터 ai에 투영한 연산 projaib로 부터
  • xi = b⋅ai 임을 계산 가능
  • x의 i번째 요소와 j번째 요소의 계산은 독립적. 즉, x의 계산 병렬 처리 가능

5) QR 분해 : A = QR 주어진 행렬에서 정규직교행렬 추출

1. 행렬분해(matrix decomposition)의 의미

주어진 행렬을 행렬분해된 상태로 가지고 있으면 여러모로 계산이 편한 경우가 많다. 다음은 대표적인 행렬분해이다.

  • LU 분해(LU decomposition) : 지난 시간에 다룸
  • QR 분해(QR decomposition) : 이제 볼 것
  • 특이값 분해(SVD, Singular Value Decomposition)

QR 분해는 직교분할과 관련

2. QR 분해 QR Decomposition

A = Q R

  • Q: orthonormal matrix(정규직교행렬)
  • R: upper triangular matrix(상삼각행렬), 직교성분을 빼낸 찌꺼기 성분. back substrition의 장점을 누릴 수 있다.

주어진 행렬 A가 QR분해되어 있을 때의 장점

Ax=b

(QR)x=b

Q(Rx)=b

Qy=b,(Rx=y)

선형시스템을 다음과 같이 두 단계로 간단히 해결할 수 있음을 알 수 있다.

1. y는 내적으로 풀 수 있게 된다. Q의 첫번째 칼럼과 b를 내적하면 y1, Q의 n번째 칼럼과 b를 내적하면 yn이 나오게 된다.

2. R이 상삼각행렬이므로 후방대치법을 통해 x를 편하게 구할 수 있다.

  • LU 분해의 경우, 선형시스템을 풀 때 병렬처리 불가능
  • QR 분해의 경우 Q 행렬이 꽉찬 구조를 가지므로 메모리 사용량이 많음

3. QR분해의 의미

QR 분해는 그람-슈미트 과정(Gram-Schmidt process)을 행렬로 코드화한 것이다.

  • Q : 행렬 A에서 정규직교성을 추출한 행렬
  • R : 행렬 A에서 정규직교성 추출 후 남은(residual), upper triangular matrix(상삼각행렬)

QR분해는 주어진 행렬에서 정규직교성을 추출하여 계산의 편의를 도모한다.

4. QR분해의 활용

  • 빠른 계산 : 선형시스템Ax=bAx=b의 해를 구할 때, 정규직교행렬(orthonormal matrix) Q를 이용한 계산 부분은 병렬처리로 빨리 계산할 수 있다. 그러나 R을 이용한 계산 부분은 병렬처리 할 수 없다.
  • b가 자주 업데이트 되는 경우 : 선형시스템Ax=bAx=b에서 행렬 A는 고정되어 있고 b가 자주 변하는 문제가 종종 있다. 이런 경우, 행렬 A를 미리 QR로 분해해 둔다면, b가 업데이트될 때마다 선형시스템의 해 x를 실시간으로 구할 수 있다.

LU분해와 비교

  • LU분해의 경우, 선형시스템을 풀 때 병렬처리 할 수 없다
  • QR분해의 경우, Q 행렬이 꽉 찬 구조를 가진 행렬이므로 메모리 사용량이 많다. (LU분해는 L, U파트 각각 수가 절반씩만 차 있다.)

2. SVD, PCA

1. 행렬 분해Matrix Decomposition의 의미

주어진 행렬을 행렬분해된 상태로 가지고 있으면 여러모로 계산이 편한 경우가 많다. 다음은 대표적인 행렬분해이다.

  • LU 분해(LU decomposition) : 지난 시간에 다룸
  • QR 분해(QR decomposition) : 지난 시간에 다룸
  • 특이값 분해(SVD, Singular Value Decomposition) : LU분해와 QR분해는 n∗nn∗n 정방행렬(square matrix)에 대한 행렬분해인 반면, 특이값 분해는 일반적인 m∗nm∗n 행렬에 관한 행렬 분해이다.

2. 특이값 분해 SVD Singular Value Decomposition

특이값 분해는 주어진 행렬을 아래의 형태를 가지는 세 행렬의 곱으로 나누는 행렬분해이다.

  • U : m차원 회전행렬 (정규직교행렬), 3차원 공간에서 회전시킴
  • D : n차원 확대축소 (확대축소 크기에 따른 정렬 형태), 회전된 상태에서 축을 확대/축소 시킴
  • V : n차원 회전행렬 (정규직교행렬), 2차원 공간에서 회전시킴

3. 특이값 분해의 의미

특이값 분해는 행렬을 회전과 확대축소로 분해하는 방법이다.

  • U : 입력 차원인Rm공간에서의 회전
  • D : 입력 차원인Rn공간에 대해 축방향으로의 확대축소한 후,Rn>Rm으로 차원 변환
  • V : 입력 차원인Rn공간에서의 회전

4. 특이값 분해의 활용

A의 특이값 분해 U, D, V는 각각 열벡터의 순서대로 행렬 A의 열벡터가 어떤 방향으로 강한 응집성을 보이고 있는지를 분석한 것

--> U, D, V의 열벡터를 순서대로 p개 취한다면, 강한 응집성을 가지는 p개의 방향으로 수선의 발을 내린 A의 근사치 A’를 재구성할 수 있다.

근사치의 행렬은 원래의 행렬과 같은 차원 (여기서는 3*2차원)을 갖지만, 응집성이 높은 정보만 골라서 축소시켜준 형태로 바뀐다. (여기서는 응집성이 낮은 -1/2, 1/2 부분이 0으로 축소되었다)

5. 주성분 분석 PCA Principal Component Analysis

1) 주성분분석(PCA)

  • 다수의 n차원 데이터에 대해, 데이터의 중심으로부터 데이터의 응집력이 좋은 n개의 직교 방향을 분석하는 방법
  • 데이터의 공분산행렬(covariance matrix)에 대한 고유값 분해에 기반을 둔 직교분해

K개의 n차원 데이터 {xi}i=1K 이 있을 때 데이터의 중심 m , 공분산 행렬 C는 다음과 같이 구한다.

m(중심): 데이터의 평균

C(공분산 행렬)

  • 임의의 데이터 xi가 있을 때 중심과의 거리를 외적을 해서 차원을 올린다.
  • 그러면 모든 데이터들이 행렬을 하나씩 정의하게 되는데

-->행렬들을 다 더한 다음에 평균을 내게 되면, 그렇게 만들어진 행렬이 공분산행렬의 의미를 갖게 된다.

공분산행렬에 대해 주성분분석(PCA)은 아래와 같다.

W: n차원의 회전 행렬(정규직교행렬)

D: n 차원의 확대 축소 (확대축소 크기에 따른 정렬 형태)

2) 주성분분석의 활용

3. 벡터 공간과 최소제곱법

1. 집합

집합(set)은 임의의 원소(element)를 수집하여 만든 모듬

2. 연산에 닫혀있는 집합(set)

어떤 연산을 생각한 다음, 집합에서 임의의 원소를 뽑아 연산을 수행한 결과가 여전히 집합의 원소로 있다면, 해당 집합은 연산에 닫혀 있다고 한다. --> 집합을 모을 때 강력하게 연관성있는 것들을 모았느냐 측정할 수 있는 개념 / 의미있는 연산을 그 집합에 대해서 구동할 수 있느냐 측정할 수 있는 개념

ex> 모든 실수가 담겨있는 집합 : 덧셈 연산에 닫혀있으며, 곱셈 연산에도 닫혀있다.

3. 공간(space)

공간은 덧셈 연산에 닫혀있고 스칼라 곱 연산에 닫혀있는 집합이다.

ex> n- 벡터의 집합은 모두 공간이다.

n-벡터의 집합 Rn은 'n차원 벡터 공간'이라고 부른다.

4. 열공간 (column space)

행렬 A의 열벡터들에 대한 가능한 모든 선형조합의 결과를 모아 집합으로 구성한 것

Ax = b가

  • 해가 있을 때 (consistant linear system)

b∈col(A)

  • 해가 없을 때 (inconsistant linear system)

b∉col(A)

5. 최소제곱법 (least squares method)

1) 열공간으로 투영

선형시스템 Ax = b가 해가 없을 때,

행렬 A가 정의하는 열공간에서 b와 가장 가까운 지점은 b를 열공간에 투영한 지점

projwb --> 달성가능한 최선의 목표

최소제곱법은 b에 도달할 수 없지만, b와 가장 근사한 지점을 열공간w에 투영하여 찾는 기겁

2) 최소제곱법

Ax = b가 해가 없을 때 할 수 있는 최고의 대안을 내놓는 기법

이 방법은 목표 b와 달성 가능한 목표 b bar 의 차이인 벡터의 제곱길이를 최소화시키는 의미를 가지기 때문에 최소 제곱법이라 부름

풀이법 : 주어진 선형시스템의 양변에 전치행렬 AT를 곱하면 최소제곱법의 해를 구할 수 있다.

3) 최소제곱법의 응용 : 선형회귀(Linear Regression)

2차원 공간에 m개의 정점이 있을 때, 이를 잘 설명할 수 있는 직선 y = mx + b를 구하기

--> 최소제곱법으로 풀 수 있음

  1. 선형 시스템 구성: 직선이 각 정점을 모두 지나간다고 가정하고 선형시스템 Ax = b 만들기 ( 모든 정점을 지나는 직선은 존재하지 않으므로 해가 없음)
  2. 최소 제곱법 적용

4. 통계학, 기본개념

1. 개념 정의

통계학이란: 데이터의 수집, 구성, 분석, 해석, 표현에 관한 학문

모집단: 어떤 질문이나 실험을 위한 관심의 대상이 되는 개체, 사건의 집합 ex> 전교 남학생의 키

모수: 모집단의 수치적 특성 ex> 키의 평균

표본: 모집단에서 선택된 개체, 사건의 집합

보통 모집단은 너무 방대-> 모집단의 표본을 선택하고 그 표본의 모수를 알아내어 모집단의 특성을 파악하려 함

2. 도수(Frequency)

정의 : 어떤 사건이 실험이나 관찰로부터 발생한 횟수

표현 방법 : 도수분포표 / 막대그래프 (질적 자료) / 히스토그램 (양적 자료 - 수치형 자료)

막대그래프와는 달리 히스토그램은 x 축 값의 순서가 의미가 있다.

3. 줄기 - 잎 그림(Stem and Leaf Diagram)

양적 자료를 줄기와 잎으로 구분

양적 자료를 소팅-> 숫자의 앞부분은 stem, 뒷부분은 leaf로

R패키지, 파이썬으로 쉽게 그릴 수 있음

4. 상대 도수

도수를 전체 원소의 수로 나눈 것

5 . scipy 모듈

데이터를 수집하고 특징을 파악하기 위한 모듈

6. 평균 Mean

모평균: 모집단 전체의 자료일 경우

표본평균: 모집단에서 추출한 표본일 경우

a = [79, 54, 74, 62, 85, 55, 88, 85, 51, 85, 54, 84, 78, 47]
len(a)

import statistics
statistics.mean(a)

>> 70.0714...

7. 중앙값 Median

평균은 극단 값의 영향이 큼 -> 평균보다 중앙값이 더 잘 represent하게 된다.

자료를 순서대로 나열했을 때 가운데 있는 값

a = [79, 54, 74, 62, 85, 55, 88, 85, 51, 85, 54, 84, 78, 47, 1000]
statistics.mean(a)
statistics.median(a)

>> mean: 132.06...

 median: 78

자료의 수가 n일 때 홀수면 (n+1)/2번째 자료값, 짝수면 n/2번째와 n/2 + 1 번째 자료값의 평균

a = [79, 54, 74, 62, 85, 55, 88, 85, 51, 85, 54, 84, 78, 47, 1000]
len(a)
sorted(a)
statistics.median(a) == a[7]

>>True

len(a) = 15이므로 8번째인 a[7]와 중앙값이 같다.

8. 분산 Variance

편차의 제곱의 합을 자료의 수로 나눈 값 (편차 : 값과 평균의 차이)

  • 자료가 모집단일 경우 : 모분산
    $\sigma^2 = {1 \above 1pt N} \sum_{i=1}^N (x_i - \mu)^2$
  • 자료가 표본일 경우 : 표본분산
    $s^2 = {1 \above 1pt n-1} \sum_{i=1}^n (x_i - \bar {x})^2$

(분모의 차이 주의)

 

값들이 평균에서 많이 떨어져 있으면 분산이 커진다.

a = [79, 54, 74, 62, 85, 55, 88, 85, 51, 85, 54, 84, 78, 47]
statistics.variance(a)

b = [79, 54, 74, 62, 85, 55, 88, 85, 51, 85, 54, 84, 78, 47]
statistics.variance(b)

a의 분산은 234.37912087912088

b의 분산은 57868.78095238096

9. 표준편차 Standard Deviation

  • 분산의 양의 제곱근
  • 모표준편차(population standard deviation)
  • $\sigma^2 = \sqrt{1 \above 1pt N} \sum_{i=1}^N (x_i - \mu)^2$
  • 표본표준편차(sample standard deviation)
  • $s^2 = \sqrt{1 \above 1pt n-1} \sum_{i=1}^n (x_i - \bar {x})^2$
import numpy
# 모분산, 모표준편차
print(numpy.var(a))
print(numpy.std(a))

217.6377551020408

14.752550799846134

 

ddof=1을 붙여주면 각각 표본분산 표본표준편차를 구할 수 있다.
ddof : Delta Degrees of Freedom

#표본분산, 표본표준편차
print(numpy.var(a, ddof = 1))
print(numpy.std(a, ddof = 1))

234.37912087912088

15.30944547915178

10. 범위 Range

자료를 정렬하였을 때 가장 큰 값과 가장 작은 값의 차이
python에서 제공하는 max, min 혹은 numpy를 써도 된다.

#range(a)
max(a) - min(a)

41

 

11. 사분위수 Quantile

전체 자료를 정렬했을 때 1/4, 1/2, 3/4 위치에 있는 숫자

사분위범위(IQR, interquartile range) : 1/4 ~ 3/4 분위 사이의 범위

print(numpy.quantile(a, .25)) #1분위수
print(numpy.quantile(a, .5)) #2분위수
print(numpy.quantile(a, .75)) #3분위수

54.25

76.0

84.75

 

#사분위범위(IQR, interquartile range)
#Q3 - Q1
numpy.quantile(a, .75) - numpy.quantile(a, .25)

30.5

 

 z-score: 어떤 값이 평균으로부터 몇 표준편차 떨어져 있는지를 의미하는 값

모집단의 경우

$z = {x - \mu \above 1pt \sigma}$

표본의 경우

$z = {x - \bar {x} \above 1pt s}$

#모집단에 대한 z-score
scipy.stats.zscore(a)

array([ 0.60522221, -1.08939998, 0.26629777, -0.54712088, 1.01193154, -1.02161509, 1.2152862 , 1.01193154, -1.29275464, 1.01193154, -1.08939998, 0.94414665, 0.53743732, -1.5638942 ])

 

#표본표준편차로 계산했을 때의 z-score
scipy.stats.zscore(a, ddof = 1)

array([ 0.58320672, -1.04977209, 0.25661096, -0.52721887, 0.97512163, -0.98445294, 1.17107909, 0.97512163, -1.24572955, 0.97512163, -1.04977209, 0.90980248, 0.51788756, -1.50700616])