프로그래머스 인공지능 데브코스 3기 수업내용 정리 #7(인공지능 수학 - 자료의 정리)

Clay Ryu's sound lab·2021년 12월 15일
0

Note for 2021

목록 보기
7/33
post-custom-banner

7강 : 벡터와 직교분해

벡터의 표현

n벡터는 크기와 방향을 가진 물리량으로 다음과 같이 표현될 수 있다.

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

  • 좌표계를 도입하여 표현
    v : (v1, v2, ..., vn) 좌표계에 수선의 발
    v의 크기 : 피타고라스정리로 계산
    v의 방향 : 주어진 벡터를 길이로 나눔

두벡터 u와 v에 대한 내적inner product는 다음과 같이 정의된다.

  • 좌표계 없이 표현
    두 n벡터의 길이와 두 벡터 간의 사이각 x을 통해 다음과 같이 정의된다.
    u * v = |u||v|cosx
  • 좌표계를 도입하여 표현
    u = (u1, u2, ..., un), v = (v1, v2, ..., vn)의 좌표값을 통해 다음과 같이 계산된다.
    u * v = u1v1 + u2v2 + ... + unvn

두 벡터 u, v간의 내적이 0이면 두 벡터는 직교orthogonal이다.

  • 직교의 물리적 의미
    두 벡터가 직교할때, u방향의 전진은 v 방향에서 전혀 측정되지 않는다. 그 반대도 마찬가지이다.

투영projection

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


벡터 u를 a위에 투영하고 남은 보완 벡터complement vector는 u-projau이다.
중요한 것은 u라는 벡터를 두개의 직교하는 벡터w1과 w2로 나눌 수 있다는 것이다.
u = w1 + w2이다.

u라는 벡터를 a상에 떨군다는 것은 수선의 발을 내린다는 것이다.
마지막 결과값은 스칼라값 * 벡터a로 해석할 수 있다. 그 말은 투영은 a벡터를 스케일한 것으로 볼 수 있다.

직교행렬Orthgonal Matrix : 직교좌표계에 대한 행렬 표현

행렬은 좌표계라는 의미를 저번강의에서 배웠다. 행렬은 각 열벡터가 기저basis를 이루는 좌표계이다.(직교하는 두 벡터의 내적값은 0이다.)

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

  • 정규직교행렬orthonomal matrix
    주어진 행렬이 직교행렬이고 모든 열벡터의 크기가 1이라면 이 행렬을 정규직교행렬이라고 한다. 정규직교행렬은 정규직교좌표계를 의미한다.

직교행렬orthgonal matrix을 이용한 선형시스템

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

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


위의 그림을 분석해보면 우리는 이제 행렬의 연산을 좌표계로서 이해를 해야 한다는 것을 알 수 있다. 2차원에서 존재하는 어떤 한 점 v는 표준좌표계에서는 (6,2)라는 상대적 스칼라 값들을 가지지만 어떤 좌표계 A에서는 (x1,x2)라는 상대적인 스칼라값들을 가진다.

여기서 중요한 것은 (6, -2)를 (1, -2)에 투영하는 과정에서 얻는 스칼라 값이 곧 x1이라는 것이다.

왜냐하면 그래프로 보았을때 a1(1, -2)에 투영되는 값에서 a1을 스케일링 하는 스칼라 값은 x1의 정의와 일치하기 때문이다.

정규직교행렬orthonormal matrix을 이용한 선형시스템

선형시스템 Ax = b에서 행렬 A가 정규직교행렬이면, 해 x는 역행렬 A^-1의 계산 없이 다음과 같이 구현할 수 있다.

  • x의 i번째 요소는 내적으로 계산할 수 있다. 즉, 벡터 b를 행렬 A의 각 열벡터 ai에 투영한 연산 projaib로부터 |a|^2 = 1이므로 b * ai로 내적의 식을 이끌어 낼 수 있다.
  • x의 i번째 요소와 j번째 요소의 계산은 독립적이다. 즉 x의 계산은 병렬처리 가능하다.

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

행렬분해matrix decomposition의 의미

주어진 행렬을 행렬 분해된 상태로 가지고 있으면 계산이 편한 경우가 많다.

QR분해

행렬 Q와 R은 그 특성에 따라 (신기하게도)다음과 같이 이루어진다.

  • Q : 정규직교행렬orthonormal matrix
  • R : 상삼각행렬upper triangular matrix

QR분해를 이용해 Ax = b 문제를 아래와 같이 나타내면
Ax = b -> (QR)x = b -> Q(Rx) = b -> Qy = b(단, Rx = y)

따라서 선형시스템을 다음과 같이 두 단계로 간단히 해결할 수 있음을 알 수있다.
1. Qb내적으로 y 구하기
2. Ry후방대치법으로 x 구하기

QR분해의 의미

QR분해는 그람-슈미트 과정Gram-Schmidt process을 행렬로 코드화 한 것이다. 엄밀하게 말하자면

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

QR분해는 다음의 이유로 활용된다.

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

다만 QR분해에서 Q는 정규직교행렬로서 모든 행렬의 요소가 꽉찬 구조를 가지기 때문에 메모리 사용량이 많다.

8-1 : SVD, PCA

임의의 크기 행렬에 대한 행렬분해 특이값분해SVD, Singular Value Division

특이값 분해SVD

특이값 분해는 주어진 행렬을 아래의 형태를 가지는 세 행렬의 곱으로 나누는 행렬분해이다. (행렬 자체가 임의의 크기를 가지고 있고, 숫자들이 형태를 가지고 있지 않은 행렬을)

행렬 U, D, T는 다음과 같은 특징을 가진다.

  • U : m차원 회전행렬(정규직교행렬)
  • D : n차원 확대, 축소(확대축소 크깅 따른 정렬 형태)
  • V : n차원 회전행렬(정규직교행렬)


위 그래프를 분석하면
A : 원래의 행렬은 직교하지 않는 행렬이다.
회전행렬V : 처음에 2차원 행렬이 있는데 v로서 전체적인 입력을 회전을 시킨다고 생각(입력 차원인 R^n 공간에서의 회전)
확대축소행렬D : D라는 행렬에서는 회전된 행렬을 x를 4배 y를 1/2^2만큼 확대축소, 축을 증폭을 한다.(입력 차원인 R^n 공간에 대해 축방향으로의 확대축소를 한 후, R^n -> R^m으로 차원 변환)
회전행렬U : 숨어있는 z축을 생각해서 U의 행벡터의 순서대로 z축, y축, x축만큼 회전을 시키면 원래 행렬의 그래프가 되게 된다.(입력 차원인 R^m 공간에서의 회전)

특이값 분해의 활용

A의 특이값 분해 U, D, V는 각각 열벡터의 순서대로 행렬 A의 열벡터가 어떤 방향으로 강한 응집성을 보이고 있는지를 분석한 것이다. U, D, V의 열벡터를 순서대로 p개 취한다면, 강한 응집성을 가지는 p개의 방향으로 수선의 발을 내린 A의 근사치 A'를 재구성할 수 있다.

강한 주파정보만 취할 수 있다?
위의 그림에서 증폭값 4를 취한다면 V에서는 1번째 행 U에서는 1번째 열만 취하게 된다. 결과적으로 주어진 행렬 A가 아니라 근사치 행렬로 A'를 구할 수 있다. 실제로는 응집성이 높은 부분에 대해서는 정보가 살아 있고 응집성이 낮은 부분은 정보가 사라진다고 말할 수 있다.

첫번째 component만을 취한 것을 그림으로 그려보면 다음과 같다.

V를 통해서 빨간색, 파란섹 두 벡터 모두가 루트 2분의 1만큼 수선의 발을 내렸다는 것을 알 수 있다.
그리고 증폭값이 큰 부분인 4를 취해서 U를 통해서 그 부분을 4배를 한다.
마지막으로 U를 통해서 회전을 한다.
가장 강력하게 응집성을 보이는 축에 대해서만 component를 유지한채 따라갔으므로 두 벡터 모두 같은 방향으로 나아가는 모습을 보인다. 원래의 그래프와는 달리 두 벡터가 아예 같은 방향을 보고 있다.

영상처리에서 많이 사용하는 선택적으로 취하는 방식이다.

주성분 분석Principal Component Analysis

주성분분석은 다수의 n차원 데이터에 대해, 데이터의 중심으로부터 데이터의 응집력이 좋은 n개의 직교 방향을 분석하는 방법이다.

주성분분석은 데이터의 공분산행렬covariance matrix에 대한 고유값 분해에 기반을 둔 직교분해이다. K개의 n차원 데이터{x1, x2, ..., xk}가 있을 때, 데이터의 중심 m과 공분산 행렬 C는 다음과 같이 구한다.

임의의 데이터 xi와 중심간의 차이를 가지는 벡터를 외적을 해서 행렬로 차원을 올린다. 이들의 평균을 구하면 공분산 행렬이 된다.

예시

공분산행렬에 대한 주성분분석PCA는 아래와 같다.

SVD와는 다르게 양쪽의 직교행렬이 같은 행렬이지만 왼쪽은 열방향 오른쪽은 행방향으로 나누어진다. D는 그 값이 크게되면 그 방향으로의 데이터 응집성이 큰 것이다.


데이터가 6개 있는 그래프다.(이 부분은 지금 내가 이해하기가 어렵다.)

8-2. 벡터공간과 최소제곱법

집합set과 공간space

집합은 임의의 원소element를 수집하여 만듬 모듬이다.

연산에 닫혀 있는 집합

집합이 연산에 닫혀 있다는 개념이 있다. 어떤 연산을 생각한 다음, 집합에서 임의의 원소를 뽑아 연산을 수행한 결과가 여전히 집합의 원소로 있다면, 해당 집합은 연산에 닫혀 있다고 한다.(연산을 한 원소가 여전히 그 집합에 속하는 경우)

공간space, 벡터공간

공간은 다음의 두 연산에 닫혀 있는 집합니다.

  • 덧셈연산에 닫혀 있다 : 집합에서 임의의 두 원소 x, y를 뽑아 더한 결과 x + y는 집합의 원소이다.
  • 스칼라 곱 연산에 닫혀 있다 : 집합에서 임의의 원소 x를 뽑아 임의의 스칼라 s배한 결과 sx는 집합의 원소이다.

다음과 같이 n벡터의 집합은 모두 공간이다.

앞으로 모든 n벡터 집합 R^n은 n차원 벡터공간이라 부를 수 있다.

열공간Column Space

행렬 A의 열벡터들에 대한 가능한 모든 선형조합의 결과를 모아 집합으로 구성할 수 있을 것이다. 이 집합을 열공간이라 하고 다음과 같이 표기한다.

파란색으로 그려진 것이 주어진 행렬 A의 열공간column space이다.

  • Consistent Linear System
    선형시스템 Ax = b가 해를 가지면, 다음을 만족한다.

  • Inconsistent Linear System
    선형시스템 Ax = b가 해가 없으면, 다음을 만족한다.

최소 제곱법

열공간으로 투영

선형시스템 Ax = b에 대한 해가 없음에도 불구하고, 우리가 할 수 있는 최선이 무엇인가를 생각해보자. 행렬 A가 정의하는 열공간에서 우리의 목표 b와 가장 가까운 지점은 b를 열공간에 투영한 저점일 것이다. 즉, 달성가능한 최선의 목표 projwb를 생각할 수 있다.

따라서 Ax = b의 식은 다음과 같이 바뀌게 된다.

이 방법은 목표 b와 달성가능한 목표 b의 차이를 나타내는 벡터 (b - b)의 제곱길이가 될때 비로소 정화한 b_를 구할 수 있게 된다.

해를 구하는 과정

주어진 선형시스템의 양변에 전치행렬 A^T를 곱하면 최소제곱법의 해를 구할 수 있다. 위 과정으로 x를 구하는 문제에서 x_를 구하는 문제로 바뀌게 된다. 숫자세계에서는 양변에 같은 값을 곱하면 바뀌는게 없지만 선형시스템에 A^T를 곱하면 문제자체가 바뀌게 된다.

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

2차원 공간에 m개의 정점이 그림과 같이 있을때, 이를 잘 설명할 수 있는 직선 y = mx + b를 구하는 문제를 생각해 보자. 이를 선형회귀 문제라 한다.

  • 선형회귀 문제는 다음과 같이 최소제곱법으로 풀 수 있다.
  1. 선형시스템 구성 : 직선이 각 정점을 모두 지나간다고 가정하고 선형 시스템 Ax = b 구성(단, 주어진 모든 정점을 지나가는 직선은 존재하지 않으므로 선형시스템의 해는 존재하지 않음)
    선형시스템 작성은 아래와 같은 과정을 따른다.

    당연히 이것은 inconsistent한 선형시스템이다.

  2. 최소제곱법의 적용
    양변에 A의 트랜스포스를 곱하는 순간 X_의 행렬은 다른 행렬로 바뀌고 A^Tb또한 다른 행렬로 바뀌어서 해는 다른 것으로 바뀌게 된다.

인공지능 수학 : 통계학

통계학이란

  • 데이터의 수집collection, 구성organization, 분석analysis, 해석interpretation, 표현presentation에 관한 학문
  • 기술통계학descriptive statistics : 수집한 데이터를 설명
  • 추측통계학inferential statistics : 수집한 데이터를 분석, 추론

개념정의

  • 모집단population : 어떤 질문이나 실험을 위해 관심의 대상이 되는 개체나 사건의 집합(전교 남학생의 키)
  • 모수parameter : 모집단의 수치적인 특성(키의 평균)
  • 표본sample : 모집단에서 선택된 개체나 사건의 집합, 일반적으로는 모집단의 특성을 추론하기 위해서 일부만을 선택한 표본으로 모수를 추정하게 된다.

도수Frequency

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

  • 표현방법
    도수분포표Frequency Distribution Table
    막대그래프Bar graph : 질적자료, 수치적인 자료가 아니라 범주로 구분된 자료(남/녀, 소설/시/에세이)
    히스토그램Histogram : 양적자료, 수집된 데이터가 숫자인 경우(키)

  • 질적데이터 : 범주의 형태로 구분되어짐
    AAAAAAAAAABBBBBBCCCCCCDDDDDDDDDDEEEEEEEGGGGGGGHHHH

  • 도수분포표

  • 막대그래프 : 범주가 명확히 구분되며, x축 순서에 의미가 없음

  • 양적데이터
    3.600 1.800 3.333 2.283 4.533 2.883 4.700 3.600 1.950 4.350 1.833 3.917 4.200 1.750 4.700 2.167 1.750

  • 히스토그램 : 데이터가 연속적이며, x축 순서가 중요함

줄기 - 잎 그림 stem and leaf diagram

양적 자료를 줄기와 잎으로 구분
양적데이터를 정렬하고 일정한 방식으로 잘라준뒤(여기서는 소수점 3번째자리를 잎 부분으로) 줄기부분과 잎부분으로 나누어서 나열

상대도수

도수를 전체 원소의 수로 나눈 것, 확률을 계산하는 데에 중요한 역할을 함

평균mean

n개의 값들을 모두 더한 뒤 n으로 나눈 값

import statistics
statistics.mean(list)
  • 모평균 : 모집단 전체자료일 경우 Mu
    표본평균 : 모집단에서 추출한 표본일 경우 X-

중앙값median

평균의 경우 극단 값의 영향을 많이 받음, 데이터 해석에 영향을 받음
주어진 자료를 높은 쪽 절반과 낮은 쪽 절반으로 나누는 값을 의미
자료를 순서대로 나열했을 때 가운데 있는 값이며
자료의 수가 n일때

  • (n+1)/2번째 자료값
  • n/2 n/2+1의 평균

예시

분산Variance

편차(값과 평균의 차이)의 제곱의 합을 자료의 수로 나눈 값, 산포의 정도를 알기 위한 값

import statistics
statistics.variance(list)
import scipy.stats
scipy.stats.tvar(list)

표준편차Stardard Deviation

분산의 양의 제곱근

#standard deviation
statistics.stdev(list)
#모분산, 모표준편차
statistics.pvariance(list)
statistics.pstdev(list)

import numpy
#모분산, 모표준편차
numpy.var(list)
numpy.std(list)
#표본분산, 표준편자
numpy.var(list, ddof=1)
numpy.std(list, ddof=1)

범위range

자료를 정렬하였을 때 가장 큰 값과 가장 작은 값의 차이
인공지능 관련해서 키, 몸무게, 눈동자의 크기 등과 같은 특성들을 수집하면 각각의 값들을 범위를 사용해서 조정하는 데에 쓰인다.

max(list) - min(list)
numpy.max(list) - numpy.min(list)

사분위수Quartile

전체 자료를 정렬했을 때 1/4, 1/2, 3/4 위치에 있는 숫자
범위만 가지고는 극단적인 크기의 자료가 있을 경우 자료들의 대략적인 모양을 그리는데에 어려움이 있을 수 있음
Q1 : 제1사분위수
Q2 : median
Q3 : 제3사분위수

numpy.quantile(list, .25)
numpy.quantile(list, .5)
numpy.quantile(list, .75)
numpy.quantile(list, .60)
  • 사분위 범위IQR, interquartile range
    Q3 - Q1
numpy.quantile(list, .75) - numpy.quantile(list, .25)

z-score

어떤 값이 평균으로부터 몇 표준편차 떨어져 있는지를 의미하는 값
절대적인 편차보다는 표준편차로부터 얼마나 떨어져 있는지가 의미가 있는경우가 많다.(50과 51보다 500과 501이 좀더 덜 떨어져 있다고 볼 수 있기에)

#실행값은 각각의 값들의 z-score를 모집단을 대상으로 계산한 리스트 값이다.
scipy.stats.zscore(list)
#실행값은 각각의 값들의 z-score를 표본을 대상으로 계산한 리스트 값이다.
scipy.stats.zscore(list, ddof=1)
profile
chords & code // harmony with structure
post-custom-banner

0개의 댓글