본문 바로가기

수학/데이터 사이언스 스쿨

2. Numpy로 공부하는 선형대수

2.1 데이터와 행렬

사용 목적: 대용량 데이터를 간단한 수식으로 서술할 수 있다.

즉, 여러 개의 복잡한 방정식을 간단한 행렬로 나타낼 수 있다.

데이터 유형

데이터 크기 순: 스칼라< 벡터< 행렬< 텐서

  • 스칼라(scalar): 숫자 하나로 이뤄진 데이터
  • 벡터(vector): 여러 숫자로 이뤄진 하나의 데이터 레코드
    • 벡터는 여러 행을 가지고 하나의 열을 가짐 (한 데이터의 여러 요소)
    • np.array(), 사이킷런에서는 벡터 표시 시 2차원 배열 객체를 사용해야 함
    • reshape(행의 수, 1)를 사용하면 쉽게 벡터화할 수 있다
    • 특징 벡터(feature vector): 데이터 벡터가 예측 문제에서 입력 데이터로 사용되는 경우

 

  • 행렬(matrix): 벡터(데이터 레코드)가 여럿인 데이터 집합(여러 개의 데이터 레코드)
    • 특징 행렬: 특징 벡터와 설명 동일
  • 텐서(tensor): 같은 크기의 행렬이 여러 개 (ex. 3차원의 컬러 이미지 데이터)
  • 전치 연산(transpose): 행과 열을 바꾸는 연산
    • $x^T$: 행 벡터이면서 동시에 x의 전치 행렬
    • 행렬.T
  • 기호 정리 

 

행렬의 행 표기법과 열 표기법

열 벡터가 벡터의 기준이 된다. 따라서 행 벡터는 열 벡터의 전치 행렬이라고 취급한다.

열 벡터는 하나의 열로, 데이터가 n개로 이뤄져 있고, feature(특징)이 1개이다.

행 벡터는 하나의 행으로, 하나의 데이터에 여러 개의 특징을 벡터로 표현한 것이다.

특수행 벡터와 행렬

  • 영 벡터(Zeors-vector): 모든 원수가 0인 N차원 벡터, np.zeros((N,1))
  • 일 벡터(ones-vector): 모든 원소가 1인 N차원 벡터, np.ones((N,1))
  • 정방 행렬(square matrix): 행 개수와 열 개수가 같은 행렬
  • 대각 행렬(diagonal matrix): 모든 비 대각 요소가 0인 행렬, np.diag([1,2,3])
    • 대각(주대각): 행과 열이 같은 위치
    • 비 대각: 대각 제외 위치
  • 항등 행렬(identity matrix): 대각 성분의 값이 모두 1인 대각 행렬
  • 대칭 행렬(symmetric matrix): 전치 행렬과 원래의 행렬이 동일한 행렬
  • 항등 행렬, 대칭 행렬은 정방 행렬이어야만 함
  • 기호 정리

2.2 벡터와 행렬의 연산

  • 덧셈과 뺄셈: 같은 위치의 원소끼리 덧셈과 뺄셈
  • 스칼라와 벡터/행렬의 곱셈: 스칼라 값(c)을 벡터/행렬에 분배
  • 브로드캐스팅(broadcasting): 스칼라를 벡터로 변환하는 연산이며, 평균 제거 벡터(mean removed) 혹은 0-평균 벡터(zero-mean)계 산시 사용됨
    • 예시) 

  • 선형 조합(linear combination): 벡터/행렬에 스칼라 값을 곱한 후 더하거나 뺀 것
    • 예시) $c_{1}x_{1} + ... + c_{n}x_n$
  • 벡터끼리의 곱셈(내적(inner product)만 다룸):, np.dot(x.Y,y) 또는 x.T@y
    • 두 벡터 내적의 조건
      1. 두 벡터의 차원(길이)이 같아야 함
      2. 앞의 벡터가 행 벡터(1xn)이고, 뒤의 벡터가 열 벡터(nx1) 여야 함
    • 쉽게 생각하면 행 벡터(a x b)와 열 벡터(b x c)의 (a x c)가 최종 행렬의 크기가 된다.
  • 가중합(weighted sum): 각각에 가중치를 곱한 후 곱셈의 결과를 합한 것, 만약 가중치가 모두 1이면 일반적인 합이 됨

  • 가중평균(weighted average):가중합의 가중치를 전체 가중치값의 합으로 나눔. 즉, 모든 w를 더하면 1이 됨
    • 예시: 0.7x1+ 0.3x2
  • 유사도(similarity): 벡터의 내적을 이용해 벡터가 닮은 정도를 정량적으로 나타내는 값이며, 유사도가 클수록 내적 값이 커짐
    • 코사인 유사도(cosine similarity): 코사인은 0일 때 최댓값(1)을 가진다. 즉, 두 벡터가 같은 방향을 가리킬 때 최대의 유사도를 가짐
  • 선형 회귀 모형(linear regression model): 독립변수 x에서 종속변수 y를 예측하는 방법으로, 가중합을 사용한다
    • 예시:
    • 단점: 비선형적인 현실 세계의 데이터에서는 적용하기 힘들다는 단점이 있다. 이를 보완하기 위해 수정 선형 회귀 모형을 사용한다
  • 제곱합(sum of squares): 데이터의 분산(variance)나 표준 편차(standard deviation)등을 구할 때 사용
  • 행렬과 행렬의 곱셈: 벡터와 비슷

 

  •  교환 법칙과 분배 법칙
    • AB != BA
    • A(B+C) =AB + AC
    • (A+B)C = AC + BC
    • (A+B)T= AT+ BT
    • (AB)T = BTAT
    • ABC= (AB)C = A(BC)
    • AI = IA = A
  • 여러 개의 벡터에 대한 가중합 동시 계산: 여러 개의 식을 행렬과 벡터로 간단하게 나타낼 수 있다

  • 잔차(residual, error): 예측치와 실젯값(target)의 차이

  • 잔차 제곱합(RSS, Residual sum of Squares): error가 제곱이라는 의미는 오차가 클수록 페널티를 급격하게 준다는 뜻이다
  • 이차형식(Quadratic Form): 행 벡터 x 정방 행렬 x 열 벡터 형식으로 되어 있는 것을 말한다

2.3 행렬의 성질

  • 정부호와 준정부호: 보통 대칭 행렬에 대해서 정의
    • $x^{T}Ax$> 0: 양의 정부호, $x^{T}Ax$>=0: 양의 준정부호
  • 행렬 놈(norm): p=2인 경우가 가장 많이 쓰이므로, p표시가 없는 경우 p=2인 놈이라고 생각하면 된다. p=2인 놈을 프로베니우스 놈(frobenius norm)이라 한다. 
    • np.linalg.norm()
    • 성질
      • ||A|| >= 0
      • ||aA|| = |a|||A||
      • ||A+B|| <= ||A|| + ||B||
      • ||AB|| <= ||A||||B||

  • 대각합(trace): tr(A) = 대각 원소의 합으로 계산됨
    • $tr(cA) = c tr(A)$
    • $tr(A^T) = tr(A)$
    • $tr(A + B) = tr(A) + tr(B)$
    • $tr(AB) = tr(BA)$
    • $tr((AB)C) = tr(A(BC))$ : 트레이스 트릭(trace trick)
    • 이차형식의 트레이스 트릭: $x^{T}Ax= tr(xx^{T}A)$
  • 행렬식: det(A), detA, |A|
    • 역행렬을 구할 때 사용
    • A가 1x1인 경우: def([a]) = a
    • A가 스칼라가 아닌 경우: 여인수 전개(cofactor expansion)로 계산하며 재귀적으로 계산
    • 2x2 행렬의 def = ad-bc
    • 3x3 행렬의 def = aei + bfg + cdh - ceg - bdi - afh
    • 성질
      • $det(A^T) = det(A)$
      • $det(I)$ = 1
      • $det(AB) = det(A)det(B)$
      • $A^{-1}A= AA^{-1} = I$
      • $det(A^{-1}) = 1/det(A)$
      • $det(A)det(A^{-1}) = detI = 1$

2.4 선형 연립방정식과 역행렬

선형 예측 모형: 예측값이 실제 출력 데이터와 유사한 값을 출력하도록 하는 모형

 

  •  연립방정식과 역행렬을 이용해 선형 예측모형의 가중치 벡터를 구함
  • 선형 연립방정식(system of linear equations) 또는 연립 일차방정식: 역행렬을 이용해 Ax= b에서 x를 찾는다.

역행렬

  • 역행렬: AA^-1 = I가 성립하는 행렬을 말한다. 역행렬이 존재하는 행렬을 가역 행렬(invertible matrix), 정칙 행렬(regular matrix) 또는 비특이 행렬(non-singular maatrix)라고 한다. 반대로 역행렬이 존재하지 않는 행렬을 비가역행렬, 특이 행렬(singular matrix), 퇴화 행렬(degenerate matrix)라고 한다

  • 성질

    • 전치행렬의 역행렬 = 역행렬의 전치행렬
    • $(AB)^{-1} = B^{-1} * A^{-1}$
  • 계산 A의 역행렬= (1/det(A)) * C^T이다. C는 여인수 행렬이며, C의 전치 행렬은 어드조인트행렬(adjoint matrix)라고 하며 adj(A)라고 표기한다. 또한, det(A)= 0이 아닐 때만 역행렬이 존재한다

  • np.linalg.inv()

  • $Ax= b => x= A^{-1}b$

선형 연립 방정식

A: 계수행렬(coefficient matrix), x: 미지수 벡터(unknown vector), 상수벡터(constant vector)

공식을 사용해 $w= X^{-1}y$로 구할 수 있다

  • 미지수와 방정식 수가 다른 경우
    1. 방정식 수 = 미지수 수: 앞의 경우처럼 풀기
    2. 방정식 수 < 미지수 수: 무수히 많은 해가 존재할 수 있다
    3. 방정식 수 > 미지수 수: 모든 조건을 만족하는 해가 존재할 수 없을 수도 있다

보통 데이터의 수가 입력 차원보다 큰 경우가 많다. 즉, 3번의 경우가 많다. 이때는 최소자승문제로 풀어야 한다.

  • 최소자승문제(least square problem): 잔차(벡터의 놈)를 최소화하는 문제로 푼다
    • x= $argmin e^{T}e = argmin (Ax-b)^{T}(Ax-b)$: 즉, 함수 f(x)를 가장 작게 만드는 x를 찾는 것이 목적