(2-5) 표본분포 / 추정, 검정, 교차엔트로피

Yongjoo Lee·2020년 12월 11일
0
post-thumbnail

표본분포

우선 표본 조사의 필요성과 표본 추출 방법에 대해서 배워보자.

  • 통계적 추론

    • 표본조사를 통해 모집단에 대한 해석을 진행
    • 전수조사는 실질적으로 불가능한 경우가 많음
  • 표본조사는 반드시 오차가 발생!

  • 따라서 적절한 표본 추출 방법 필요

👉표본과 모집단과의 관게를 이해해야 함!

📌표본 추출 방법

  • 단순랜덤추출법(random sampling)

  • 난수표 사용

  • 랜덤 넘버 생성기 사용

    import random
    [random.randint(1,100) for i in range(10)]
    # [48, 27, 90, 32, 73, 25, 41, 1, 34, 79]

표본분포

표본 평균의 분포

모수 (parameter) : 표본조사를 통해 파악하고자 하는 정보

  • 모수의 종류
    • 모평균, 모분산, 모비율 등
    • 모수를 추정하기 위해 표본을 선택하여 표본 평균이나 표본 분산 등을 계산

통계량 (statistic) : 표본 평균이나 표본 분산과 같은 표본의 특성값

예시) 50만명의 전국 고등학교 1학년 학생의 키를 조사하기 위해 1000명을 표본 조사한다.

  • 표본의 평균을 계산
  • 표본의 평균은 표본의 선택에 따라 달라질 수 있음

👉 따라서 표본평균은 확률변수이다!

(표본 평균이 가질 수 있는 값도 하나의 확률분포를 가지며,
이 분포가 무엇인지가 표본을 해석하는데 있어서 매우 중요!)

표본분포 (sampling distribution) : 통계량의 확률분포

표본평균 : 모평균을 알아내는데 쓰이는 통계량

  • 표본평균의 분포
    • x1,x2,...,xnx_1, x_2, ..., x_n
    • 평균: μ\mu, 분산: σ2\sigma^2정규모집단에서 추출된 표본의 측정값
  • 표본평균
    • xˉ=1ni=1nxi\bar x = \frac{1}{n}\sum^n_{i=1}x_i
Xˉ~N(μ,σ2n)\bar X \text{\textasciitilde} N \Large\begin{pmatrix}\mu, \frac{\sigma^2}{n}\end{pmatrix}

📌

  1. 표본평균 Xˉ\bar X 는 정규분포를 따른다.
  2. 평균이 모집단에서의 평균(모평균)과 같다.
  3. nn의 크기가 커질수록 분산이 작아진다. (Xˉ\bar X가 평균에 가까워지는 값을 가지게 됨)

예시 # 1

μ=0,σ=1\mu = 0, \sigma = 1

n=10n = 10

Var(Xˉ)=σ2n=110Var(\bar X) = {\Large\frac{\sigma ^2}{n}} = \Large{\frac{1}{10}}

import numpy as np
xbars = [np.mean(np.random.normal(size=10)) for i in range(10000)]
print("mean %f, var %f" %(np.mean(xbars), np.var(xbars)))
# mean 0.000327, var 0.098432

예시 # 2

μ=10,σ=3\mu = 10, \sigma = 3

n=10n = 10

loc : μ\mu, scale : σ\sigma

import numpy as np
import matplotlib.pyplot as plt

xbars = [np.mean(np.random.normal(loc=10, scale=3, size=10)) for i in range(10000)]
print("mean %f, var %f" %(np.mean(xbars), np.var(xbars)))
# mean 9.983974, var 0.894774
h = plt.hist(xbars, range=(5, 15), bins=30)
plt.show()

![https://velog.velcdn.com/images%2Fleeyongjoo%2Fpost%2F5cd6b396-f2de-446a-93de-272a5b44ce97%2FFigure_1.png%5D(https%3A%2F%2Fimages.velog.io%2Fimages%2Fleeyongjoo%2Fpost%2F5cd6b396-f2de-446a-93de-272a5b44ce97%2FFigure_1.png)

모집단이 정규분포를 따르지 않는 경우가 있다.

그런 경우에는 평균 계산을 하면 어떻게 할까?

👇

중심극한정리

  • 중심극한정리(central limit theorem)
    • x1,x2,...,xnx_1, x_2, ..., x_n
    • 평균: μ\mu, 분산: σ2\sigma^2정규모집단에서 추출된 표본의 측정값
  • 표본평균
    • xˉ=1ni=1nxi\bar x = \frac{1}{n}\sum^n_{i=1}x_i
    • nn충분히 큰 경우 (n30n ≥ 30), 근사적으로 다음과 같음.
Xˉ~N(μ,σ2n)\bar X \text{\textasciitilde} N \Large\begin{pmatrix}\mu, \frac{\sigma^2}{n}\end{pmatrix}

예시 # 1 균일분포

균일분포((uniform distibution) = 연속형 확률분포)에서는

  • 기대값(평균) E(X)=5E(X) = 5
  • 분산 Var(X)=(100)212=8.3Var(X) = \frac{(10-0)^2}{12} = 8.3
import numpy as np
import matplotlib.pyplot as plt

n = 3
xbars = [np.mean(np.random.rand(n) * 10) for i in range(10000)]
print("mean %f, var %f" %(np.mean(xbars), np.var(xbars)))
# mean 4.991303, var 2.749337
plt.hist(xbars, range=(0,10), bins=100)
plt.show()

👉 nn이 커질수록 정규분포에 가까워짐

예시 # 2 지수분포

지수분포(exponential distribution)에서는

  • λ=13\lambda = \frac{1}{3}
  • 기대값(평균) E(X)=1λ=3E(X) = \frac{1}{\lambda} = 3
  • 분산 Var(X)=1λ2=9Var(X) = \frac{1}{\lambda^2} = 9
import numpy as np
import matplotlib.pyplot as plt

n = 2
xbars = [np.mean(np.random.exponential(scale=3, size=n)) for i in range(10000)]
print("mean %f, var %f" %(np.mean(xbars), np.var(xbars)))
# mean 3.009160, var 4.410992
plt.hist(xbars, range=(0,10), bins=100)
plt.show()

👉 nn이 커질수록 정규분포에 가까워짐

🔥

  • 여러가지의 표본분포 중 표본평균의 분포만 살펴보았다.
  • 표본평균에서 표본을 어떻게 추출하냐에 따라서 값이 달라진다. → 확률변수
  • 표본평균의 분포는 정규분포를 따른다.
    • 모집단이 정규분포일 경우에는 nn 의 크기에 상관없이 정규분포를 따른다.
    • 모집단이 정규분포가 아닐 경우 nn3030 이상이면
      중심극한정리에 따라서 정규분포를 따르게 된다.

추정

  • 모평균(모집단에서의 평균)의 추정
  • 모비율(모집단에서의 비율)의 추정

모평균의 추정

📌 표본평균의 특성

  • 모집단이 정규분포인 경우
    • 표본평균(sample mean) 사용
    • Xˉ=X1+X2++Xnn=i=1nxin\bar X = {\Large\frac{X_1+X_2+\cdots+X_n}{n}}={\Large\frac{\sum^n_{i=1}x_i}{n}}
    • Xˉ\bar X 는 모평균 μ\mu 의 추정에 사용되는 통계량
  • 대표본(30이상)인 경우
    • 중심극한정리에 의해 표본평균이 정규분포를 따른다고 가정함

점추정

  • 표본평균이 점 추정값(추정량) 이 됨

    import numpy as np
    samples = [9, 4, 0, 8, 1, 3, 7, 8, 4, 2] #random 값들
    print(np.mean(samples))
    # 4.6

👉 단순히 평균을 구하여 모평균을 추정함

( 정확하게 모평균이 되는 것은 아니지만, 10개라는 제한적인 정보에서는 확률이 가장 높은 추정값이다 )

💡

  • 점추정만으로는 모평균이라고 추정하기에는 확실하지 않다.
  • 따라서 구간추정을 이용!

구간추정

  • 모평균의 구간을 추정
  • 모평균 μ\mu100(1α)%100(1-\alpha)\% 신뢰구간 (confidence interval)
    • (μ\mu 의 추정량) ±za2\pm z_{\frac{a}2} (추정량(표본평균)의 표준편차)

![https://velog.velcdn.com/images%2Fleeyongjoo%2Fpost%2F9d20d52c-de8c-4a36-89e5-f9572de01026%2F%EA%B7%B8%EB%A6%BC1.png%5D(https%3A%2F%2Fimages.velog.io%2Fimages%2Fleeyongjoo%2Fpost%2F9d20d52c-de8c-4a36-89e5-f9572de01026%2F%EA%B7%B8%EB%A6%BC1.png)

  • 표본평균을 이용하여 구간을 제시하고, 그 구간을 신뢰구간이라고 함.
    (95%의 신뢰구간이라고 하면, 100번정도 실행했을 때 95번은 구간안에 들어갈 것이라고 보장함을 뜻함.)
  • 정규분포에서 표준편차 σ\sigma 를 알 때,
(xˉza2σa,xˉ+za2σa)\Large\begin{pmatrix}\bar x - z_{\frac{a}2}\frac{\sigma}{\sqrt a},\hspace{1em} \bar x + z_{\frac{a}2}\frac{\sigma}{\sqrt a} \end{pmatrix}

👉 구간안에 모평균이 존재할 것이라고 추정함

🔥

  • but, 실용적이지 못함 → 보통은 정규분포가 아니거나 표준편차가 알려져 있지 않음.
  • 표본의 크기가 클 때 중심극한정리 사용
    • (μ\mu 의 추정량) ±za/2\pm z_{a/2} (추정량(표본평균)의 표준편차)
(xˉza2sa,xˉ+za2sa)\Large\begin{pmatrix}\bar x - z_{\frac{a}{2}}\frac{s}{\sqrt a},\hspace{1em} \bar x + z_{\frac{a}2}\frac{s}{\sqrt a} \end{pmatrix}

*s : 표본표준편차

예시 # 1

어떤 학교의 고1 남학생의 평균키를 추정하기 위해 36명을 표본으로 추출하여
그 표본평균과 표본표준편차를 계산하여 그 결과가 다음과 같다.

xˉ=173.6,s=3.6\bar x = 173.6, s = 3.6

평균키에 대한 95% 신뢰구간 (confidence interval)을 구하시오.

  • α=0.05\alpha = 0.05
  • zα/2=z0.025=1.96\large z_{\alpha/2} = z_{0.025} = 1.96
  • zα/2sa=1.96×3.636=1.96×3.66=1.176\large z_{\alpha/2}\frac{s}{\sqrt a} = 1.96 \times \frac{3.6}{\sqrt 36} = 1.96 \times \frac{3.6}{6} = 1.176
  • 95% 신뢰구간
    • (173.6 - 1.176, 173.6 + 1.176) = (172.4, 174.8)

예시 # 2

어떤 농장에서 생산된 계란 30개의 표본을 뽑았더니 그 무게가 다음과 같다.

w = [10,7, 11.7, 9.8, 11.4, 10.8, 9.9, 10.1, 8.8, 12.2, 11.0, 11.3, 11.1, 10.3, 10.0, 9.9,
11.1, 11.7, 11.5, 9.1, 10.3, 8.6, 12.1, 10.0, 13.0, 9.2, 9.8, 9.3, 9.4, 9.6, 9.2]

계란의 평균 무게에 대한 95% 신뢰구간 (confidence interval)을 구하시오.

w = [10.7, 11.7, 9.8, 11.4, 10.8, 9.9, 10.1, 8.8, 12.2, 11.0, 11.3, 11.1, 10.3, 10.0, 9.9, 11.1, 11.7, 11.5, 9.1, 10.3, 8.6, 12.1, 10.0, 13.0, 9.2, 9.8, 9.3, 9.4, 9.6, 9.2]

import numpy as np
xbar = np.mean(w)
sd = np.std(w, ddof=1)
print("평균 %.2f, 표준편차: %.2f" % (xbar, sd))
# 평균 10.43, 표준편차: 1.11

import scipy.stats
alpha = 0.05
zalpha = scipy.stats.norm.ppf(1 - alpha/2)
print("zalpha:", zalpha)
# zalpha: 1.959963984540054
  • α=0.05\alpha = 0.05
  • zα2=z0.025=1.96\large z_{\frac{\alpha}2} = z_{0.025} = 1.96
  • Xˉ=10.43,s=1.11\bar X = 10.43, s = 1.11
  • zα2sa=1.96×1.1130=0.397\large z_{\frac{\alpha}2}\frac{s}{\sqrt a} = 1.96 \times \frac{1.11}{\sqrt {30}} = 0.397
  • 95% 신뢰구간
    • (10.43 - 0.397, 10.43 + 0.397) = (10.033, 10.827)

모비율의 추정

표본비율을 이용하여 모비율 추정

점추정

  • 확률변수 XX: nn개의 표본에서 특정 속성을 갖는 표본의 개수
  • 모비율 pp의 점추정량
p^=Xn\hat{p} = \frac{X}{n}

예시 #

대학교 1학년생의 흡연율을 조사하기 위해 150명을 랜덤하게 선택하여 흡연여부를 조사하였다.
이 중 48명이 흡연을 하고 있었다. 이 대학교 1학년생의 흡연율의 평균을 점추정하시오.

  • n=150,X=48n = 150, X = 48
  • p^=Xn=48150=0.32\hat p = \frac{X}{n} = \frac{48}{150} = 0.32
  • 평균흡연율은 32%로 추정됨.

구간추정

  • nn 이 충분히 클 때,

    • np^>5,n(1p^)>5n\hat p > 5, n(1-\hat p) > 5일 때를 의미
    • X~N(np,np(1p))X\text{\textasciitilde}N(np, np(1-p))
  • 확률변수 XX의 표준화

    • Z=Xnpnp^(1p^)=p^pp^(1p^)nZ = {\Large\frac{X-np}{\sqrt {n\hat p (1-\hat p)}}} = {\Large\frac{\hat p - p}{\sqrt \frac{\hat p(1-\hat p)}{n}}}
    • 근사적으로 표준정규분포 N(0,1)를 따름
  • P(Zzα2)=1αP(|Z| ≤ z_{\frac{\alpha}2}) = 1 - \alpha

  • 모비율 pp100(1α)%100(1-\alpha)\% 신뢰구간

(p^zα2p^(1p^)n,p^+zα2p^(1p^)n)\begin{pmatrix}{\Large \hat p - z_{\frac{\alpha}{2}}{\sqrt \frac{\hat p(1-\hat p)}{n}}},{\Large \hat p + z_{\frac{\alpha}{2}}{\sqrt \frac{\hat p(1-\hat p)}{n}}}\end{pmatrix}

예시 #

대학교 1학년생의 흡연율을 조사하기 위해 150명을 랜덤하게 선택하여
흡연여부를 조사하였다. 이 중 48명이 흡연을 하고 있었다.

흡연율 pp의 95% 신뢰구간 (confidence interval)을 구하시오.

  • α=0.05,zα2=z0.025=1.96,p^=0.32\alpha = 0.05, z\frac{\alpha}{2} = z_{0.025}=1.96, \hat p = 0.32
  • p^(1p^)n=(0.32)(0.68)150=0.038\sqrt \frac{\hat p(1-\hat p)}{n} = \sqrt \frac{(0.32)(0.68)}{150} = 0.038
  • (0.321.96×0.038,0.32+1.96×0.038)=(0.245,0.395)(0.32 - 1.96 \times 0.038, 0.32 + 1.96 \times 0.038) = (0.245, 0.395)
import numpy as np
import scipy.stats
x = 48
n = 150
phat = x / n
alpha = 0.05
zalpha = scipy.stats.norm.ppf(1 - alpha/2)
sd = np.sqrt(phat * (1-phat)/n)
print("phat %.3f, zalpha: %.3f, sd: %.3f" % (phat, zalpha, sd))
# phat 0.320, zalpha: 1.960, sd: 0.038

ci = [phat - zalpha * sd, phat + zalpha * sd]
print(ci)
# [0.24534963990338954, 0.3946503600966105]

검정

  • 통계적 가설검정
  • 모평균의 검정

통계적 가설검정

가설검정이란?

어떤 고등학교의 1학년 학생들의 평균키가 170.5cm으로 알려져 있었다.
올해 새로 들어온 1학년 학생들 중 30명을 랜덤하게 선택하여 키를 잰 후
평균을 계산했더니 171.3cm이었다.

그렇다면, 올해 신입생은 평균키가 170.5cm보다 더 크다고 할 수 있는가?

👉 이런 주장을 검증하는 것이 가설검정

  • (표본평균 Xˉ\bar Xμ0\mu_0 보다 얼마나 커야 모평균 μ\muμ0\mu_0 보다 크다고 할 수 있을 것인가?)

💡 표본평균은 표본의 선택에 의해 달라짐에 주의!

검정 원리

  • 귀무가설 : 새로운 주장이 없었던 일이 됨
    • H0:μ=μ0H_0 : \mu = \mu_0 (새로운 평균(표본평균)은 기존 평균과 같다)
  • 대립가설 : 새로운 주장이 맞음
    • H1:μ>μ0(orμ<μ0)H_1 : \mu > \mu_0 \hspace{0.5em} (or \hspace{0.5em}\mu < \mu_0)
  • 귀무가설을 기각하기 위해서는 Xˉ\bar X 가 조금 큰 값이 나와야 함(그리고 그 확률이 낮아야 함)
    • 귀무가설이 참이라는 가정하에, 랜덤하게 선택한 표본에서 지금의 Xˉ\bar X가 나올 확률을 계산할 필요
    • 이 확률이 낮다면 귀무가설이 참이 아니라고 판단
      (위의 예시에서 171.3cm가 나올 확률이 낮다면 귀무가설은 기각!)

🔥 귀무가설 기각 == 새로운 주장이 맞다!

  • 확률이 낮다는 기준점 필요
    • 유의수준 α\alpha 도입
    • P(Xˉk)αP(\bar X ≥ k) ≤ \alpha 가 되는 kk를 찾아야 함
  • 표준정규확률변수로 변환 ⇒ 검정통계량이라고 함
    • Z=Xˉμs/n~N(0,1)Z = {\Large\frac{\bar X-\mu}{s/\sqrt n} \text{\textasciitilde}} N(0,1)
    • P(Zzα)=αP(Z ≥ z_\alpha) = \alpha
  • 따라서 Xˉ\bar XZZ 로 변환한 후 ZZ 값이 zαz_\alpha 보다 큰지를 검토
    • 크다면 귀무가설 기각
    • 그렇지 않다면 귀무가설 채택

검정 절차

  1. H0,H1H_0, H_1 설정
  2. 유의수준 α\alpha 설정
  3. 검정통계량 계산
  4. 기각역 또는 임계값 계산
  5. 주어진 데이터로부터 유의성 판정

모평균의 검정

모평균의 검정 방법

  • 대립가설
  • 검정통계량
  • 기각역

대립가설

문제에서 검정하고자 하는 것이 무엇인지 파악 필요

  • 대립가설 H1H_1 채택을 위한 통계적 증거 확보 필요
  • 증거가 없으면 귀무가설 H0H_0 채택
    • H1:μ>μ0H_1 : \mu > \mu_0
    • H1:μ<μ0H_1 : \mu < \mu_0
    • H1:μμ0H_1 : \mu \not = \mu_0

예시 #

  • 어떤 농장에서 생상되는 계란의 평균 무게는 10.5그램으로 알려져 있다.
    • 새로운 사료를 도입한 후에 생산된 계란 30개의 표본평균을 계산했더니 11.4그램이 나왔다.
      새로운 사료가 평균적으로 더 무거운 계란을 생산한다고 할 수 있는가?
      - H0:μ=10.5H_0 : \mu = 10.5
      - H1:μ>10.5H_1 : \mu > 10.5
    • 새로운 사료를 도입한 후에 생산된 계란 30개의 표본평균을 계산했더니 9.4그램이 나왔다.
      새로운 사료가 평균적으로 더 가벼운 계란을 생산한다고 할 수 있는가?
      - H0:μ=10.5H_0 : \mu = 10.5
      - H1:μ<10.5H_1 : \mu < 10.5
  • 어떤 농장에서 자신들이 생산하는 계란의 평균 무게가 10.5그램이라고 광고하고 있다.
    • 이에 생산된 계란 30개의 표본 평균을 계산했더니 9.4그램이 나왔다.
      이 농장의 광고가 맞다고 할 수 있나?
      - H0:μ=10.5H_0 : \mu = 10.5
      - H1:μ10.5H_1 : \mu \not = 10.5

😃 유의수준 α\alpha 를 0.05로 설정하고 다음 절차 진행

검정통계량

  • n30n ≥ 30인 경우
    • 중심극한정리 사용
    • Z=Xˉμs/n~N(0,1)Z = {\Large\frac{\bar X-\mu}{s/\sqrt n} \text{\textasciitilde}} N(0,1)
  • 모집단이 정규 모집단이고, 모표준편차 σ\sigma 가 주어진 경우
    • Z=Xˉμσ/n~N(0,1)Z = {\Large\frac{\bar X-\mu}{\sigma/\sqrt n} \text{\textasciitilde}} N(0,1)
  • 기타의 경우는 생략

기각역

  • H0:μ=10.5H_0 : \mu = 10.5
  • 유의수준 : α\alpha
  • 기각역
    • H1:μ>10.5Z>zαH_1 : \mu > 10.5 ≥ Z > z_\alpha
    • H1:μ>10.5Z<zαH_1 : \mu > 10.5 ≥ Z < -z_\alpha
    • H1:μ>10.5Z>zα2H_1 : \mu > 10.5 ≥ |Z| > z_\frac{\alpha}{2}
μZ>zα2\mu ≥ |Z| > z_\frac{\alpha}{2}

![https://velog.velcdn.com/images%2Fleeyongjoo%2Fpost%2F2f33bc18-f12c-4160-904c-9c64dd82fbd5%2Fimage.png%5D(https%3A%2F%2Fimages.velog.io%2Fimages%2Fleeyongjoo%2Fpost%2F2f33bc18-f12c-4160-904c-9c64dd82fbd5%2Fimage.png)

예제 # 검정

어떤 농장에서 자신들이 생산하는 계란의 평균 무게가 10.5그램이라고 홍보하고 있다.
이에 생산된 계란 30개의 표본을 뽑았더니 그 무게가 다음과 같다.

w = [10.7, 11.7, 9.8, 11.4, 10.8, 9.9, 10.1, 8.8, 12.2, 11.0, 11.3, 11.1, 10.3, 10.0, 9.9, 11.1, 11.7, 11.5, 9.1, 10.3, 8.6, 12.1, 10.0, 13.0, 9.2, 9.8, 9.3, 9.4, 9.6, 9.2]

이 농장의 홍보가 맞는지 유의수준 5%로 검정하시오.

  1. H0:μ=10.5,H1:μ10.5H_0 : \mu = 10.5 , H_1 : \mu \not = 10.5

  2. 유의수준 α=0.05\alpha = 0.05

  3. 검정통계량

    • Xˉ=10.43,s=1.11\bar X = 10.43, s = 1.11
    • Z=Xˉμs/n=10.4310.51.11/30=0.345Z = {\Large\frac{\bar X-\mu}{s/\sqrt n}} = {\Large\frac{10.43 - 10.5}{1.11/\sqrt {30}}} = -0.345
  4. 기각역

    • zα2=z0.025=1.96z_\frac{\alpha}{2} = z_0.025 = 1.96
  5. 유의성 판정

    • μZ>zα2\mu ≥ |Z| > z_\frac{\alpha}{2}
    10.50.3451.9610.5 ≥|-0.345| \not > 1.96

👉 귀무가설을 기각할 수 없다.

import numpy as np
w = [10.7, 11.7, 9.8, 11.4, 10.8, 9.9, 10.1, 8.8, 12.2, 11.0, 11.3, 11.1, 10.3, 10.0, 9.9, 11.1, 11.7, 11.5, 9.1, 10.3, 8.6, 12.1, 10.0, 13.0, 9.2, 9.8, 9.3, 9.4, 9.6, 9.2]
mu = 10.5
xbar = np.mean(w)
sd = np.std(w, ddof=1)
print("평균: %.2f, 표준편차: %.2f" %(xbar, sd))
# 평균: 10.43, 표준편차: 1.11

z = (xbar-mu)/(sd/np.sqrt(len(w)))
print("검정통계량:", z)
# 검정통계량: -0.34544881283443796

import scipy.stats
alpha = 0.05
cri = scipy.stats.norm.ppf(1- alpha/2)
print("임계값:", cri)
# 임계값: 1.959963984540054

📌 w의 모든 데이터에서 0.5 만큼 뺀다음 다시 진행해보기

import numpy as np
w = [10.2, 11.2, 9.3, 10.9, 10.3, 9.4, 9.6, 8.3, 11.7, 10.5, 10.8, 10.6, 9.8, 9.5, 9.4, 10.6, 11.2, 11.0, 8.6, 9.8, 8.1, 11.6, 9.5, 12.5, 8.7, 9.3, 8.8, 8.9, 9.1, 8.7]
mu = 10.5
xbar = np.mean(w)
sd = np.std(w, ddof=1)
print("평균: %.2f, 표준편차: %.2f" %(xbar, sd))
# 평균: 9.93, 표준편차: 1.11

z = (xbar-mu)/(sd/np.sqrt(len(w)))
print("검정통계량:", z)
# 검정통계량: -2.8129403330804132

import scipy.stats
alpha = 0.05
cri = scipy.stats.norm.ppf(1- alpha/2)
print("임계값:", cri)
# 임계값: 1.959963984540054
  • 평균: 9.93, 표준편차: 1.11
  • 검정통계량: -2.8129403330804132
  • 임계값: 1.959963984540054

👉 이 경우에는 귀무가설 기각

교차엔트로피

  • 엔트로피
  • 교차엔트로피

엔트로피

자기정보 (Self-information)

  • 자기정보 : i(A)i(A)

    i(A)=logb(1P(A))=logbP(A)i(A) = {\large log_b(\frac{1}{P(A)})} = {\large -log_bP(A)}
    • AA : 사건
    • 정보의 단위 → 보통 22를 많이 사용
      • b=2b = 2 : bits
      • b=eb = e : nats
      • b=10b = 10 : hartleys

💡 확률이 낮은 사건이 정보가 많다!

(도둑이 들었는데 개가 짖는 경우보다
도둑이 들었는데 개가 짖지 않는 경우가 더 많은 정보를 포함하고 있음.)

  • 두 사건 A, B 가 동시에 일어났을 때의 자기정보 : i(AB)i(AB)

    i(AB)=logb(1P(A)(B))=logb(1P(A))+logb(1P(B))=i(A)+i(B)i(AB)=log_b(\frac{1}{P(A)(B)})=log_b(\frac{1}{P(A)})+log_b(\frac{1}{P(B)}) = i(A)+i(B)

    ⇒ 각각의 자기정보를 합친 것과 같다.

예시 #

동전을 던졌을 때 앞면이 나올 확률 H(Head), 뒷면이 나올 확률 T(Tail)

P(H)=18,P(T)=78P(H) = \frac{1}{8}, P(T) = \frac{7}{8}이면

자기정보는 i(H)=3비트,i(T)=0.193비트i(H) = 3비트, i(T)=0.193비트 로 표현한다

🔥 어떠한 사건에 대해서 그 사건이 발생할 확률을 가지고 정보의 량을 표현!

엔트로피 (entropy)

자기 정보의 평균 (Average of Self-information)

H(X)=jP(Aj)  i(Aj)=jP(Aj)  log2P(Aj)H(X) = \textstyle\sum _j P(A_j)\;i(Aj) = -\textstyle\sum_j P(A_j)\;log_2P(A_j)

사건의 수를 KK라고 할 때,

0H(X)log2K0≤H(X)≤log_2K
  • 엔트로피는 평균비트수를 표현
  • 데이터 압축에 사용 가능

예시 # 데이터 압축에 사용

  • 문자 A, B, C, D를 표현한다고 할 때,
    44 가지 정보를 표현하는 데 필요한 비트수 → 일반적으로 22 비트가 필요하다.

  • 하지만, 다음의 확률분포(A가 나올 확률이 1/2, B가 나올 확률이 1/4, ...)에서
    i(X)i(X)를 활용하는 경우 평균비트수는
    - 1×12+2×14+3×18+3×18=148=74=1.75비트1\times \frac{1}{2}+2\times \frac{1}{4}+3\times \frac{1}{8}+3\times \frac{1}{8}=\frac{14}{8}=\frac{7}{4}=1.75비트

    ![https://velog.velcdn.com/images%2Fleeyongjoo%2Fpost%2F68acf36c-ed95-42d9-8dbc-fd978bca012e%2Fimage.png%5D(https%3A%2F%2Fimages.velog.io%2Fimages%2Fleeyongjoo%2Fpost%2F68acf36c-ed95-42d9-8dbc-fd978bca012e%2Fimage.png)
    
    *확률분포: 각각의 사건에 확률을 대입한 것

👉 엔트로피는 데이터를 표현하는 데에 필요한 평균비트수를 의미한다!

교차엔트로피

📌 확률분포 P와 Q

  • 사건의 집합 S={Aj}S =\{{A_j}\}
    • P(Aj)P(A_j) : 확률분포 PP에서 사건 AjA_j가 발생할 확률
    • Q(Aj)Q(A_j) : 확률분포 QQ에서 사건 AjA_j가 발생할 확률
    • i(Aj)i(A_j) : 확률분포 QQ에서 사건 AjA_j의 자기정보
      (여러 사건에 대한 확률분포 중에서, 일단 확률분포 QQ에 따라서 정의해보기로 함!)
      - i(Aj)=log2Q(Aj)i(A_j)=-log_2Q(A_j)
      - 자기정보는 AjA_j를 표현하는 비트수

💡 잘못된 확률분포 QQ를 사용하게 되면, 실제 최적의 비트수를 사용하지 못하게 됨!

교차엔트로피

집합 SS 상에서 확률분포 PP에 대한 확률분포 QQ의 교차 엔트로피

확률분포 PP 에서 i(Aj)i(A_j) 의 평균

(🔥 자기정보 i(Aj)i(A_j) 는 확률분포 QQPP 상에서 실제로 나타남을 의미)

H(P,Q)=jP(Aj)  i(Aj)=jP(Aj)  log2Q(Aj)  =xXP(x)  log2Q(x)H(P,Q)=\textstyle\sum_jP(A_j)\;i(A_j)=-\textstyle\sum_jP(A_j)\;log_2Q(A_j)\\\;\\=-\textstyle\sum_{x\in X}P(x)\;log_2Q(x)

이 값은 정확한 확률분포 P를 사용했을 때의 비트수보다 크게 됨.

H(P,Q)=xXP(x)  log2Q(x)xXP(x)  log2P(x)=H(P)H(P,Q)=-\textstyle\sum_{x\in X}P(x)\;log_2Q(x)≥-\textstyle\sum_{x\in X}P(x)\;log_2P(x)=H(P)

👉 이 값은 P와 Q가 얼마나 비슷한지를 표현

  • 같으면 H(P,Q)=H(P)H(P, Q) = H(P)
  • 다르면 H(P,Q)>H(P)H(P, Q) > H(P)

예시 #

![https://velog.velcdn.com/images%2Fleeyongjoo%2Fpost%2F83198e72-060f-48f3-a931-ee01fd1d1ae1%2Fimage.png%5D(https%3A%2F%2Fimages.velog.io%2Fimages%2Fleeyongjoo%2Fpost%2F83198e72-060f-48f3-a931-ee01fd1d1ae1%2Fimage.png)

  • Q(X)Q(X)를 임의로 가정하고 코드 부여
    • 평균비트수
      • 3×12+3×14+2×18+1×18=218=2.625비트3\times \frac{1}{2}+3\times \frac{1}{4}+2\times \frac{1}{8}+1\times \frac{1}{8}=\frac{21}{8}=2.625비트
      • 약 1.5배나 많은 비트가 필요

🔥 교차엔트로피를 이용하면 두 확률분포 PPQQ가 얼마나 비슷한 지를 알 수 있다!

손실함수

  • 분류 문제

    • 주어진 대상이 A인지 아닌지를 판단
    • 주어진 대상이 A, B, C, ... 중 어느 것인지를 판단
  • 기계학습에서는 주어진 대상이 각 그룹에 속할 확률을 제공

    • 만약 [0.8,0.2][0.8, 0.2] ( A일 확률이 0.8, 아닐 확률이 0.2 ) 라고 하면
      이 값이 정답인 [1.0,0.0][1.0, 0.0] 과 얼마나 다른지 측정 필요!

      👉 이것을 측정하는 함수가 손실함수!

  • 원하는 답 P=[p1,p2,...,pn],p1+p2++pn=1P = [p_1, p_2, ...\:, p_n], p_1 + p_2 + \dots + p_n = 1

  • 제시된 답 Q=[q1,q2,...,qn],q1+q2++qn=1Q = [q_1, q_2, ...\:, q_n], q_1 + q_2 + \dots + q_n = 1

💡 PPQQ가 얼마나 다른지에 대한 척도 필요

손실함수 종류

  1. 제곱합
    • (piqi)2\sum (p_i-q_i)^2
      • (1.00.8)2+(0.00.2)2(1.0-0.8)^2+(0.0-0.2)^2
    • 확률이 다를수록 큰 값을 가짐
    • 하지만 학습 속도 느림
  2. 교차엔트로피
    • 확률이 다를수록 큰 값을 가짐
    • 학습 속도 빠름

👉 분류 문제에서는 주로 교차 엔트로피 사용

📌 분류문제에서의 원하는 답

  • P=[p1,p2,...,pn]P = [p_1, p_2, ...\:, p_n]
    • pip_i 중 하나만 11 이고, 나머지는 다 00 임.
      • 엔트로피는 00, 즉 H(P)=0H(P) = 0
    • Pk=1.0P_k = 1.0 이라고 하면, qkq_k의 값이 최대한 커지는 방향으로 학습 진행

예시 #

S={A,B}S = {\{A,B\}}

  • 원하는 답
    • P=[1,0]P = [1,0]
      • P(A)=1,P(B)=0P(A) = 1, P(B) = 0
  • 예측 Q(X)Q(X)
    • [0.8,0.2]:Q(A)=0.8,Q(B)=0.2[0.8, 0.2]: Q(A) = 0.8, Q(B) = 0.2
      • H(P,Q)=xXP(x)  log2Q(x)=1×log20.8=0.3219H(P,Q)=-\textstyle\sum_{x\in X}P(x)\;log_2Q(x)=-1\times log_{2}0.8=0.3219
    • [0.5,0.5]:Q(A)=0.5,Q(B)=0.5[0.5, 0.5]: Q(A) = 0.5, Q(B) = 0.5
      • H(P,Q)=xXP(x)  log2Q(x)=1×log20.5=1H(P,Q)=-\textstyle\sum_{x\in X}P(x)\;log_2Q(x)=-1\times log_{2}0.5=1
    • [0.2,0.8]:Q(A)=0.2,Q(B)=0.8[0.2, 0.8]: Q(A) = 0.2, Q(B) = 0.8
      • H(P,Q)=xXP(x)  log2Q(x)=1×log20.2=2.32H(P,Q)=-\textstyle\sum_{x\in X}P(x)\;log_2Q(x)=-1\times log_{2}0.2=2.32

👉 원하는 답과 다른 수록 값이 커지게 됨

import numpy as np
def crossentropy(P, Q):
    return sum([-P[i] * np.log2(Q[i]) for i in range(len(P))])

P = [1, 0]

Q = [0.8, 0.2]
print(crossentropy(P, Q))
# 0.3219280948873623

Q = [0.5, 0.5]
print(crossentropy(P, Q))
# 1.0

Q = [0.2, 0.8]
print(crossentropy(P, Q))
# 2.321928094887362
import numpy as np
def crossentropy(P, Q):
    return sum([-P[i] * np.log2(Q[i]) for i in range(len(P))])

P = [1, 0, 0, 0]
Q = [0.7, 0.1, 0.1, 0.1]
print(crossentropy(P, Q))
# 0.5145731728297583

🔥 손실함수는 학습의 방향을 제공 (값이 0에 가까워지게끔)

profile
하나씩 정리하는 개발공부로그입니다.

0개의 댓글