작성자: admin 작성일시: 2016-09-26 21:13:56 조회수: 291 다운로드: 37
카테고리: 기초 수학 태그목록:

R을 활용한 선형대수 입문

선형대수(linear algebra)는 데이터 분석에 필요한 각종 계산을 쉽게 하기 위한 학문이다.

데이터 분석을 하기 위해서는 수많은 숫자들을 조합하여 계산할 필요가 있다. 하나의 데이터가 수십개에서 수천개의 숫자로 이루어져 있을 수도 있고 이런 크기를 가진 데이터가 수십개에서 수백만개가 존재할 수도 있다.

선형대수를 사용하면 이러한 복잡한 계산 과정을 단순한 수식으로 서술할 수 있다. 그러기 위해서는 우선 선형대수에서 사용되는 여러가지 기호와 개념을 익혀야 한다.

데이터의 유형

선형대수에서 다루는 데이터는 갯수나 형태에 따라 크게 스칼라(scalar), 벡터(vector), 행렬(matrix) 의 세가지 유형으로 나누어진다.

간단하게 말하자면 스칼라는 숫자 하나로 이루어진 데이터이고 벡터는 여러개의 숫자로 이루어진 데이터 레코드이며 행렬은 벡터, 즉 데이터 레코드가 여러개 있는 데이터 집합이라고 볼 수 있다.

스칼라

스칼라는 하나의 숫자만 이루어진 데이터를 말한다. 예를 들어 어떤 붓꽃 한 송이의 꽃잎의 길이를 측정하면 하나의 숫자가 나올 것이다. 이 데이터는 스칼라이다.

스칼라는 보통 $x$와 같이 알파벳 소문자로 표기하며 실수(real number)인 숫자 중의 하나이므로 실수 집합 $\mathbb{R}$의 원소라는 의미에서 다음과 같이 표기한다.

$$ x \in \mathbb{R} $$

벡터

벡터는 여러개의 숫자가 특정 순서대로 모여 있는 것을 말한다. 사실 대부분의 데이터 분석에서 하나의 데이터 레코드는 여러개의 숫자로 이루어진 경우가 많다. 예를 들어 붓꽃의 종을 알아내기 위해 크기를 측정하는 경우, 꽃잎의 길이 $x_1$ 뿐 아니라 꽃잎의 폭 $x_2$ , 꽃받침의 길이 $x_3$ , 꽃받침의 폭 $x_4$ 이라는 4개의 숫자를 측정할 수도 있다. 이렇게 측정된 4개의 숫자는 한 송이의 붓꽃에서 나온 데이터이므로 따로 따로 다루기 보다는 하나의 쌍(tuple)으로 묶어놓는 것이 좋다. 이 때 숫자의 순서가 바뀌면 어떤 숫자가 꽃잎의 길이이고 어떤 숫자가 꽃받침의 폭인지 알 수 없어지기 때문에 숫자의 순서를 유지하는 것이 중요하다. 이런 데이터 묶음을 선형대수에서는 벡터라고 부른다.

붓꽃의 예에서는 4개의 데이터 $(x_1, x_2, x_3, x_4)$가 하나로 묶여 있는데 이를 선형 대수 기호로는 다음과 같이 하나의 문자 $x$로 다음과 같이 표기한다.

$$ x = \begin{bmatrix} x_{1} \\ x_{2} \\ x_{3} \\ x_{4} \\ \end{bmatrix} $$

여기에서 주의할 점은 벡터는 복수의 행(row)을 가지고 하나의 열(column)을 가지는 형태로 위에서 아래로 표기한다는 점이다.

이 때 $x$는 4개의 실수(real number)로 이루어져 있기 때문에 4차원 벡터라고 하고 다음과 같이 4차원임을 표기한다.

$$ x \in \mathbb{R}^4 $$

만약 4개가 아니라 $N$개의 숫자가 모여 있는 경우의 표기는 다음과 같다.

$$ x = \begin{bmatrix} x_{1} \\ x_{2} \\ \vdots \\ x_{N} \\ \end{bmatrix} ,\;\;\;\; x \in \mathbb{R}^N $$

예를 들어 어떤 붓꽃 한 송이를 꺾어 측정하였더니, 꽃잎의 길이가 6.5 cm, 꽃잎의 폭이 3.0 cm, 꽃받침의 길이가 5.2 cm, 꽃받침의 폭이 2.0 cm 였다면 이 데이터를 $x$라고 이름 붙이고 다음과 같이 나타낼 수 있다.

$$ x = \begin{bmatrix} 6.5 \\ 3.0 \\ 5.2 \\ 2.0 \\ \end{bmatrix} $$

만약 이 데이터를 이용하여 붓꽃의 종을 결정하는 예측 문제를 풀고 있다면 이 벡터를 특징 벡터(feature vector)라고 하기도 한다.

R에서 벡터는 원래 열의 갯수가 1인 열 벡터로 나타내는 것이 정석이다.

In [1]:
matrix(c(1, 2, 3, 4), ncol=1)
1
2
3
4

그러나 보통은 다음과 같이 벡터 객체로 표현한다.

In [2]:
c(1, 2, 3, 4)
  1. 1
  2. 2
  3. 3
  4. 4

이 경우, 마치 하나의 행으로 표시되어도 실제로는 열의 의미를 가진다는 점에 주의한다.

행렬

행렬은 복수의 차원을 가지는 데이터 레코드가 다시 여러개 있는 경우의 데이터를 합쳐서 표기한 것이다. 예를 들어 앞서 말한 붓꽃의 예에서 6개의 붓꽃에 대해 크기를 측정하였다면 4차원 붓꽃 데이터가 6개가 있다. 즉, $4 \times 6 = 24$개의 실수 숫자가 있는 것이다. 이 숫자 집합을 행렬로 나타내면 다음과 같다. 행렬은 보통 $X$와 같이 알파벳 대문자로 표기한다.

$$X = \begin{bmatrix} x_{1, 1} & x_{1, 2} & x_{1, 3} & x_{1, 4} \\ x_{2, 1} & x_{2, 2} & x_{2, 3} & x_{2, 4} \\ x_{3, 1} & x_{3, 2} & x_{3, 3} & x_{3, 4} \\ x_{4, 1} & x_{4, 2} & x_{4, 3} & x_{4, 4} \\ x_{5, 1} & x_{5, 2} & x_{5, 3} & x_{5, 4} \\ x_{6, 1} & x_{6, 2} & x_{6, 3} & x_{6, 4} \\ \end{bmatrix} $$

행렬 안에서 원소의 위치를 표기할 때는 $x_{2, 3}$ 처럼 두 개의 숫자 쌍을 아랫 첨자(sub-script)로 붙여서 표기한다. 첫번째 숫자가 행(row)을 뜻하고 두번째 숫자가 열(column)을 뜻한다. 예를 들어 $x_{2, 3}$ 는 두번째 행(위에서 아래로 두번째), 세번째 열(왼쪽에서 오른쪽으로 세번째)의 숫자를 뜻한다.

붓꽃의 예에서는 하나의 데이터 레코드가 4차원이였다는 점을 기억하자. 따라서 이 행렬 표기에서는 하나의 행(row)이 붓꽃 하나에 대한 데이터 레코드가 된다.

하나의 데이터 레코드를 나타낼 때는 하나의 열(column)로 나타내고 복수의 데이터 레코드 집합을 나타낼 때는 하나의 데이터 레코드가 하나의 행(row)으로 표기하는 것은 일관성이 없어 보지만 데이터 분석에서 쓰는 일반적인 관례이므로 익히고 있어야 한다.

만약 이 데이터를 이용하여 붓꽃의 종을 결정하는 예측 문제를 풀고 있다면 이 행을 특징 행렬(feature matrix)이라고 하기도 한다.

이 행렬의 크기를 수식으로 표시할 때는 행의 크기 곱하기 열의 크기의 형태로 다음과 같이 나타낸다.

$$ X \in \mathbb{R}^{4\times 6} $$

벡터도 열의 수가 1인 특수한 행렬이기 때문에 벡터의 크기를 표시할 때 행렬 표기에 맞추어 다음과 같이 쓰기도 한다.

$$ x \in \mathbb{R}^{4\times 1} $$

R에서 행렬을 표기할 때는 matrix 객체를 사용한다.

In [3]:
matrix(c(11, 12, 13, 21, 22, 23), nrow=2, byrow=TRUE)
111213
212223

특수한 벡터와 행렬

몇가지 특수한 벡터와 행렬에 대해서는 별도의 기호나 이름이 붙어있다.

영벡터

모든 원소가 0인 $N$차원 벡터는 다음과 같이 표시할 수 있다.

$$ \mathbf{0}_N = \mathbf{0} = \begin{bmatrix} 0 \\ 0 \\ \vdots \\ 0 \\ \end{bmatrix} $$

문맥에 의해 벡터의 크기를 알 수 있을 때는 크기를 나타내는 아랫첨자 $N$을 생략할 수도 있다.

일벡터

모든 원소가 1인 $N$차원 벡터는 다음과 같이 표시할 수 있다.

$$ \mathbf{1}_N = \mathbf{1} = \begin{bmatrix} 1 \\ 1 \\ \vdots \\ 1 \\ \end{bmatrix} $$

문맥에 의해 벡터의 크기를 알 수 있을 때는 크기를 나타내는 아랫첨자 $N$을 생략할 수도 있다.

정방 행렬

행의 크기와 열의 크기가 같은 행렬을 정방 행렬(square matrix)이라고 한다.

대각 행렬

행렬에서 행의 숫자와 열의 숫자가 같은 위치를 대각(diagonal)이라고 하고 대각 위치에 있지 않은 것들은 비대각(off-diagonal)이라고 한다. 모든 비대각 요소가 0인 정방 행렬을 대각 행렬(diagonal matrix)이라고 한다.

$$ D \in \mathbb{R}^{N \times N} $$$$ D = \begin{bmatrix} D_{1} & 0 & \cdots & 0 \\ 0 & D_{2} & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & D_{N} \\ \end{bmatrix} $$

R로 대각행렬을 생성하려면 diag 명령을 사용한다.

In [4]:
diag(c(1, 2, 3))
100
020
003

단위 행렬

대각 행렬 중에서도 모든 대각 성분의 값이 1인 대각 행렬을 단위 행렬(identity matrix)이라고 한다. 단위 행렬은 보통 알파벳 대문자 $I$로 표기하는 경우가 많다.

$$ I \in \mathbb{R}^{N \times N} $$$$ I = \begin{bmatrix} 1 & 0 & \cdots & 0 \\ 0 & 1 & \cdots & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & \cdots & 1 \\ \end{bmatrix} $$

R로 단위행렬을 생성하려면 크기만 입력하는 diag 명령을 사용한다.

In [5]:
diag(3)
100
010
001

연산

행렬의 연산을 이용하면 대량의 데이터에 대한 계산을 간단한 수식으로 나타낼 수 있다. 물론 행렬에 대한 연산은 보통의 숫자 즉, 스칼라에 대한 사칙 연산과는 다른 규칙을 적용하므로 이 규칙을 외워야 한다.

전치 연산

전치(transpose) 연산은 행렬의 행과 열을 바꾸는 연산을 말한다. 벡터 기호에 $T$라는 윗첨자(super-script)를 붙어서 표기한다. 예를 들어 앞에서 보인 $4\times 6$ 차원의 행렬을 전치 연산하면 $6\times 4$ 차원의 행렬이 된다.

$$ X = \begin{bmatrix} x_{1, 1} & x_{1, 2} & x_{1, 3} & x_{1, 4} \\ x_{2, 1} & x_{2, 2} & x_{2, 3} & x_{2, 4} \\ x_{3, 1} & x_{3, 2} & x_{3, 3} & x_{3, 4} \\ x_{4, 1} & x_{4, 2} & x_{4, 3} & x_{4, 4} \\ x_{5, 1} & x_{5, 2} & x_{5, 3} & x_{5, 4} \\ x_{6, 1} & x_{6, 2} & x_{6, 3} & x_{6, 4} \\ \end{bmatrix} \;\;\; \rightarrow \;\;\; X^T = \begin{bmatrix} x_{1, 1} & x_{2, 1} & x_{3, 1} & x_{4, 1} & x_{5, 1} & x_{6, 1} \\ x_{1, 2} & x_{2, 2} & x_{3, 2} & x_{4, 2} & x_{5, 2} & x_{6, 2} \\ x_{1, 3} & x_{2, 3} & x_{3, 3} & x_{4, 3} & x_{5, 3} & x_{6, 3} \\ x_{1, 4} & x_{2, 4} & x_{3, 4} & x_{4, 4} & x_{5, 4} & x_{6, 4} \\ \end{bmatrix} $$

벡터도 열의 수가 1인 특수한 행렬이므로 벡터에 대해서도 전치 연산을 적용할 수 있다. 이 때 $x$와 같이 열의 수가 1인 행렬을 열 벡터(column vector)라고 하고 $x^T$와 같이 행의 수가 1인 행렬을 행 벡터(row vector)라고 한다.

$$ x = \begin{bmatrix} x_{1} \\ x_{2} \\ \vdots \\ x_{N} \\ \end{bmatrix} \; \rightarrow \; x^T = \begin{bmatrix} x_{1} & x_{2} & \cdots & x_{N} \end{bmatrix} $$

R에서는 t 명령으로 전치 행렬을 구한다.

In [6]:
X <- matrix(c(11, 12, 13, 21, 22, 23), nrow=2, byrow=TRUE)
X
111213
212223
In [7]:
t(X)
1121
1222
1323

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

전치 연산과 행 벡터, 열 벡터를 이용하면 행렬을 다음과 같이 복수의 열 벡터들 $c_i$, 또는 복수의 열 벡터들 $r_j^T$ 을 합친(concatenated) 형태로 표기할 수도 있다.

$$ X = \begin{bmatrix} c_1 & c_2 & \cdots & c_M \end{bmatrix} = \begin{bmatrix} r_1^T \\ r_2^T \\ \vdots \\ r_N^T \end{bmatrix} $$
$$ X \in \mathbb{R}^{N\times M} ,\;\;\; c_i \in R^{N \times 1} \; (i=1,\cdots,M) ,\;\;\; r_j \in R^{1 \times M} \; (j=1,\cdots,N) $$

벡터와 행렬의 덧셈과 뺄셈

벡터와 행렬의 덧셈과 뺄셈은 같은 크기를 가진 두개의 벡터나 행렬에 대해 정의되며 각각의 원소에 대해 덧셈과 뺄셈을 하면 된다. 이러한 연산을 element-wise 연산이라고 한다.

In [8]:
x <- c(10, 11, 12, 13, 14)
x
  1. 10
  2. 11
  3. 12
  4. 13
  5. 14
In [9]:
y = c(0, 1, 2, 3, 4)
y
  1. 0
  2. 1
  3. 2
  4. 3
  5. 4
In [10]:
x + y
  1. 10
  2. 12
  3. 14
  4. 16
  5. 18
In [11]:
x - y
  1. 10
  2. 10
  3. 10
  4. 10
  5. 10

벡터 곱셈

두 행렬의 곱셈을 정의하기 전에 우선 두 벡터의 곱셈을 알아보자. 벡터의 곱셈에는 내적(inner product)과 외적(outer product) 두 가지가 있다 여기에서는 내적에 대해서만 설명한다. 내적은 dot product라고 하기도 한다.

두 벡터의 곱(내적)이 정의되려면 우선 두 벡터의 길이가 같으며 앞의 벡터가 행 벡터이고 뒤의 벡터가 열 벡터이어야 한다. 이때 두 벡터의 곱은 다음과 같이 각 원소들을 element-by-element로 곱한 다음에 그 값들을 다시 모두 합해서 하나의 스칼라값으로 계산된다.

$$ x^T y = \begin{bmatrix} x_{1} & x_{2} & \cdots & x_{N} \end{bmatrix} \begin{bmatrix} y_{1} \\ y_{2} \\ \vdots \\ y_{N} \\ \end{bmatrix} = x_1 y_1 + \cdots + x_N y_N = \sum_{i=1}^N x_i y_i $$
$$ x \in \mathbb{R}^{N \times 1} , \; y \in \mathbb{R}^{N \times 1} \; \rightarrow \; x^T y \in \mathbb{R} $$

벡터의 곱은 왜 이렇게 복잡하게 정의된 것일까. 벡터의 곱을 사용한 예를 몇가지 살펴보자

가중합

가중합(weighted sum)이란 복수의 데이터를 단순히 합하는 것이 아니라 각각의 수에 중요도에 따른 어떤 가중치를 곱한 후 이 값을 합하는 것을 말한다. 만약 데이터가 $x_1, \cdots, x_N$ 이고 가중치가 $w_1, \cdots, w_N$ 이면 가중합은 다음과 같다.

$$ w_1 x_1 + \cdots + w_N x_N = \sum_{i=1}^N w_i x_i $$

이를 벡터의 곱으로 나타내면 다음과 같이 $w^Tx$ 또는 $x^Tw$ 라는 간단한 수식으로 표시할 수 있다.

$$ w_1 x_1 + \cdots + w_N x_N = \sum_{i=1}^N w_i x_i = \begin{bmatrix} w_{1} && w_{2} && \cdots && w_{N} \end{bmatrix} \begin{bmatrix} x_1 \\ x_2 \\ \vdots \\ x_N \end{bmatrix} = w^Tx = \begin{bmatrix} x_{1} && x_{2} && \cdots && x_{N} \end{bmatrix} \begin{bmatrix} w_1 \\ w_2 \\ \vdots \\ w_N \end{bmatrix} = x^Tw $$

R에서 벡터 혹은 이후에 설명할 행렬의 곱은 %*%이라는 명령으로 계산한다. 2차원 행렬로 표시한 벡터의 경우에는 결과값이 스칼라가 아닌 2차원 행렬값임에 유의한다.

In [12]:
x <- c(1, 2, 3)
y <- c(4, 5, 6)
t(x) %*% y
32

원래 내적은 크기가 같은 행 벡터와 열 벡터에 대해 정의되지만 R에서는 행 벡터와 열 벡터 구분이 없으므로 굳이 t 명령을 사용할 필요가 없다.

In [13]:
x <- c(1, 2, 3)
y <- c(4, 5, 6)
x %*% y
32

벡터와 벡터의 내적과 같이 스칼라 값이 확실한 경우에는 drop 명령으로 1 x 1 행렬이 아닌 스칼라 값임을 명시할 수도 있다.

In [14]:
drop(x %*% y)
32

평균

벡터로 표현된 $N$개의 데이터의 평균은 가중치값이 모두 $\dfrac{1}{N}$인 가중 평균과 같다.

$$ \bar{x} = \dfrac{1}{N}\sum_{i=1}^N x_i = \dfrac{1}{N} \mathbf{1}_N^T x $$
In [15]:
x <- 0:9
mean(x)
4.5
In [16]:
N <- length(x)
drop(rep(1, 10) %*% x / N)
4.5

제곱합

데이터 분석시에 분산(variance), 표준 편차(standard deviation)을 구하는 경우에는 각각의 데이터를 제곱한 값을 모두 더하는 계산 즉 제곱합(sum of squares)을 계산하게 된다. 이 경우에도 벡터의 곱을 사용하여 $x^Tx$로 쓸 수 있다.

$$ x^T x = \begin{bmatrix} x_{1} & x_{2} & \cdots & x_{N} \end{bmatrix} \begin{bmatrix} x_{1} \\ x_{2} \\ \vdots \\ x_{N} \\ \end{bmatrix} = \sum_{i=1}^{N} x_i^2 $$

선형 회귀 모형

선형 회귀 모형(linear regression model)은 실수 값으로 이루어진 $N$개의 독립 변수 $x_1, \cdots x_N$ 개로부터 실수 값 $y$를 계산하는 가중합을 뜻한다.

$$ y = w_1 x_1 + \cdots + w_N x_N$$

이 수식은 벡터의 곱으로 표현 할 수 있다.

$$ y = w^Tx$$

행렬의 곱셈

벡터의 곱셈을 정의한 후에는 다음과 같이 행렬의 곱셈을 정의할 수 있다.

$A$ 행렬과 $B$ 행렬을 곱한 결과인 $C$ 행렬의 $i$번째 행, $j$번째 열의 원소의 값은 $A$ 행렬의 $i$번째 행 벡터 $a_i^T$와 $B$ 행렬의 $j$번째 열 벡터 $b_j$의 곱으로 계산된 숫자이다.

$$ C = AB \; \rightarrow \; [C]_{ij} = a_i^T b_j $$

이 정의가 성립하려면 앞의 행렬 $A$의 열의 수가 뒤의 행렬 $B$의 행의 수와 일치해야만 한다.

$$ A \in \mathbb{R}^{N \times L} , \; B \in \mathbb{R}^{L \times M} \; \rightarrow \; AB \in \mathbb{R}^{N \times M} $$
In [17]:
A <- matrix(1:6, nrow=2, byrow=T)
B <- matrix(1:6, nrow=3, byrow=T)
C <- A %*% B
In [18]:
A
123
456
In [19]:
B
12
34
56
In [20]:
C
2228
4964

행렬의 곱셈은 교환 법칙이 성립하지 않는다. 그러나 덧셈에 대한 배분 법칙은 성립한다.

$$ AB \neq BA $$$$ A(B + C) = AB + AC $$$$ (A + B)C = AC + BC $$
In [21]:
A <- matrix(1:4, nrow=2, byrow=T)
B <- matrix(seq(9, 6), nrow=2, byrow=T)
In [22]:
A %*% B
2320
5548
In [23]:
B %*% A
3350
2538
In [24]:
A <- matrix(1:4, nrow=2, byrow=T)
B <- matrix(5:8, nrow=2, byrow=T)
C <- matrix(seq(9, 6), nrow=2, byrow=T)
In [25]:
A %*% (B + C)
4242
9898
In [26]:
A %*% B + A %*% C
4242
9898
In [27]:
(A + B) %*% C
110 96
174152
In [28]:
A %*% C + A %*% C
4640
11096

어떤 행렬에 단위 행렬을 곱해도 행렬의 값이 변하지 않는다.

$$ AI = IA = A $$
In [29]:
A <- matrix(1:4, nrow=2, byrow=T)
I <- diag(2)
In [30]:
A %*% I
12
34
In [31]:
I %*% A
12
34

그럼 이러한 행렬의 곱셈은 데이터 분석에서 어떤 경우에 사용될까. 몇가지 예를 살펴본다.

가중 벡터합

어떤 데이터 레코드 즉, 벡터의 가중합은 $w^Tx$ 또는 $x^Tw$로 표시할 수 있다는 것을 배웠다. 그런데 만약 이렇게 $w$ 가중치를 사용한 가중합을 하나의 벡터 $x$가 아니라 여러개의 벡터 $x_1, \cdots, x_M$개에 대해서 모두 계산해야 한다면 이 계산을 다음과 같이 $Xw$라는 기호로 간단하게 표시할 수 있다.

$$ \begin{bmatrix} w_1 x_{1,1} + w_2 x_{1,2} + \cdots + w_N x_{1,N} \\ w_1 x_{2,1} + w_2 x_{2,2} + \cdots + w_N x_{2,N} \\ \vdots \\ w_1 x_{M,1} + w_2 x_{M,2} + \cdots + w_N x_{M,N} \\ \end{bmatrix} \\ = \begin{bmatrix} x_{1,1} & x_{1,2} & \cdots & x_{1,N} \\ x_{2,1} & x_{2,2} & \cdots & x_{2,N} \\ \vdots & \vdots & \vdots & \vdots \\ x_{M,1} & x_{M,2} & \cdots & x_{M,N} \\ \end{bmatrix} \begin{bmatrix} w_1 \\ w_2 \\ \vdots \\ w_N \end{bmatrix} \\ = \begin{bmatrix} x_1^T \\ x_2^T \\ \vdots \\ x_N^T \\ \end{bmatrix} \begin{bmatrix} w_1 \\ w_2 \\ \vdots \\ w_N \end{bmatrix} = X w $$

잔차

선형 회귀 분석(linear regression)을 한 결과는 가중치 벡터 $w$라는 형태로 나타나고 예측치는 이 가중치 벡터를 사용한 독립 변수 데이터 레코드 즉, 벡터 $x_i$의 가중합 $w^Tx_i$이 된다.

이 예측치와 실제 값 $y_i$의 차이를 오차(error) 혹은 잔차(residual) $e_i$ 이라고 한다. 이러한 잔차 값을 모든 독립 변수 벡터에 대해 구하면 잔차 벡터 $e$가 된다.

$$ e_i = y_i - w^Tx_i $$

잔차 벡터는 다음과 같이 $y-Xw$로 간단하게 표기할 수 있다.

$$ \begin{eqnarray} e &=& \begin{bmatrix} e_{1} \\ e_{2} \\ \vdots \\ e_{M} \\ \end{bmatrix} \\ &=& \begin{bmatrix} y_{1} \\ y_{2} \\ \vdots \\ y_{M} \\ \end{bmatrix} - \begin{bmatrix} w^T x_{1} \\ w^T x_{2} \\ \vdots \\ w^T x_{M} \\ \end{bmatrix} \\ &=& \begin{bmatrix} y_{1} \\ y_{2} \\ \vdots \\ y_{M} \\ \end{bmatrix} - \begin{bmatrix} x^T_{1}w \\ x^T_{2}w \\ \vdots \\ x^T_{M}w \\ \end{bmatrix} \\ &=& \begin{bmatrix} y_{1} \\ y_{2} \\ \vdots \\ y_{M} \\ \end{bmatrix} - \begin{bmatrix} x^T_{1} \\ x^T_{2} \\ \vdots \\ x^T_{M} \\ \end{bmatrix} w \\ &=& y - Xw \end{eqnarray} $$
$$ e = y - Xw $$
In [32]:
X <- matrix(c( 0.5269565 , -0.20986944,  0.1220742,
              -1.15556581,  0.39549901, -0.15123403,
               0.79691373, -1.29191833, -0.60267745,
               1.31466463, -1.46317185,  1.65153458),
            nrow=4, byrow=T)
X
0.5269565-0.2098694 0.1220742
-1.1555658 0.3954990-0.1512340
0.7969137-1.2919183-0.6026774
1.3146646-1.4631718 1.6515346
In [33]:
y <- c(1.11987247,   -0.74349084, -150.01488417,    3.64348898)
y
  1. 1.11987247
  2. -0.74349084
  3. -150.01488417
  4. 3.64348898
In [34]:
w <- (lsfit(X, y)$coefficients)[2:4]
In [35]:
e = y - X %*% w
e
-1.422694e-07
-1.422694e-07
-1.422694e-07
-1.422694e-07

잔차 제곱합

잔차의 크기는 잔차 벡터의 각 원소를 제곱한 후 더한 잔차 제곱합(RSS: Residual Sum of Squares)를 이용하여 구한다. 이 값은 $e^Te$로 간단하게 쓸 수 있으며 그 값은 다음과 같이 계산한다.

$$ e^Te = \sum_{i=1}^{N} (y_i - w^Tx_i)^2 = (y - Xw)^T (y - Xw) $$
In [36]:
drop(t(e) %*% e)
8.09623178823453e-14

이차 형식

벡터의 이차 형식(Quadratic Form) 이란 어떤 벡터의 각 원소에 대해 가능한 모든 쌍의 조합 $(x_i, x_j)$을 구한 다음 그 곱셈$x_ix_j$을 더한 것을 말한다. 이 때 각 쌍에 대해 서로 다른 가중치 $a_{i,j}$를 적용하여 $a_{i,j}x_ix_j$의 합을 구한다면 다음과 같이 $x^TAx$라는 간단한 식으로 쓸 수 있다.

$$ \begin{eqnarray} x^T A x &=& \begin{bmatrix} x_{1} & x_{2} & \cdots & x_{N} \end{bmatrix} \begin{bmatrix} a_{1,1} & a_{1,2} & \cdots & a_{1,N} \\ a_{2,1} & a_{2,2} & \cdots & a_{2,N} \\ \vdots & \vdots & \ddots & \vdots \\ a_{N,1} & a_{N,2} & \cdots & a_{N,N} \\ \end{bmatrix} \begin{bmatrix} x_{1} \\ x_{2} \\ \vdots \\ x_{N} \\ \end{bmatrix} \\ &=& \sum_{i=1}^{N} \sum_{j=1}^{N} a_{i,j} x_i x_j \end{eqnarray} $$

예를 들어 $ x = [1, 2, 3]^T $ 이고 A가 다음과 같다면

$$ A = \begin{pmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \\ \end{pmatrix} $$

R 에서 벡터의 이차 형식은 다음과 같이 계산한다.

In [37]:
x <- 1:3
x
  1. 1
  2. 2
  3. 3
In [38]:
A <- matrix(1:9, nrow=3, byrow=T)
A
123
456
789
In [39]:
drop(x %*% A %*% x)
228

질문/덧글

아직 질문이나 덧글이 없습니다. 첫번째 글을 남겨주세요!