반응형

Intro


안녕하세요, 오늘은 MLE(Maximum Likelihood Estimation) 에 대해서 정리하겠습니다.

MLE는 많은 머신 러닝, 특히 deep learning에서 자주 등장하는, 꼭 알아야할 개념 중 하나입니다.

Likelihood


Likelihood는 우리말로 가능도, 또는 우도라고 합니다.

영어 표현에 *"be likely to -" (- 할 것 같은)* 이라는 숙어가 있잖아요? 따라서 likelihood 또한 비슷한 느낌으로 *"~ 할 것 같은 정도"* 로 받아들일 수 있을 거 같습니다.

그리고 이는 통계학의 관점에서 풀어보면, 어떤 고정된 파라미터 $\theta$를 갖는 분포가 있을 때, 이 분포에서 특정 sample (또는 event) $x$가 발견(또는 수집)될 거 같은 정도로 할 수 있습니다.

수식으로 표현해보자면 아래와 같습니다.

한 개의 sample $x$에 대해서는 $p(x|\theta)$

$n$ 개의 sample set $X = {x_1, x_2, \dots, x_n}$에 대해서는 $\prod_{i=1}^n p(x_i|\theta)$

편의를 위해 둘 다 $P(X|\theta)$라고 하겠습니다.

여기서 우리가 관심을 가져야할 변수는 바로 $\theta$ 입니다. 이 $\theta$는 우리가 사용하는 모델이 gaussian distribution이라면 평균 $\mu$와 분산 $\sigma$가 될테고, deep learning 모델이라면 이 모델이 갖고있는 모든 파라미터가 될 것입니다.

Maximum Likelihood Estimation


Likelihood의 느낌을 어느정도 잡으셨다면 MLE는 말 그대로 likelihood를 최대화 해주는 파라미터 $\theta$를 예측하는 일입니다. 즉, $\theta$가 어떤 값을 가져야 발견(또는 수집) 된 sample (또는 event)들이 발생할 확률이 최대가 될까? 에 대한 답을 찾는 것입니다.

수식으로는 $\hat{\theta} = argmax P(X|\theta)$로 표현할 수 있습니다.

간단하게 동전 던지기로 예시를 들겠습니다.

동전은 앞면과 뒷면 단 두개의 값만 가질 수 있고, 여러 번 동전 던지기를 수행했을 때 각 동전 던지기의 결과를 x라고할 수 있습니다. 그리고 우리가 관심있어하는 파라미터 $\theta$는 이 문제의 경우 "앞면이 나올 확률" 1개 입니다.

그렇다면 이를 MLE관점에서 보자면 우리가 알고싶은 것은 $n$번의 동전 던지기를 수행해서 앞면이 $k$번, 뒷면이 $n-k$번 나왔을 때, 이 결과가 나올 확률을 최대로 만들어 주는 파라미터 $\theta$는 무엇인가? 입니다.

위 예시와 관련한 구체적인 설명은 이 글을 참고해주세요.

Why MLE?


MLE문제를 푸는 것은 deep learning 모델을 최적화하는 문제와 많이 유사합니다.

대표적인 지도학습 예시인 classification을 생각해보겠습니다.

파라미터 $\theta$를 갖는 모델 $f$가 있을 때, 우리는 이 모델에게 어떤 sample을 주고, 이 sample의 class는 무엇인지 에측하도록 합니다.

예측을 하는 모델의 파라미터는 sample을 받기 전에 이미 정해져 있고 (given $\theta$), sample이 주어졌을 때 이 sample의 class가 무엇인지 값을 내놓습니다 ($f(x|\theta)$).

그리고 sample의 실제 class와 비교해서 그 차이에 따라 $\theta$를 최적화해나가죠.

이러한 관점에서 보았을 때, MLE는 deep learning에서 많이 쓰이는 개념 중 하나인 것입니다.

마무리


오늘은 MLE, Maximum Likelihood Estimation에 대해서 알아봤습니다.

MLE의 개념을 아는 것 만으로는 부족하고, 여러 모델이나 논문을 학습하면서 MLE의 개념이 어떻게 녹아들어 있는지 확인하면 좋을 거 같습니다.

References


데이터 사이언스 스쿨
Dive into Deep Learning

반응형

'[Mathmatics]' 카테고리의 다른 글

[Statistics] 정규분포  (0) 2021.04.27
[Statistics] 포아송과 친구들  (0) 2021.04.27
[Statistics] 이산형 확률분포  (0) 2021.04.27
[Statistics] 상관관계와 공분산  (0) 2021.04.27
[Statistics] 평균, 분산, 표준편차  (0) 2021.04.27
반응형

Intro


정규분포는 종모양을 띄는 분포로, 가장 익숙한 개념입니다. 이번 글에서는 정규분포와 정규성 검정에 대해서 정리하겠습니다.

정규분포


정규분포 (normal distribution, gaussian distribution)는 평균($\mu$)과 표준편차($\sigma$)에 의해 모양이 결정되는 데이터 분포입니다.

따라서 확률 변수 $X$가 정규분포를 따르고 평균과 표준편차를 알 수 있으면, 각 $x$값이 발견될 확률을 아래의 식으로 구할 수 있습니다.

$$\frac{1}{\sqrt{2\pi\sigma}}e^{-\frac{(x-\mu)^2}{2\sigma^2}}$$

$\mu=0, \sigma=1$인 특수한 경우의 정규분포를 표준 정규분포라고 합니다.

표준 정규분포를 따르지 않는 정규분포와 다른 분포들도 분포를 이루는 각 값에서 평균을 빼고, 표준편차로 나눔으로써 $\mu=0, \sigma=1$인 상태로 변환할 수 있습니다.

이런 과정을 표준화(standardization)이라고 합니다.

이때 표준화된 분포의 각 값을 z-score라고 합니다.

$$z=\frac{x-\mu}{\sigma}$$

표준화는 분포의 모양을 바꾸지 않는 변환이기 때문에, 아래와 같은 목적으로 사용될 수 있습니다.

두 분포의 모양 비교
데이터 전처리 (scaling)
정규성 검정

정규성 검정


정규성 검정(normality test)은 주어진 분포가 정규분포를 따르는지 확인하기 위한 방법입니다. 이는 가설 검정 기법인 t-test, ANOVA가 검정하려는 데이터의 분포가 정규성을 갖는다는 가정하에 사용되기 때문에, 해당 방법들을 적용할 수 있는지 여부를 알기 위해서 사용됩니다.

정규성 검정을위한 첫번째 방법으로, Q-Qplot(Quantile-Quantile plot)이 있습니다. Q-Qplot은 두 분포가 얼마나 유사한지를 보여주는 일반적인 graphical method입니다.

이때 정규성검정을 하고자 하는 분포를 표준화한 뒤, 표준 정규분포와의 Q-Qplot을 그리면, 해당 분포가 정규분포를 갖는지 알 수 있습니다.

예시를 통해 확인해보겠습니다.

[code download]

# 표준정규분포의 Q-Q plot
std_normal = np.random.normal(loc=0, scale=1, size=20000) # 표준정규분포에서 데이터 샘플링, loc=평균, scale=편차

f, ax = plt.subplots(1,2, figsize=(10,5))
f.subplots_adjust(right=1)

sns.histplot(std_normal, ax=ax[0]) # 샘플링한 데이터의 분포
ax[0].set_title("Data distribution")
ax[0].set_xlabel("sample value")

stats.probplot(std_normal, dist="norm", plot=ax[1]) # Q-Q plot

plt.show()
f.savefig(f"{save_path}/qq_normal.png")

표준 정규분포에서 추출한 데이터의 분포와 그것의 Q-Qplot을 그리는 코드입니다. 결과는 아래와 같습니다.

2번째 그림의 빨간 선이 데이터가 완벽한 표준 정규분포를 가질 때의 값이고, 비교하고자 하는 분포의 데이터는 파란 점으로 표현되어 있습니다. 당연하게도 둘은 거의 일치하는 것을 알 수 있습니다.

이번에는 실제 세계의 데이터가 정규분포를 갖는지 확인해보겠습니다. [data download]

# AT&T회사의 일별 주가변동 정보의 Q-Qplot
sp500_px_df = pd.read_csv('data/sp500_data.csv') # S&P500에 있는 회사의 일별 주식 등락 정보
sp500_px_df.rename(columns={'Unnamed: 0': 'Dates'},inplace=True)

atnt = 'T'    # 회사 AT&T

times = list(range(300))
poisson = stats.poisson.pmf(times,mu=20)

f, ax = plt.subplots(1,2, figsize=(10,5))
f.subplots_adjust(right=1)

sns.histplot(sp500_px_df[atnt], ax=ax[0])
ax[0].set_title("Data distribution")
ax[0].set_xlabel("fluctuation")

stats.probplot(sp500_px_df[atnt], dist="norm", plot=ax[1])

plt.show()
f.savefig(f"{save_path}/qq_atnt.png")

위와 같이, 데이터가 중앙에 많이 몰려있고, 평균에서 멀어질수록 급격하게 데이터 수가 감소하는 분포를 Q-Qplot을 통해 보면, 양 끝에서 차이가 커짐을 알 수 있습니다. 따라서 이 데이터는 정규분포를 같는다고 보기 어렵겠네요.

정규성을 검정할 수 있는 다른 방법은 통계적 가설 검정을 이용한 방법이 있습니다.

이 방법은 우선 아래와 같이 가설을 설정합니다.

귀무가설(null hypothesis,$H_0$): *"주어진 데이터는 정규분포를 따른다"*

대립 가설(alternative hypothesis, $H_1$): *"주어진 데이터는 정규분포를 따르지 않는다"*

그다음 두 가설을 검정하기 위한 다양한 방법을 적용한 뒤, 검정 결과 p-value가 특정값보다 크면 귀무가설을 기각하지 않고 정규성을 갖는다고 보는 겁니다.

이런 통계적 가설 검정 방법은 여러 개가 있는데, 대표적으로 D'Agostino's K-squared test, Shapiro–Wilk test 등이 있습니다.

마무리


이번에는 정규분포와 정규성 검정에 대해서 정리해봤습니다!

이번 글을 쓰면서 matplotlib의 구조에 대해서 깊게 알게 되어 기쁘네요!

읽어주셔서 감사합니다~ 좋은 하루 보내세요!

 

References

선형대수와 통계학으로 배우는 머신러닝 with 파이썬

Wikipedia-Normality test

반응형
반응형

Intro


포아송 분포는 한 마디로 아래와 같습니다.

단위시간, 단위범위 당 사건 발생횟수 $\lambda$가 주어졌을 때, 주어진 시간 동안 사건이 $x$번 발생할 확률의 분포

  오늘은 포아송 분포와 관계가 깊은 연속형 확률분포인 감마분포, 지수분포에 대해서 정리하겠습니다.

감마 분포


감마분포감마함수에 기반해서 만들어진 분포로, 우선 감마함수 먼저 알아보겠습니다. 감마함수는 아래와 같이 생겼습니다.

$\Gamma(\alpha)=\int_{0}^{\infty}x^{\alpha-1}e^{-x}dx, \alpha>0$

 감마함수는 다음 몇가지 성질을 갖습니다.

$\Gamma(n)=(n-1)\Gamma(n-1)\ \rightarrow\ (n-1)(n-2)\dots(1)\Gamma(1)$

$\Gamma(n)=(n-1)!$

$\Gamma(1)=1$

$\Gamma(\frac{1}{2})=\sqrt{\pi}$

이러한 성질을 갖는 감마함수를 이용해서 만든 감마분포고, 감마분포의 확률밀도함수는 아래와 같습니다.

$$f(x;\alpha,\beta)=
\begin{cases}
\begin{split}
\frac{1}{\beta^\alpha \Gamma(\alpha)}x^{\alpha-1}e^{\frac{-x}{\beta}}&, x>0 \\\\
0,\qquad\qquad 그\ 외
\end{split}
\end{cases}$$

감마분포는 0보다 큰 $\alpha, \beta$를 모수로 갖습니다.

감마분포의 평균과 분산은 아래와 같습니다.

$$\mu=\alpha\beta\qquad\sigma^2=\alpha\beta^2$$

  이때, $\alpha$가 1일 때의 특수한 경우를 지수분포라고 합니다. 지수분포의 확률밀도함수와 평균, 분산은 아래와 같습니다.

$$f(x;\beta)=
\begin{cases}
        \begin{split}
            \frac{1}{\beta}e^{\frac{-x}{\beta}}, x>0 \\\\
            0,\qquad 그\ 외
        \end{split}
    \end{cases}$$
$$\mu=\beta\qquad\sigma^2=\beta^2$$

포아송 분포와 지수분포의 관계


여기까지 봤을 때는 이들이 포아송 분포와 무슨 상관이 있을까 싶을겁니다. 지수분포는 감마분포의 특수한 경우고, 특히 포아송 분포와 관련이 깊습니다.

  포아송 분포는 일정 시간, 공간에서 특정한 수의 사건이 발생할 확률을 계산하는데 사용되죠, 이때 확률변수는 사건발생 수입니다. 반면에, 지수분포는 사건 발생 수가 아닌 다음 사건이 일어날 때까지의 시간을 확률변수로 갖습니다. 이렇기 때문에 포아송 분포는 이산 확률분포, 지수분포는 연속형 확률분포인거죠!

  그러면 포아송 분포를 이용해서 지수분포를 유도해보겠습니다. $x$시간 내에 첫번째 사건이 발생할 확률을 계산해봅니다.

$x$시간 내에 첫번째 사건이 발생할 확률은, 1에서 $x$시간 내에 첫번째 사건이 발생하지 않을 확률을 빼는 것과 같습니다. 이는 $x$시간 동안 단 한번도 사건이 발생하지 않을 확률 $p(0;\lambda x)$과 같습니다.

포아송 분포에 의해

$$P(X>x)=p(0;\lambda x)=e^{-\lambda x},$$

우리가 구하고자 하는 확률은 아래와 같은 $X$의 누적분포함수가 됩니다.

$$P(0\leq X \leq x)=1-e^{-\lambda x}$$

연속형 확률변수의 누적분포함수를 미분하면 확률밀도함수가 되기 때문에, 이를 미분한 결과는 $\lambda=\frac{1}{\beta}$인 지수분포의 확률밀도함수와 같아집니다.

$$f(x)=\lambda e^{-\lambda x}$$

이렇게, 지수분포의 모수 $\beta$는 포아송 분포의 모수인 $\lambda$와 역수 관계임이 확인되었습니다. 그렇다면, 우리는 $\beta$를 평균사건발생간격으로 볼 수 있습니다. 비록 우리가 구한건 최조 사건 발생까지의 시간이지만, 단위시간 당 평균 사건 발생 수($\lambda$)는 시간에 관계없이 동일하기 때문에 이런 해석이 가능합니다.

지수분포와 감마분포의 관계


지수분포는 감마분포의$\alpha$가 1일 때의 특수한 경우고, 평균사건발생간격 $\beta$를 모수로 갖는 사건발생간격의 확률분포입니다.

 그렇다면 $\alpha$가 1보다 큰 경우인 감마분포는 무엇을 의미할까요? 감마분포는 평균사건발생간격이 $\beta$인 사건이 $\alpha$번 발생할 때까지의 시간의 확률분포입니다.

마무리


이번에는 포아송 분포와 관련이 깊은 지수분포, 감마분포에 대해서 알아봤습니다.

세 분포를 한 문장씩 정리하면 아래와 같습니다.

포아송 분포: 단위시간, 단위범위 당 사건 발생횟수 $\lambda$가 주어졌을 때, 주어진 시간 동안 포아송 사건이 $x$번 발생할 확률의 분포

지수분포: 평균사건발생간격 $\beta(=\frac{1}{\lambda})$가 주어졌을 때, 시간 $x$내에 포아송 사건이 발생할 확률의 분포

감마분포: 평균사건발생간격 $\beta$가 주어졌을 때, 시간 $x$내에 포아송 사건이 $\alpha$번 발생할 확률의 분포

감마분포에 사용된 감마함수는 카이제곱분포, 베타분포에도 사용됩니다. 특히, 카이제곱분포는 감마분포의 모수인 $\alpha, \beta$가 각각 $v/2, 2$일 때의 특수한 형태로, 통계적 추론에서 많이 쓰입니다.

나중에 기회가 되면 두 분포에 대해서도 정리하겠습니다.

글 읽어주셔서 감사합니다!

 

References

이공학도를 위한 확률 및 통계학 제9판

반응형
반응형

 

Intro


확률변수가 취할 수 있는 모든 값이 유한개로 셀 수 있을 때, 해당 확률변수로 이루어진 확률분포를 이산형 확률분포라고 합니다.

  오늘은 이산형 확률분포인 이산형 균일분포, 이항분포, 포아송 분포에 대해서 정리하겠습니다.

이산형 균일분포


확률변수가 취할 수 있는 모든 값이 나올 확률이 동일한 경우의 분포를 균일분포라고 합니다.

  확률변수가 취할 수 있는 값의 모든 경우의 수가 $k$이면, 각 값이 발견될 확률은 $\frac{1}{k}$이 됩니다. 주사위나 동전을 던졌을 때 각 값이 나오는 경우를 예로 들 수 있겠네요.

  이산형 균일분포의 평균과 분산은 아래와 같습니다.

$$\mu = \frac{1}{k}\sum_{i=1}^{k}x_i\qquad\sigma^2 = \frac{1}{k}\sum_{i=1}^{k}(x_i-\mu)^2$$

이항분포


한 번 시행할 때 마다 성공 혹은 실패, 1 또는 0의 값을 갖는 작업이 있다고 해보겠습니다. 이 작업은 동전 던지기, 수술 성공 여부, 사용자의 상품 구매 여부 등 여러가지 상황으로 볼 수 있습니다.

 각 시행은 독립이고, 매 시행의 성공확률이 동일한 상수일 때, 우리는 각 시행을 베르누이 시행(Beronoulli trial)이라고 하고, 이 시행을 반복하는 과정을 베르누이 과정(Bernoulli process)라고 합니다.

 $n$번의 베르누이 시행을 진행했을 때 성공 (또는 1) 횟수 $X$를 이항확률변수(binomial random variable)라고 합니다. 그리고 $X$의 확률분포를 이항분포(binomial distribution)라고 합니다.

 이항분포는 $b(x;n,p)$로 표현할 수 있는데요, 성공확률이 $p$인 베르누이 시행을 $n$번 했을 때, 성공 횟수 $x$의 확률분포(이항분포)를 의미합니다.

 $x$번 성공한다는 것은 곧 $n-x$번 실패한다는 뜻이고, 이는 $x$번 성공하고 $n-x$번 실패할 확률과 같습니다. 이때 성공과 실패의 순서는 상관이 없습니다. 따라서 이항분포의 각 $x$의 확률은 아래와 같이 구할 수 있습니다.

$$b(x;n,p)={n \choose x}p^xq^{n-x}$$

$${n \choose x}=\frac{n!}{x!(n-x)!},\ q=1-p$$

 이산형 균일분포의 평균과 분산은 아래와 같습니다.

$$\mu = np\qquad\sigma^2 = npq$$

음이항분포


이항분포에서는 성공확률이 $p$인 베르누이 시행을 $n$번 했을 때, 성공 횟수가 $x$번일 확률을 계산할 수 있었습니다.

 하지만 우리는 $\alpha$번째 성공이 $x$번째 시행에서 일어날 확률을 알고싶을 수 있습니다. 한화 이글스가 5번째 경기에서 2번째 승리를 할 확률 같은거죠.

 이런 종류의 실험을 음이항실험(negative binomial experiments)이라 합니다. 이때 $\alpha$번째 성공이 이루어질 때 까지의 시행 횟수 $x$를 음이항확률변수(negative binomial random variable), $x$의 확률분포가 음이항분포(negative binomial distribution)입니다.

 한화 이글스가 매 경기에서 승리할 확률이 $\frac{1}{5}$라고 가정했을 때, 5번의 경기중 2번 승리할 확률은 아래와 같습니다.

$$b(2;5,\frac{1}{5})={5 \choose 2}(\frac{1}{5})^2(\frac{4}{5})^3=0.2048$$

 하지만 5번째 경기에서 2번째 승리를 할 확류은 조금 다릅니다. 5번째 경기에서는 승리를 하고, 앞의 4경기에서는 아무때나 1번만 승리하면 됩니다.

따라서 모든 시행의 성공과 실패 순서를 고려하지 않은 이항분포와는 달리, 음이항분포에서는 $x$번째 성공을 제외한 이전의 $\alpha-1$번의 시행에 대해서만 순서를 고려하지 않습니다.

결과적으로 음이항분포는 아래와 같습니다.

$$b^*(x;\alpha,p)={x-1 \choose {\alpha-1}}p^{\alpha}q^{x-\alpha}$$

음이항분포를 이용해서 한화 이글스가 5번째 경기에서 2번째 승리를 할 확률을 계산해보면 아래와 같습니다.

$$b^*(5;2,\frac{1}{5})={4 \choose 1}(\frac{1}{5})^2(\frac{4}{5})^3=0.08192$$

 $\alpha$가 1인 특수한 경우를 기하분포(geometric distribution)라고 하는데요, 이는 첫 번째 성공이 발생할 때 까지의 시행횟수 $x$의 확률분포 입니다.

기하분포 $g$의 모양, 평균, 분산은 아래와 같습니다.

$$g(x;p)=b^*(x;1,p)=pq^{x-1}\qquad\mu=\frac{1}{p}\qquad\sigma^2=\frac{1-p}{p^2}$$

포아송 분포


포아송 실험(Poisson experiments)는 일정한 시간간격 동안 (또는 일정 범위 내에서) 발생하는 사건의 수를 나타내는 확률변수 $X$ 값을 산출하는 실험입니다. 주로 일정한 시간내에 관찰하고자 하는 사건이 몇 번 발생하는지를 모델링하는데 사용됩니다.

포아송 실험은 포아송 과정(Poisson process)로부터 유도되는데, 포아송 과정은 아래와 같은 성질을 갖고있습니다.

  1. Memoryless: 단위 시간이나 일정 영역에서 발생하는 결과의 수는 서로 겹치지 않는 다른 시간간격이나 영역에서 발생하는 수와 독립이다.
  2. 매우 짧은 시간간격이나 작은 영역에서 단 한 번의 결과가 일어날 확률은 시간간격의 길이나 영역의 크기에 비례하며, 그 시간간격이나 영역외부에서 발생하는 결과의 수와는 무관하다.
  3. 매우 짧은 시간간격이나 작은 영역에서 두 번 이상의 사건이 발생할 확률은 무시할 수 있다. (매우 작다)

  위의 성질을 갖는 사건을 포아송 사건이라고 합니다. 1번 성질 (Memoryless)을 이해하는 것이 중요합니다. 이해를 위해 예시를 들어볼게요.

 5분에 1번 정도 발생하는 사건이 있습니다(공정 불량, 웹 사이트 방문 등). 그리고 5분 동안 몇 번의 사건이 발생하는지 관찰을 시작해봅니다.

 만약 2분만에 놀랍게도 3번의 사건이 발생했다고 했을 때, 남은 3분 동안의 사건 발생 횟수는 어떻게 될까요?

 Memoryless 성질은 앞의 2분 동안 몇 번의 사건이 발생했든, 남은 3분 동안의 사건 발생에는 아무런 영향을 주지 않는다는 겁니다. 앞에서 10번이 발생하는 100번이 발생하든 남은 3분 동안의 사건 발생 횟수에는 아무런 영향이 없다는 말이죠.

 이러한 성질을 Menoryless, 즉 건망성이라고 합니다. 앞의 사건을 잊었다는 뜻이죠!

 포아송 실험에서 사건의 발행횟수 $X$를 포아송 확률변수(Poisson random variable), $X$의 확률분포를 포아송 분포(Poisson distribution)라고 합니다.

 단위시간 동안 $\lambda$번 발생하는 사건이 일정한 시간간격 $t$동안 발생하는 수 $x$를 나타내는 포아송 분포의 모양은 아래와 같습니다.

$$p(x;\lambda t)=\frac{e^{-\lambda t}(\lambda t)^x}{x!}$$

 놀라운 점은 포아송 분포의 평균과 분산이 모두 $\lambda t$라는 겁니다. 이런거 분포를 알아내신 수학자님들은 정말 대단한거 같아요...

 포아송 분포를 그려보면, 평균이 커질수록 종모양에 가까워진다는 점입니다. 즉, 실험 시간 $t$나 단위시간 당 평균 사건 발생 수 $\lambda$가 크면 정규분포와 가까워진다는 말이죠.

아래는 python의 scipy라이브러리를 활용해서 그린 평균 변화에 따른 포아송 분포입니다. 평균이 커질수록 종모양에 가까워지는 걸 확인할 수있습니다.

[code download]

포아송 분포와 이항분포의 관계


 마지막으로, 포아송 분포는 이항분포의 근사값을 구할 때도 활용할 수 있습니다. 포아송 과정의 3가지 성질을 고려했을 때, 포아송 분포는 성공 확률이 작은 베르누이 시행을 매우 많이 하는 것과 유사하다고 볼 수 있습니다.

따라서 $n$이 매우 크고, $p$가 0또는 1에 가까운 이항분포의 근사값은 $\mu=\lambda t=np$인 포아송 분포의 값으로 나타낼 수 있습니다. 식으로 정리하면 아래와 같습니다.

$$b(x;n,p)\ \xrightarrow{n\rightarrow\infty}\ p(x;np)$$

tmi: 이항분포의 $p$가 $\frac{1}{2}$에 가까울 때는 평균이 $np$, 분산이 $npq$인 정규분포를 통해 근사할 수 있습니다!

마무리


이번에는 대표적인 이산형 확률분포들의 의미와 성질에 대해서 알아봤습니다!

다음에는 포아송 분포와 관련이 깊은 지수분포, 감마분포에 대해서 알아보겠습니다!

감사합니다~ 좋은 하루 보내세요!

 

References

이공학도를 위한 확률 및 통계학 제9판

반응형

'[Mathmatics]' 카테고리의 다른 글

[Statistics] 정규분포  (0) 2021.04.27
[Statistics] 포아송과 친구들  (0) 2021.04.27
[Statistics] 상관관계와 공분산  (0) 2021.04.27
[Statistics] 평균, 분산, 표준편차  (0) 2021.04.27
[Linear algebra] SVD  (0) 2021.04.27
반응형

Intro


오늘은 두 변수 사이의 상관관계에 대해서 정리하겠습니다. 상관관계는 한 변수가 분할에 따른 다른 변수의 변화를 관찰해서, 두 변수가 함께 움직이면 양의 상관관계, 두 변수가 반대로 움직이면 음의 상관관계를 갖는다고 말합니다.

주의: 양/음의 상관관계는 두 변수의 "인과관계"를 의미하지 않습니다.

이전 글에서 아이스크림 가게의 매출을 예시로 변수의 평균과 분산, 표준편차에 대해서 알아봤는데요, 만약 아이스크림 가게 A의 다음날 매출을 예측하고 싶을 때, 아이스크림 가게의 매출에 영향을 주는 요소는 어떤게 있을까요?

날씨
계절
코로나 거리두기 단계
...

우리는 이런 다양한 요소들을 고려해서 매출을 예측할 수 있습니다.

이때 우리가 예측하고자 하는 아이스크림 가게 매출을 target(또는 목푯값), 이를 예측하기 위해 사용하는 요소를 feature(또는 예측값)이라고 합니다.

변수 사이의 상관관계는 한 변수의 값의 변화에 따른 다른 변수의 변화를 관찰할 수 있습니다. 이는 _(1) target과 feature_에 대해서 수행할 수도 있고, _(2) feature와 다른 feature_에 대해서 수행할 수 있습니다.

(1) target과 feature의 상관관계: 어떤 feature가 변하면 target은 어떻게 변하는지 알 수 있기 때문에, target을 예측하는데 도움이 되는 feature는 무엇인지 가늠할 수 있습니다.

(2) 서로 다른 두 feature의 상관관계: 만약 두 feature가 매우 강한 상관 관계를 갖는다면, 두 변수 중 하나만 알아도 다른 변수의 값을 알 수 있기 때문에 하나만 선택해서 사용해야 합니다.

공분산


공분산은 두 변수의 상관관계를 측정할 수 있는 지표입니다. 두 변수 $X, Y$의 공분산을 계산하는 방법은 아래와 같습니다.

$Cov(X, Y) = E\left[(X-\mu_X)(Y-\mu_Y)\right]$

직관적으로, 각 변수의 _평균을 기준으로 한 데이터의 상대적인 위치_가 서로 비슷할수록 높은 상관관계를 갖는다고 볼 수 있습니다. 공분산은 아래의 성질을 갖습니다.

(1) $Cov(X, X) = Var(X)$

(2) $Cov(X, Y) = Cov(Y, X) $

공분산을 구할 때에도, 평균이 활용되므로 자유도는 $n-1$이 됩니다.

상관계수


공분산을 통해 두 변수 사이의 상관관계는 알 수 있지만, 두 변수의 단위가 다르므로, 공분산 값의 크기로 상관관계의 정도를 파악할 순 없습니다. 따라서 이를 가늠할 수 있도록 공분산 값을 [-1, 1] 사이의 값으로 조정할 필요가 있습니다.

상관계수(a.k.a 피어슨 상관계수)는 공분산 값을 두 변수의 표준편차의 곱으로 나눠서 그 값을 [-1, 1] 범위로 조정합니다. 식으로 표현하면 아래와 같습니다.

$Corr(X, Y) = \frac {Cov(X, Y)}{\sigma_X\sigma_Y}$

주의: 서로 독립인 두 변수의 공분산과 상관계수는 0이지만, 역은 성립하지 않습니다.
왜냐하면 앞서 설명한 상관관계는 두 변수 사이의 선형 관계만을 나타내기 때문입니다. 즉, 일차식으로 표현할 수 있는 범위에서의 상관관계를 알 수 있는 겁니다.
독립은 한 변수의 변화가 다른 변수의 변화에 영향을 끼치지 않는 것을 의미하므로, 두 변수가 선형 관계뿐만 아니라 다항식, 지수, log관계 등 어떤 관계도 갖지 않는 것을 의미합니다.

Python coding


지금까지 정리한 내용을 간단한 python 코드로 확인해보겠습니다. Practical Statistics for Data Scientists이란 책에서 상관관계를 시각화해주는 R코드 예시를 보여주는데, python으로 다시 짜 보겠습니다.

[code download], [data download]

import numpy as np
import pandas as pd
import seaborn as sns

# AT&T와 버라이즌의 일별 주식가격 등락률 정보 로드
save_path = "./img/2021-02-23"

sp500_px_df = pd.read_csv('data/sp500_data.csv') # S&P500에 있는 회사의 일별 주식 등락 정보
sp500_px_df.rename(columns={'Unnamed: 0': 'Dates'},inplace=True)

atnt = 'T'    # AT&T 종목코드
verizon = 'VZ'# 버라이즌 종목코드
{% endhighlight %}

S&P500에 있는 AT&T와 버라이즌이라는 회사의 주가 등락률의 상관관계를 분석해보겠습니다. 유명한 기업들로 해보고 싶었는데, 상관계수가 작아서 시각화할 때 안 예뻐서 이 둘로 정했습니다!

# AT&T과 버라이즌의 공분산 계산
cov_av = np.cov(sp500_px_df[atnt], sp500_px_df[verizon])
print(cov_av)   ''' [[0.08390944 0.05784096]
                    [0.05784096 0.10472254]]'''

numpy의 cov() 함수를 사용하면 두 변수 사이의 공분산 행렬을 반환합니다.
(0, 0), (1, 1)은 각각 AT&T와 버라이즌의 분산을 의미하고, (0, 1), (1, 0)은 AT&T와 버라이즌의 공분산으로, 두 값은 같습니다.

Numpy를 이용해서 공분산을 계산할 때는 위의 수식과는 달리 자유도를 고려하지 않습니다. 자유도를 고려하기 위해서는 ddof변수를 1로 설정합니다.

# AT&T과 버라이즌의 상관계수 계산
corr_av = np.corrcoef(sp500_px_df[atnt], sp500_px_df[verizon])
print(corr_av)    '''[[1.     0.61703529]
                   [0.61703529 1.    ]]'''

`corrcoef()`함수를 사용하면 두 변수 사이의 상관계수 행렬을 반환합니다.<br>(0, 0), (1, 1)은 자신과의 상관계수 이므로 최대값인 1이고, (0, 1), (1, 0)은 AT&T와 버라이즌의 상관계수입니다. 두 회사는 꽤 높은 **양의 상관관계**를 갖는다고 볼 수 있습니다.

# scatterplot
ax = sns.scatterplot(data=sp500_px_df, x=atnt, y=verizon, color='r')
ax.axhline(0, color='grey', lw=1) # 수평선 추가
ax.axvline(0, color='grey', lw=1) # 수직선 추가
fig = ax.get_figure()
fig.savefig(f"{save_path}/scatter.png")

두 변수의 상관관계를 확인할 때 가장 많이 사용하는 scatterplot입니다. 한눈에 상관관계를 확인할 수 있습니다.

하지만 scatterplot은 데이터가 너무 많은 경우 점이 겹쳐 보이기 때문에, 겹쳐 보이는 부분의 밀도는 확인하기 어려운 한계가 있습니다.

# hexbinplot
ax = sns.jointplot(data=sp500_px_df, x=atnt, y=verizon, kind='hex', gridsize=30, color='r')
ax.savefig(f"{save_path}/hexbin.png")

# contourplot
ax = sns.jointplot(data=sp500_px_df, x=atnt, y=verizon, kind='kde', color='r')
ax.savefig(f"{save_path}/contour.png")

위 두 자료는 scatterplot의 한계를 보완합니다. x좌표, y좌표 말고도 color성분을 추가해서 데이터 밀집 지역도 확인할 수 있습니다.

마무리


이 글에서는 상관관계와 공분산에 대해서 정리해봤습니다. 상관관계는 다양한 예측 변수를 활용해서 목표 변수를 예측하고자 할 때, 반드시 확인해봐야 합니다.

게시글 하나 만드는데 시간이 오래 걸리네요,,, 다른 분들은 어떻게 하시는지 ㅎㅎ

다음에는 다양한 확률 분포들 중, 이산형 확률분포에 대해서 정리하겠습니다.

긴 글 읽어주셔서 감사합니다! 좋은 하루 보내세요 :)

References

Practical Statistics for Data Scientists

선형대수와 통계학으로 배우는 머신러닝 with 파이썬

반응형

'[Mathmatics]' 카테고리의 다른 글

[Statistics] 포아송과 친구들  (0) 2021.04.27
[Statistics] 이산형 확률분포  (0) 2021.04.27
[Statistics] 평균, 분산, 표준편차  (0) 2021.04.27
[Linear algebra] SVD  (0) 2021.04.27
[Linear algebra] 주요 개념 및 성질(2)  (0) 2021.04.27
반응형

Intro


첫 게시글의 주제는 통계학입니다. 통계학을 공부하는 이유는 아래와 같습니다.

알고싶은 사실을 "예측"하는데 필요한 정보를 주어진 데이터로부터 얻기 위해서

오늘은 가장 기본 정보인 평균, 분산, 공분산 에 대해서 정리하겠습니다.

오픈한 지 $n$일이 지난 아이스크림 가게의 하루 매출을 의미하는 변수 $X={x_1, x_2, ..., x_n}$가 있습니다. $x_i\ (i\in[1,n])$는 $i$번째 날의 아이스크림 가게 매출을 의미합니다.

평균


평균은 아이스크림 가게의 총 매출영업일로 나눈 값입니다. 평균을 알면 아이스크림 가게가 하루에 얼마 정도 벌었는지 알 수 있습니다.

평균은 보통 $\mu$ (뮤)라고 표현하고, 아래와 같은 방법으로 구할 수 있습니다.

$\mu = \frac{1}{n}\sum_{i=1}^{n}x_i$

분산


분산은 각 데이터들이 평균으로부터 얼마나 멀리 떨어져있는 지를 나타냅니다.

분산이 크면 아이스크림 가게의 매출이 들쭉날쭉하다는 걸 의미하고, 분산이 작으면 아이스크림 가게의 매출이 비교적 일정하다고 볼 수 있습니다.

분산은 보통 $\sigma^2$ (시그마)라고 표현하고, _각 데이터와 평균의 차이의 제곱 합의 평균_으로 구할 수 있습니다. 수식은 아래와 같습니다.

$\sigma^2 = \frac{1}{n-1}\sum_{i=1}^{n}(x_i-\mu)^2$

여기서 우리는 평균은 더한 값을 $n$으로 나누는 반면에, 분산은 $n-1$로 나누는 걸 볼 수 있습니다. 이때 $n-1$을 자유도(degree of freedom, dof)*라고 합니다.

표준편차


분산 $\sigma^2$의 양의 제곱근인 $\sigma$을 표준편차입니다. 분산은 크기에 단위가 없는 반면, 표준편차는 그 단위가 원래 데이터와 같아서 해석이 용이합니다.

Python coding


지금까지 정리한 내용을 간단한 python 코드로 확인해보겠습니다.

[code download]

import numpy as np

# 아이스크림 가게 A, B의 일주일 매출 (단위: 만원)
shopA_sales = np.array([47, 60, 51, 52, 58, 48, 55])
shopB_sales = np.array([31, 73, 56, 61, 44, 67, 39])

# 두 아이스크림 가게의 평균
mean_A = shopA_sales.mean()
mean_B = shopB_sales.mean()
print(mean_A) # 53.0
print(mean_B) # 53.0

두 아이스크림 가게의 평균 매출은 동일합니다.

# 두 아이스크림 가게의 분산
# FYI,numpy는 분산을 계산할 때 자유도를 고려하지 않습니다.
var_A = shopA_sales.var()
var_B = shopB_sales.var()

# 자유도 고려 X
print(var_A) # 20.571428571428573
print(var_B) # 204.28571428571428

# var()사용하지 않고 shopA_sales의 분산 계산하기
tmp_var_A = np.power(shopA_sales-mean_A, 2).sum()/ len(shopA_sales)
print(tmp_var_A)          # 20.571428571428573
print(var_A == tmp_var_A) # True


# 자유도 고려 O
print(shopA_sales.var(ddof=1)) # 24.0
print(shopB_sales.var(ddof=1)) # 238.33333333333334

Numpy를 이용해서 분산을 계산할 때는 자유도를 고려하지않습니다. 분산 계산시 자유도를 고려하기 위해서는 ddof변수를 1로 설정합니다.LINK

데이터의 수가 작기 때문에, 자유도의 고려 여부에 따라 꽤 많은 차이가 있음을 알 수 있습니다.

# 두 아이스크림 가게의 표준편차
std_A = shopA_sales.std()
std_B = shopB_sales.std()

print(std_A) # 4.535573676110727
print(std_B) # 14.292855358035156

# std()사용하지 않고 shopA_sales의 표준편차 계산하기
tmp_std_A = np.sqrt(np.power(shopA_sales-mean_A, 2).sum()/ len(shopA_sales))
print(tmp_std_A)                   # 4.535573676110727
print(std_A == tmp_std_A)          # True
print(std_A == np.sqrt(tmp_var_A)) # True

아이스크림 가게 A와 B의 매출 표준 편차를 반올림하면 각각 4.54만원, 14.29만원으로, 데이터의 단위와 일치합니다.

이로써 우리는 아이스크림 가게 B의 매출이 A보다 변동성이 크다고 볼 수 있습니다. 하지만, A가 B보다 장사가 잘된다고 볼 수 없습니다.

마무리


이 글에서는 평균, 분산, 표준편차를 정리해봤습니다. 이 세가지 통계량은 데이터의 특성을 나타내주는 좋은 지표이지만, 이상치(outlier)에 민감하게 반응하는 단점이 있습니다.

가끔은 이상치에 robust한 통계량을 확인하는 것도 필요하기 때문에, 평균대신 중앙값(median), 표준편차 대신 중위절대편차(MAD)를 사용하기도 합니다.

긴 글 읽어주셔서 감사합니다. 다음 글은 두 변수 사이의 상관관계에 대해서 다루겠습니다.

좋은 하루 보내세요 :)

* 자유도를 이해하기 위해서는 분산을 계산하기 위해선 평균을 알아야한다는 것에 집중할 필요가 있습니다. $\mu$를 알고있으면, 분산을 계산할 때 반드시 $x_1$부터 $x_n$까지 순서대로 계산되지 않더라도 마지막 순서의 변수 값을 알 수 있습니다.
즉, $n-1$개의 변수는 어느 값이든 가질 수 있지만 마지막 1개의 변수는 $\mu$에 의해서 특정되기 때문에, '자유로운' 변수의 개수는 $n-1$개 이므로 자유도는 $n-1$이 됩니다.
모집단의 분산을 표본의 분산을 통해 유추하기 위해서는 위와 같이 자유도를 고려하는 것이 바람직하다고 합니다.
최근 우리가 사용하는 데이터의 수는 매우 많기 때문에 자유도를 깊게 이해하고 넘어갈 필요는 없지만, Regression(회귀)을 학습할 때 주의해야하는 다중공선성(multicollinearity)을 이해하기 위해서는 어느정도 알고 있는게 좋을 거 같습니다.

References

Practical Statistics for Data Scientists

선형대수와 통계학으로 배우는 머신러닝 with 파이썬

반응형
반응형

Intro


지난글에서는 고윳값과 고유벡터, 고윳값분해(eigenvalue decomposition)까지 정리했는데요,

이번글에서는 고윳값분해의 조금 더 일반화된 형태인 SVD(Singular Value Decomposition)에 대해서 정리하겠습니다.

SVD


고윳값분해는 주로 대칭행렬의 직교대각화를 통해 수행했습니다. ($A = PDP^{-1}$)

SVD는 이런 분해를 $n \times p$ 행렬 ($p$차원 벡터 $n$개)에도 적용할 수 있는 일반화된 방법입니다.

$B=U\Sigma V^T$

$U: n \times n 직교행렬$

$\Sigma: n \times p 직사각 대각행렬$

$V: p \times p 직교행렬$

직사각 대각행렬은 왼쪽 위부터 최대 $min(n, p)$번째 대각성분 까지만 값이 있고, 나머지는 0인 행렬입니다.

앞에서 고윳값분해를 할 때 분해 대상 행렬이 대칭행렬이면 계산이 수월하다고 했습니다.

따라서 $n \times p$ 모양을 갖는 행렬 $B$를 분해하기 위해서 $BB^T,B^TB$를 활용합니다.

이들은 각각 $n \times n, p \times p$ 모양을 갖는 대칭행렬이 됩니다.

1. $B^TB$의 고윳값 $\lambda_1,\dots,\lambda_p$과 고유벡터를 구합니다.

이때, $\sigma_1=\sqrt{\lambda_1},\dots,\sigma_p=\sqrt{\lambda_p}$들을 $B$의 특이값(singular value)고 합니다.

이 특이값들을 $\Sigma$행렬의 대각성분으로 사용합니다. 이때, 구해지는 고윳값과 특이값들은 모두 0 이상의 값을 갖습니다.

또한, 각 고윳값에 대응하는 고유벡터들을 $B$의 right singular vector ($V$)로 사용합니다.

2. $BB^T$에 대해서도 고윳값과 고유벡터를 구합니다.

이때 각 고윳값에 대응하는 고유벡터들을 $B$의 left singular vector ($U$)로 사용합니다.

SVD의 활용: 추천 시스템


SVD가 활용되는 대표적인 분야는 추천 시스템입니다. 추천 시스템은 사용자의 취향에 어울리는 적절한 상품을 선택하는 문제입니다.

추천 시스템은 크게 사용자와 상품사이의 feedback정보를 사용하는 Collaborative Filtering(CF),

사용자와 상품의 콘텐츠 정보를 활용하는 Content-Based Filtering(CB) 방법이 있습니다.

SVD는 그 중 CF방법에 속합니다.

SVD를 이용해서 분해할 행렬은 rating matrix ($R$)라고 하는, 사용자와 상품 사이의 평점 정보를 기록한 행렬입니다.

행의 수는 사용자의 수, 열의 수는 상품의 수와 같고, 사용자 $u$가 상품 $v$를 구매했을 때, rating matrix $R$의 $(u,v)$칸에는 사용자가 상품에 부여한 평점이 기록되어있습니다. 평점이 없는 칸은 비어있습니다.

SVD를 이용한 추천은 $R$을 SVD를 통해 $U\Sigma V^T$로 분해한 뒤, $U\Sigma (=\hat{U})$를 사용자의 latent vector, $\Sigma V^T (=\hat{V}^T)$을 상품의 latent vector로 사용합니다.

이때, $\Sigma$의 모든 대각원소를 사용하지 않고, $d(<=min(n,p))$개의 대각원소만 사용합니다. 이에 따라 $U, V$도 $d$개 만큼의 고유벡터만 사용하죠. 이때 적절한 $d$를 선택하는 것도 중요합니다.

$\hat{U}$은 $n \times d$으로, $n$명의 고객이 각각 $d$차원 벡터로 표현됐다고 볼 수 있습니다. $\hat{V}$도 마찬가지로 $p$개의 상품이 $d$차원 벡터로 표현됐다고 볼 수 있습니다.

$\hat{U}$과 $\hat{V}$를 행렬 곱하면 우리는 원래 rating matrix $R$을 근사한 $\hat{R}$을 얻게 되고, 비어져있던 값들이 채워지게 됩니다.

우리는 채워진 값을 통해 각 사용자가 상품에게 부여할 예측 평점을 알 수 있게 되고, 이 점수가 높은 상품을 추천하게 됩니다.

하지만 실제로는 SVD보다는 ALS가 더 많이 사용됩니다. ALS는 병렬 연산을 통해 더 빠르게 사용자, 상품의 latent vector를 학습할 수 있는 장점이 있습니다.

마무리


이 글에서는 SVD에 대해서 정리했습니다.

읽어주셔서 감사합니다!

References

선형대수와 통계학으로 배우는 머신러닝 with 파이썬

다크 프로그래머님 블로그

삶은 달걀님 블로그

반응형
반응형

Intro


지난글에서는 벡터와 행렬의 성질과 연산에 대해서 정리했습니다. 이번 글에서는 머신 러닝에서 가장 자주 쓰이는 개념인 교유값과 고유벡터에 대해서 정리하겠습니다.

선형변환


행렬은 입력으로 들어온 벡터를 다른 형태의 벡터로 변환할 수 있는 선형함수로 사용될 수 있습니다. 이렇게 선형함수에 의한 변환을 선형변환이라고 합니다.

예를들어 $\vec{x}$는 행렬 $A$에 의해서 $\vec{y}$로 변형될 수 있습니다.

$\vec{x}=(1,2) , A=\begin{pmatrix} 2&4\\3&5\\0&1\end{pmatrix}$

$A\vec{x}^\top=\vec{y}=(10,13,2)^\top$

이처럼 벡터는 행렬에 의해서 차원이 바뀌기도 하고, 회전하거나 확대, 축소되기도 합니다.

고윳값과 고유벡터


그런데 여기 특별한 경우가 있습니다. 행렬로 변환이 된 이후에도 본인의 방향을 그대로 유지하는 벡터가 있습니다.

$n\times n$ 정방행렬 $A$와 길이 $n$벡터 $\vec{x}$로 수식을 표현하면 아래와 같습니다.

$A\vec{x}=\lambda \vec{x}$

이를 만족하는 $\vec{x}$를 고유벡터, 그리고 이 벡터가 변환 후 확장된 배수 $\lambda$를 고윳값이라고 합니다.

즉 어떤 행렬에 의해 선형변환이 되어도 그 방향이 바뀌지 않고 크기만 바뀌는 벡터와 그 크기의 값이 쌍으로 있는겁니다.

우리가 알아야 할 점은, 고유벡터는 여러 개 존재할 수 있지만, 고윳값은 항상 $n$개 존재한다는 겂니다. (0이거나 중복될 수 있지만)

이는 위의 식을 행렬식 $det(A-\lambda E)=0$ 로 풀면 알 수 있는데요, 행렬식이 $\lambda$의 $n$차 방정식으로 나오기 때문에 $n$개의 고윳값이 있을 수 있는 겂니다.

고유벡터는 서로 방향만 같으면 같은 고윳값을 갖기 때문에 여러개 존재할 수 있는 거고요.

또한, 실수로만 이뤄진 행렬의 경우, 0이 아닌 고윳값의 개수는 해당 행렬의 rank와 같습니다.

닮음변환


고윳값과 고유벡터는 numpy.linalg라이브러리를 통해 쉽게 구할 수 있습니다.

그렇다면 이렇게 구한 고윳값과 고유벡터를 갖고 무엇을 할 수 있을까요?

이를 알기 전에 먼저 알아야 하는 개념이 닮음변환입니다.

우리는 두 행렬이 같다는 것은 각 위치에 대응하는 성분의 값이 모두 일치하는 것임을 압니다.

그렇다면 두 행렬이 _닮았다_는 것은 무엇일까요? 아마 같지는 않지만 많은 공통된 성질을 갖고 있을 겁니다.

선형대에서는 아래의 관계를 갖는 행렬 $A, B$가 서로 닮음 관계라고 합니다.

invertible matrix $P$가 있을 때,

$P^{-1}AP = B$

이때 $P$가 역행렬이 있다는 말은 $A, B, P$가 모두 정방행렬이라는 뜻이기도 합니다.

사실상 $B$는 $P$가 무엇이냐에 따라 정해지는 거고, $P$가 역행렬만 있으면 $A$와 $B$는 아래의 성질을 갖는 닮음 관계가 되는겁니다.

$A = PBP^{-1}$

$B^n = P^{-1}A^nP$

$det(A) = det(B)$

$tr(A)=tr(B)$

$tr$은 trace의 약자로, 주 대각성분의 합을 의미합니다. trace 역시 몇가지 재밌는 성질이 있습니다.

$tr(AB) = tr(BA) \ne tr(A)tr(B)$

$tr(ABC)=tr(BCA)=tr(CAB)\ne tr(ACB)=tr(CBA)=tr(BAC)$

직교대각화


앞에서 닮음관계인 두 행렬은 $P^{-1}AP = B$의 관계를 만족한다고 했습니다. 두 행렬의 닮음 역시 $P, B$가 어떤 형태이냐에 따라서 특별한 경우가 있습니다.

1. $P$의 형/열별 벡터들이 서로 수직인 직교행렬일 때, $B$는 $A$에 직교닮음(orthogonal similar)이라고 합니다.

2. $B$가 대각행렬일 때, $A$를 $B$로 변환하는 것을 대각화(diagonalization)라고 합니다.

신기하게도, $P$를 $A$의 고유벡터들로 이루어진 벡터를 사용했을 때, 그 결과는 주대각성분을 $A$의 고윳값으로 갖는 대각행렬이 됩니다.

대각행렬의 각 대각 성분은 고윳값이므로, 대각행렬의 행렬식은 고윳값의 곱이고, trace는 고윳값의 합입니다.

따라서 우리는 변환된 대각행렬을 이용해서 손쉽게 $A$의 행렬식, trace 등을 계산할 수 있게 됩니다. 다만 $P$의 역행렬을 계산해야 하죠

3. $P$가 직교행렬이고, $B$가 대각행렬일 때, $A$를 $B$로 변환하는 것을 직교 대각화(orthogonal diagonalization)라고하고, $A$를 직교대각화 가능(orthogonally diagonalizable)라고 합니다.

직교대각화가 가능한 경우는 언제일까요? 이 질문에 대한 대답은 아래 정리로 대신하겠습니다.

Spectral Theorem: 실수로 이루어진 $n \times n$ 행렬 $A$가 대칭행렬이면, 직교 대각화 가능 이고, 이는 반대로도 성립한다.

또한, 직교대각화가 가능한 행렬 (실수인 대칭행렬)은 항상 $n$개의 실수인 고윳값을 갖고(중복 가능), 고유벡터들은 서로 orthogonal 합니다.

고윳값 분해


제가 앞서 설명드리지 않은 대칭행렬의 특징이 하나 더 있습니다. 그것은 대칭행렬의 고유벡터들은 서로 수직이다.입니다.

제가 이를 말씀드리는 이유는, 대칭형렬 $A$를 직교 대각화 하기위한 직교행렬 $P$를 $A$의 고유벡터의 집합으로 사용했을 때,

직교 대각화의 결과는 주대각 성분의 값으로 자신의 고윳값을 갖는 대각행렬이 됩니다!

따라서 $A$는 아래 식과 같이 고유벡터로 이루어진 직교행렬과 고윳값을 대각성분으로 갖는 대각행렬의 조합으로 분해가 가능해집니다.

$P^{-1}AP = B \rightarrow A=PBP^{-1}=PBP^T$

이를 고윳값 분해(eigenvalue decomposition)라고 합니다. $P$는 직교행렬이므로 $P^{-1}=P^T$이기 때문에 역행렬 계산없이 수행할 수 있습니다.

고윳값 분해는 이후 대표적인 차원 축소 기법인 PCA(Principal Component Analysis)을 이해하기 위한 핵심개념입니다.

마무리


이 글에서는 선형대 수학의 고유벡터, 고유 값 그리고 고윳값 분해까지 정리했습니다.

다음에는 고윳값분해의 일반화된 형태인 SVD에 대해서 정리하겠습니다.

읽어주셔서 감사합니다!

References

선형대수와 통계학으로 배우는 머신러닝 with 파이썬

다크 프로그래머님 블로그

삶은 달걀님 블로그

반응형
반응형

Intro


오늘은 선형대수학의 주요 개념 및 성질을 정리하겠습니다.

선형대수학은 선형인 함수가 갖는 성질에 대한 학문입니다. 함수가 선형이라는 것은 아래 조건을 만족하는 것입니다.

$$f(kp) = kf(p)$$

$$f(p+q) = f(p) + f(q)$$

$f$가 선형 함수라면, $f$가 뭔지 몰라도 $f(1)$을 알면 $f(10)$을 알 수 있고$\left(10\times f(1)\right)$, $f(2)$와 $f(3)$을 알면 $f(5)$를 알 수 있습니다$\left(f(2)+f(3)\right)$.

이번 글에서는 벡터, 행렬의 연산 및 역행렬에 대해서 알아보겠습니다.

벡터 공간과 기저


벡터 공간: 어떤 벡터 집합 $Q$가 있을 때, 집합 내의 벡터들로 만들 수 있는 공간

기저(basis): 벡터 공간을 구성하는 서로 선형 독립인 벡터들

부분 공간(subspace): 공간의 일부분 (차원이 더 낮을 수 있음)

span: 부분 공간 $W$를 구성하는 기저 벡터 집합 $S$가 있을 때, $W=span(S)$ 라고 표현

차원(dimension): 기저 벡터의 수, 즉, 공간을 구성하는 최소한의 백터 개수, 행공간의 차원과 열공간의 차원음 같음

랭크(rank): 열벡터에 의해 span된 벡터 공간의 차원

벡터의 연산


벡터는 어떤 공간의 원소입니다. 점이라고 생각할 수 있습니다. 1차원 공간에서의 점은 하나의 값을 갖는 스칼라(scala)이고, 2차원 이상의 공간상 점을 벡터라고 합니다.

벡터는 공간의 차원 수에 따라 길이가 달라지는데, 점의 위치를 표현하기 위해서는 공간의 차원수 만큼의 값이 필요합니다.

2차원 공간상의 점 a의 x좌표는 1, y좌표는 2라고 할 때, 이를 벡터로 표현하면 $\vec{a}=(1,2)$로 표현할 수 있고, 각 값을 성분이라고 합니다.

벡터는 스칼라, 벡터, 행렬과 연산할 수 있습니다.

벡터와 스칼라의 연산은 아래와 같이 이루어 집니다.

임의의 실수 $k, l$와 길이가 같은 벡터 $\vec{a}, \vec{b}$가 있으면

(1) $1 \times\vec{a}=\vec{a}\times 1=\vec{a}$

(2) $(-1)\vec{a}=-\vec{a}$

(3) $k(\vec{a}+\vec{b})=k\vec{a}+k\vec{b}$

(4) $(k+l)\vec{a}=k\vec{a}+l\vec{a}$

(5) $(k1)\vec{a}=k(l\vec{a})$

즉, 벡터와 스칼라의 연산에 대해서는 교환법칙(1), 분배법칙(3, 4), 결합법칙(5)이 성립함을 알 수 있습니다.

또한, 벡터와 벡터의 연산은 아래와 같이 이루어 집니다.

길이가 같은 벡터 $\vec{a},\vec{b},\vec{c},\vec{0}$가 있을 때 ($\vec{0}$은 모든 성분이 0)

(1) $\vec{a}+\vec{b}=\vec{b}+\vec{a}$

(2) $(\vec{a}+\vec{b})+\vec{c}=\vec{a}+(\vec{b}+\vec{c})$

(3) $\vec{a}+\vec{0}=\vec{0}+\vec{a}=\vec{a}$

(4) $\vec{a}+(-\vec{a})=(-\vec{a})+\vec{a}=\vec{0}$

즉, 벡터와 벡터의 연산 또한 교환법칙(1), 결합법칙(2)이 성립함을 알 수 있습니다.

내적


내적 (inner product, dot product) 길이가 같은 두 벡터 사이의 연산 중 하나 입니다. 두 벡터의 원소곱의 합으로 계산할 수 있고, 스칼라 값을 결과로 갖습니다.

길이가 $k$인 두 벡터 $\vec{u}, \vec{v}$의 $i$번째 성분을 각각 $u_i, v_i$라고 할 때, $\vec{u}, \vec{v}$의 내적은 아래와 같이 표현할 수 있습니다.

$\vec{u} \cdot \vec{v}=\sum_{i=1}^{k}u_i v_i$

벡터의 내적에 대해서는 아래와 같은 성질이 있습니다.

길이가 같은 벡터 $\vec{u},\vec{v},\vec{w}$가 있을 때

$\vec{u} \cdot \vec{v}=\vec{v} \cdot \vec{u}$

$\vec{u} \cdot (\vec{v}+\vec{w})=\vec{u} \cdot \vec{v}+\vec{u} \cdot \vec{w}$

$(k\vec{u}) \cdot \vec{v}=k(\vec{u} \cdot \vec{v})$

$\vec{u} \cdot \vec{v}=|\vec{u}| |\vec{v}| cos\theta$

4번째 성질에서, $|\vec{v}|$은 $\vec{v}$의 norm입니다.

식에서도 알 수 있듯이, 두 벡터가 이루는 값이 직각이면 내적 값은 0인 걸 알 수 있습니다.

반대로 내적 값이 0이면 두 벡터는 서로 직각이거나, 둘 중 하나가 영벡터 입니다.

또한 기하학적으로 내적의 의미를 생각해보면, 두 벡터 $\vec{u},\vec{v}$의 내적은

$\vec{u}$를 $\vec{v}$에 정사영시킨 값 ($\vec{v}cos\theta$)과 $\vec{v}$의 크기의 곱, 또는

$\vec{v}$를 $\vec{u}$에 정사영시킨 값 ($\vec{v}cos\theta$)과 $\vec{u}$의 크기의 곱을 의미합니다.

$\vec{u} \cdot \vec{v}=|\vec{u}| (|\vec{v}| cos\theta) = |\vec{v}| (|\vec{u}| cos\theta)=\vec{v} \cdot \vec{u}$

행렬의 연산


행렬(matrix)은 같은 공간 상에 있는 벡터의 집합이라고 볼 수 있습니다. 길이가 $m$인 벡터 $n$개는 $m\times n$ 또는 $n\times m$모양을 갖는 행렬로 표현할 수 있습니다.

이때 순서는 행렬의 원소인 벡터를 행벡터로 사용할 지, 열벡터로 사용할 지에 달려있습니다.

저는 행렬의 각 벡터를 행벡터로 취급해서 $m\times n$모양을 갖게 하겠습니다.

행렬의 덧셈, 뺄셈, 스칼라 곱은 벡터와 같은 방식으로 계산 가능한 반면, 행렬의 곱은 교환법칙이 성립하지 않는 차이점이 있습니다.

이는 간단한 $2\times 3$ 행렬 2개로 직접 계산해 보시면, 연산 순서에 따라 결과의 모양이 달라짐을 확인할 수 있습니다 (모양이 같아도 순서에 따라 값은 달라집니다).

행렬의 곱의 성질은 아래와 같습니다.

모양이 같은 행렬 $A,B,C$와 상수 $k$가 있을 때

$AB \ne BA$

$A(BC) = (AB)C$

$A(B+C)=AB+AC$

$k(AB) = (kA)B=A(kB)$

$(A+B)^2 = A^2+AB+BA+B^2 \ne A^2+2AB+B^2$

이와 같이, 행렬의 곱셉은 교환법칙은 성립하지 않지만, 결합법칙과 분배법칙은 성립합니다.

특수한? 행렬들


행렬은 모양과 특징에 따라 여러 종류가 있는데요, 아래에 대표적인 경우와 특징을 정리해보겠습니다

1. 정방행렬(square matrix)

행의 크기와 열의 크기가 같은 행렬입니다.

2. 대각행렬(diagonal matrix)

주대각성분 (왼쪽 위 부터 오른쪽 아래까지)을 제외한 모든 성분이 0인 정방행렬입니다.

나중에 정리하겠지만, 특정 조건에서 대각행렬이 아닌 정방행렬 $A$를 대각행렬 $D$로 변환할 수 있는데, 이 경우 행렬의 연산이 간단해지는 장점이 있습니다.

또한, 대각행렬의 _행렬식_은 모든 주대각성분의 곱과 같습니다.

3. 단위행렬(identity matrix)

주대각성분이 모두 1이고, 나머지 성분들은 모두 0인 대각행렬입니다. 당연히 정방행렬이죠.

단위행렬은 같은 모양인 모든 행렬에 대한 항등원입니다.

4. 전치행렬(transpose matrix)

행렬 $A$의 성분을 주대각성분을 기준으로 대칭했을 때 (열과 행을 바꿀 때) 나온 결과 $B$를 $A$의 전치행렬이라고, $A^T$로 표현할 수 있습니다.

행렬 $A$와 $A^T$는 몇가지 성질이 있습니다.

$AA^T$는 대칭행렬이다.

$det(A) = det(A^T)$

$(AB)^T=B^TA^T$

5. 대칭행렬(symmetric matrix)

주대각성분을 기준으로 행렬을 반으로 접었을 때, 만나게 되는 위치에 있는 두 성분의 값이 같은 정방행렬입니다. 즉, $A=A^T$인 행렬입니다.

위에서 대각행렬을 설명할 때, $A$를 $D$로 변환하기 위한 조건 중 하나가 바로 "$A$는 대칭행렬이다." 입니다.

대표적인 대칭행렬로는 여러 변수간의 상관관계를 표현한 공분산행렬이 있습니다.

6. 직교행렬(orthogonal matrix)

직교행렬이란 행렬을 구성하는 _각 행 또는 열 벡터의 크기가 1이고, 서로 수직인 벡터(orthonormal)_로 이루어진 정방행렬을 얘기합니다. 아래와 같은 성질이 있습니다.

1. $AA^T=A^TA=I$

2. $A^T=A^{-1}$

3. $det(A)=1 or -1$

또한, $A^T, A^{-1}$ 또한 직교 행렬이 됩니다.

행렬식


행렬식 (determinant)는 정방행렬의 특성을 하나의 숫자로 표현하는 방법입니다. 어떻게 구하는지 보다는, 어떤 성질이 있는지 파악하는게 중요합니다.

행렬식은 모든 정방행렬에 대해서 유일하게 존재하고, 주어진 정방행렬이 역행렬(행렬곱셈의 역원)이 존재하는지 판별하기 위해 쓰일 수 있습니다.

만약 어떤 정방행렬의 행렬식이 0이라면, 그 행렬은 역행렬이 없다는 뜻이고, 이는 반대로도 성립합니다.

또한 행렬식은 다음과 같은 기하학적 의미를 갖습니다.

좌표 공간에 있는 어떤 도형을 행렬 $A$로 일차변환 시킬 때, 변환 후의 도형의 넓이는 변환 전의 넓이에 $det(A)$의 절대값을 곱한 것과 같다.

행렬의 곱셈의 항등원인 단위행렬의 행렬식이 항상 1인 것도 이와 같은 이치라고 볼 수 있을 거 같습니다.

행렬식은 다음 몇가지 성질을 갖습니다.

1. $det(A^T)=det(A)$

2. $det(AB)=det(A)det(B)$

3. $det(A^{-1})=\frac{1}{det(A)}$

4. $det(AB)=det(BA)$

5. $det(A)\ne 0, det(B) \ne 0, det(P)=det(Q)=0$이면, $det(AB)\ne 0, det(AP)=det(AQ)=det(BP)=det(BQ)=0$이다.

6. 행렬 $A$가 삼각행렬 (대각행렬 포함)이면 $det(A)$는 $A$의 대각 원소의 곱이다.

7. 행렬 $A$의 적어도 한 행 또는 열의 모든 원소가 0이면, $det(A)$는 0이다.

8. $n\times n$행렬 $A$의 고유값이 ${\lambda}_1, {\lambda}_2, ..., {\lambda}_n$ 이면, $det(A)=\prod_{i=1}^{n}{\lambda}_i$이다.

9. 직교행렬의 행렬식은 1 또는 -1이다.

3, 4, 5번 규칙은 2번 규칙에 의해서 유도가 가능합니다. 7번 규칙에 의해 영행렬의 행렬식도 0이 됨을 알 수 있습니다.

역행렬


역행렬 (inverse matrix, non-singular matrix)는 정사각행렬 $A$에 대해서 $AB=I$를 만족하는 행렬 $B(=A^{-1})$입니다.

행렬식이 0인 행렬은 역행렬이 존재하지 않습니다. 또한, 정사각행렬이 아닌 행렬도 역행렬이 존재하지 않습니다.

또한, 대부분의 임의의 값으로 채워진 행렬은 대부분 역행렬을 갖습니다. 역행렬이 없는 경우가 적다는 뜻이지요

$n\times n$이고 역행렬이 존재하는 행렬 (invertible matrix) $A$는 다음 몇가지 성질을 갖습니다.

1. $AA^{-1}=A^{-1}A=I$ (교환법칙 성립)

2. $A^T$ 또한 invertible 하다.

3. $(A^T)^{-1}=(A^{-1})^{T}$

4. $(AB)^{-1}=B^{-1}A^{-1}$

5. $(A^{-1})^{-1}=A$

6. $Ax=0$을 만족하는 $x$는 0뿐이다.

7. $A$의 열(행)들은 linearly independent하다. 즉, 한 열(행)을 나머지 열(행)들의 선형 조합으로 만들 수 없다.

마무리


이 글에서는 선형대 수학의 벡터와 행렬에 대해서 정리해봤습니다. 다음 글에서는 고유벡터, 고윳값에 대해서 정리하겠습니다.

읽어주셔서 감사합니다!

References

선형대수와 통계학으로 배우는 머신러닝 with 파이썬

다크 프로그래머님 블로그

삶은 달걀님 블로그

반응형

+ Recent posts