기본 콘텐츠로 건너뛰기

[ML] 결정트리(Decision Tree) 모델

[data analysis] 확률(probability)

확률(probability)

확률은 미래에 발생할 사건에 대한 믿음의 측정으로 과거의 데이터를 기반으로 합니다. 즉, 과거의 데이터들로부터 전체 중에서 특정한 대상이 되는 사건(event)의 발생 비율을 확률(probability)이라고 정의할 수 있습니다. 확률은 다음의 공리를 가집니다.

[확률 공리]
  • 확률은 0과 1 사이의 값: 0 ≤ P(x) ≤ 1,
  • 모든 확률의 합은 1: ∑P(x) = 1

실험에서 특별한 사건이 일어날 확률에 대한 개념은 다양한 방식으로 적용되고 해석 될 수 있습니다. 예를 들어 내일은 비올 확률이 70%라는 예보에 대해 과거 기후 조건의 데이터들을 분석하여 오늘의 날씨와 유사한 조건에서 70%가 비가 온다는 결과로서 해석할 수 있으며 또한 예보자의 주관적인 생각의 결과로 해석할 수도 있습니다. 전자의 경우는 기존 데이터들에서 대상이 되는 사건들의 빈도로 확률을 계산하는 방식으로 빈도적 해석 (frequency interpretation)이라 하고 후자의 경우는 주관적인 추론에 의한 결과로서 주관적 해석 (subjective interpretation)이라고 합니다. 이와 같이 확률은 두 가지 시각으로 해석할 수 있으며 모든 경우에 사용되는 기본적인 용어들이 있습니다.

  • 확률실험(random experiment, 시행)
    • 모든 사건들의 확률이 동일하다고 가정할 수 있는 시행
    • ex 1) 동전 던지기: 앞과 뒤가 나올 확률은 동일
    • ex 2) 일일 주가의 변화율: 정확한 결과를 예측할 수 없고 각 값들이 생성될 확률은 동일
  • 요소(element) 또는 표본점 (sample point)
    • 확률 실험에서의 일어날 수 있는 기본 결과
  • 표본공간(sample space)
    • 확률실험에서 나타나는 모든 표본점(결과)들의 집합
    • Ex) 주사위 시행의 모든 표본점들은 1, 2, 3, 4, 5, 6이며 모든 요소들의 집합이 표본 공간 S가 됩니다.
    •  S = {1, 2, 3, 4, 5, 6}
  • 사건(event)
    • 확률실험에서 관심의 대상이 되는 요소들의 모임. 표본공간의 특정한 요소(들)의 집합으로 사건의 확률은 식 2.1.1과 같이 계산됩니다.
  • 확률변수(random variable)
    • 확률이 동일한 사건들을 나타내는 변수
  • 상호 배타적 또는 독립적(mutually exclusive, disjoint, independent)
    • 두개 이상의 사건들의 교집합이 공집합
    • A ∩ B ∩ … = ∅
    • 상호 배타적 ≡ 배반사건 ≡ 독립사건
확률 = 특정사건의 빈도 (식 1)
표본공간의 모든 빈도

표본공간에서 특정한 사건들의 관계는 집합을 사용하여 명확히 나타낼 수 있습니다.

  1. 전체집합 : 표본공간을 나타냅니다.
  2. 공집합: 요소가 하나도 없는 집합 (∅)
  3. 합집합: 두개 이상의 사건들에 속한 모든 요소들을 결합한 집합
    • 두 집합 A와 B의 합집합: A or B = A ∪ B
    • 합집합의 확률은 식 2와 같이 계산됩니다.
  4. 교집합: 여러 집합들에 공통으로 속한 요소(들)의 집합
    • 두 집합 A와 B의 교집합: A and B = A ∩ B
    • 두 사건이 독립일 경우 그 확률은 식 3과 같이 계산됩니다.
    • 식 3이 성립되지 않은 경우 두 사건은 독립이 아니며 상호간에 영향을 주는 교호작용 (interaction)의 존재를 의미합니다.
P(A ∪ B) = P(A) + P(B) − P(A ∩ B) (식 2)
P(A ∩ B) = P(A) × P(B) (식 3)

예 1)

동전 3개를 던지는 확률실험(시행)에서 앞면이 두 개 이상 나올 확률을 구해봅니다.

동전 3개를 던지는 시행의 모든 결과 즉, 표본공간은 다음과 같습니다.

확률 실행의 표본은 반복문을 파이썬의 사용하여 나타낼 수 있지만 itertools 모듈의 여러 함수를 사용하는 것이 편리합니다. 다음은 itertools.product() 함수를 사용하여 나타낸 것입니다.

  • itertools.product(객체, repeat=1)
    • 객체를 시행할 경우 모든 경우를 반환
    • 인수 repeat은 시행횟수를 지정하며 기본값은 1
    • 이 함수의 결과는 게으른 평가로 이루어지므로 결과에 대해 자료형을 지정해 주어야 함
import itertools
S=list(itertools.product(('H','T'), repeat=3));S
[('H', 'H', 'T'),
('H', 'T', 'H'),
('H', 'T', 'T'),
('T', 'H', 'H'),
('T', 'H', 'T'),
('T', 'T', 'H'),
('T', 'T', 'T')]
len(S)
8

각 동전의 시행에서 앞면과 뒷면이 나올 확률이 동일할 뿐만 아니라 동전들 사이의 시행은 상호 배타적입니다. 즉, 각 동전의 시행은 독립적입니다. 그러므로 동전 3개를 시행하는 한번의 사건에서 2개이상이 앞면이 나올 확률은 다음과 같습니다.

$$\frac{1}{2}\frac{1}{2}\frac{1}{2}=\frac{1}{8}$$

위 결과를 수치형(앞면:1, 뒷면:0)으로 전환하여 표본공간을 다시 작성합니다. 이 전환에 의해 전체 샘플 중에 두개이상이 앞면인 경우는 각 요소의 합이 2이상인 경우가 될 것입니다.

S=list(itertools.product((1, 0), repeat=3))
print(S)
[(1, 1, 1), (1, 1, 0), (1, 0, 1), (1, 0, 0), (0, 1, 1), (0, 1, 0), (0, 0, 1), (0, 0, 0)]
event_sum=np.sum(S, axis=1)
print(event_sum)
[3 2 2 1 2 1 1 0]
eventMore2=np.where(event_sum>=2)
print(eventMore2[0])
[0, 1, 2, 4]
prob=1/8*len(eventMore2[0]); prob
0.5

위 코드에서 함수 np.where(조건)은 조건에 맞는 부분의 인덱스를 반환하는 numpy 라이브러리 함수입니다.

  • numpy.where(조건)
    • 조건이 참인 경우의 인덱스를 튜플 형식으로 반환

예 2)

A와 B가 게임을 하는데 A의 평균 전적은 $\frac{2}{3}$ 입니다. 이 조건에서 두 게임을 할 경우 A가 적어도 한번 이길 확률?

A와 B의 경기에서 과거 확률은 다음과 같습니다.

$$\text{P(A)}=\frac{2}{3}\quad \text{P(B)}=\frac{1}{3}$$

두번의 경기를 할 경우 모든 결과 즉, 표본공간은 다음과 같습니다.

S=list(itertools.product(("A", "B"), repeat=2));S
[('A', 'A'), ('A', 'B'), ('B', 'A'), ('B', 'B')]

A가 적어도 한번 이길 확률은 전체 확률(1)에서 B가 모두 이긴 확률을 제외한 확률이 됩니다.

pa=2/3
pb=1/3
S=list(itertools.product((pa, pb), repeat=2))
print(np.around(S, 3))
[[0.667 0.667]
 [0.667 0.333]
 [0.333 0.667]
 [0.333 0.333]]
prob=[i*j for i, j in S]
print(np.around(prob, 3))
[0.444 0.222 0.222 0.111]
round(1-prob[3], 3)
0.889

위 코드에서 사용된 함수 np.around(배열객체, 자릿수)round(실수, 자릿수)는 각각 배열 객체와 실수를 지정된 자릿수까지 반올림합니다. 배열 객체는 numpy패키지의 array() 함수에 의해 생성된 벡터 또는 행렬객체 등을 의미합니다.

예 3)

예 2의 조건에서 3번의 경기를 할 때 A가 B 보다 먼저 2번 이길 확률?

pa=2/3
pb=1/3
S=list(itertools.product((pa, pb), repeat=3))
print(np.around(S, 3))
[[0.667 0.667 0.667]
 [0.667 0.667 0.333]
 [0.667 0.333 0.667]
 [0.667 0.333 0.333]
 [0.333 0.667 0.667]
 [0.333 0.667 0.333]
 [0.333 0.333 0.667]
 [0.333 0.333 0.333]]
prob=[i*j*k for i, j, k in S if (i==2/3)&(j==2/3)]
print(np.around(prob, 3))
[0.296 0.148]
round(sum(prob), 3)
0.444

위 코드에서 사용한 함수 sum(x)은 리스트 객체인 x의 모든 요소들의 합을 계산합니다.

댓글

이 블로그의 인기 게시물

[Linear Algebra] 유사변환(Similarity transformation)

유사변환(Similarity transformation) n×n 차원의 정방 행렬 A, B 그리고 가역 행렬 P 사이에 식 1의 관계가 성립하면 행렬 A와 B는 유사행렬(similarity matrix)이 되며 행렬 A를 가역행렬 P와 B로 분해하는 것을 유사 변환(similarity transformation) 이라고 합니다. $$\tag{1} A = PBP^{-1} \Leftrightarrow P^{-1}AP = B $$ 식 2는 식 1의 양변에 B의 고유값을 고려한 것입니다. \begin{align}\tag{식 2} B - \lambda I &= P^{-1}AP – \lambda P^{-1}P\\ &= P^{-1}(AP – \lambda P)\\ &= P^{-1}(A - \lambda I)P \end{align} 식 2의 행렬식은 식 3과 같이 정리됩니다. \begin{align} &\begin{aligned}\textsf{det}(B - \lambda I ) & = \textsf{det}(P^{-1}(AP – \lambda P))\\ &= \textsf{det}(P^{-1}) \textsf{det}((A – \lambda I)) \textsf{det}(P)\\ &= \textsf{det}(P^{-1}) \textsf{det}(P) \textsf{det}((A – \lambda I))\\ &= \textsf{det}(A – \lambda I)\end{aligned}\\ &\begin{aligned}\because \; \textsf{det}(P^{-1}) \textsf{det}(P) &= \textsf{det}(P^{-1}P)\\ &= \textsf{det}(I)\end{aligned}\end{align} 유사행렬의 특성 유사행렬인 두 정방행렬 A와 B는 'A ~ B' 와 같

[matplotlib] 히스토그램(Histogram)

히스토그램(Histogram) 히스토그램은 확률분포의 그래픽적인 표현이며 막대그래프의 종류입니다. 이 그래프가 확률분포와 관계가 있으므로 통계적 요소를 나타내기 위해 많이 사용됩니다. plt.hist(X, bins=10)함수를 사용합니다. x=np.random.randn(1000) plt.hist(x, 10) plt.show() 위 그래프의 y축은 각 구간에 해당하는 갯수이다. 빈도수 대신 확률밀도를 나타내기 위해서는 위 함수의 매개변수 normed=True로 조정하여 나타낼 수 있다. 또한 매개변수 bins의 인수를 숫자로 전달할 수 있지만 리스트 객체로 지정할 수 있다. 막대그래프의 경우와 마찬가지로 각 막대의 폭은 매개변수 width에 의해 조정된다. y=np.linspace(min(x)-1, max(x)+1, 10) y array([-4.48810153, -3.54351935, -2.59893717, -1.65435499, -0.70977282, 0.23480936, 1.17939154, 2.12397372, 3.0685559 , 4.01313807]) plt.hist(x, y, normed=True) plt.show()

R 미분과 적분

내용 expression 미분 2차 미분 mosaic를 사용한 미분 적분 미분과 적분 R에서의 미분과 적분 함수는 expression()함수에 의해 생성된 표현식을 대상으로 합니다. expression expression(문자, 또는 식) 이 표현식의 평가는 eval() 함수에 의해 실행됩니다. > ex1<-expression(1+0:9) > ex1 expression(1 + 0:9) > eval(ex1) [1] 1 2 3 4 5 6 7 8 9 10 > ex2<-expression(u, 2, u+0:9) > ex2 expression(u, 2, u + 0:9) > ex2[1] expression(u) > ex2[2] expression(2) > ex2[3] expression(u + 0:9) > u<-0.9 > eval(ex2[3]) [1] 0.9 1.9 2.9 3.9 4.9 5.9 6.9 7.9 8.9 9.9 미분 D(표현식, 미분 변수) 함수로 미분을 실행합니다. 이 함수의 표현식은 expression() 함수로 생성된 객체이며 미분 변수는 다음 식의 분모의 변수를 의미합니다. $$\frac{d}{d \text{변수}}\text{표현식}$$ 이 함수는 어떤 함수의 미분의 결과를 표현식으로 반환합니다. > D(expression(2*x^3), "x") 2 * (3 * x^2) > eq<-expression(log(x)) > eq expression(log(x)) > D(eq, "x") 1/x > eq2<-expression(a/(1+b*exp(-d*x))); eq2 expression(a/(1 + b * exp(-d * x))) > D(eq2, "x") a * (b * (exp(-d * x) * d))/(1 + b