기본 콘텐츠로 건너뛰기

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

확률의 개요

확률이란...

확률은 미래에 발생할 사건에 대한 믿음의 측정값입니다. 어떠한 사건에 대해 그 사건이 일어날 빈도수를 전체사건에서 차지하는 비율로 나타낼 수 있습니다.
확률은 통계의 기본이 되며 일상에서 많은 경우를 접하고 있습니다. 그러나 확률을 정의하는 것은 많은 사람들에게는 새로운 작업이 될 수도 있습니다. 그러나 이것은 일상에서 접하는 것을 서술하는 것으로 사실 새로운 것은 아닙니다.

1. 용어

이러한 확률을 다루기 위해서 몇가지 알아야할 용어가 있습니다.

- 확률실험(random experiment, 시행)
실험결과를 예측할 수 없는 실험을 말하며 실험결과를 알 수 없다는 것은 실험의 모든 시행의 가능성이 동일하다고 할 수 있습니다. 예를들어 동전던지기에서 앞과 뒤가 나올 확률은 동일합니다. 이러한 실험을 확률실험이라고 합니다.

- 표본공간(sample space)와 원소(element)
확률실험의 각 결과를 원소라 하며 그 실험의 모든 결과를 모아 놓은 공간을 표본공간이라고 합니다. 주사위 던지기 실험 역시 각 눈의 값이 나올 확률은 동일하므로 확률실험이며 이 실험에서 나올 수 있는 결과(사건)은 1, 2,3 ,4,5 ,6 입니다. 이 모든 사건들의 모임을 표본공간이라고 하고 이 실험에서 표본공간(S)은
S={1,2,3,4,5,6}
이며 각 값들을 원소라고 합니다.

- 사건(event) 또는 집합(set)
확률실험에서 관심의 대상이 되는 원소들의 모임을 사건 또는 집합이라고 합니다. 특히 확률이 정의된 집합을 사건이라고 합니다.

- 벤다이어그램(Venn Diagram) : 집합간의 관계를 그림으로 나타낸 것입니다.

그림 1 벤다이어 그램 

- 전체집합(Universe set) : 샘플공간과 같으며 실험에서 발생하는 모든 원소들의 집합입니다. 그림 1에서 S

- 공집합(Empty set) : 원소가 하나도 없는 집합 ($\emptyset$)
- 합집합(Union) :  각 집합에 속한 모든 원소들의 집합 (A or B= A &\cup$ B).
 집합 A와 집합 B의 합집합의 확률: $P(A \cup B) = P(A) + P(B)+ P(A \cap B)$
- 교집합(Intersection): 두 집합에 공통으로 속한 원소들의 집합(A and B = A $\cap$ B)
집합 A와 집합 B의 합집합의 확률: $P(A \cap B) = P(A) \times P(B)$이지만 이 경우는 사건 A와 B가 독립일 경우에 해당됩니다.
- 여집합(complement): 전체 집합에서 특정 집합에 속한 원소들의 제외한 모든 원소 집합 ($A^c)
- 부분집합(subset): 특정 집합의 원소들을 다른 집합에 모두 속하는 경우를 부분집합이라고 합니다. 즉, 집합 C는 집합 A의 부분집합이라고 하면 C의 모든 원소들은 A에 포함되며 다음과 같이 나타냅니다. C $\subset$ A
- 상호 배타적 또는 독립적(mutually exclusive, disjoint, independent) : 두사건의 교집합이 공집합인 경우 (A $\cap$ B = \emptyset$)
- 분배법칙(Distribution Laws)
$A \cup (B \cap C) = (A \cup B) \cap (A \cup B)$
$A \cap (B \cup C) = (A \cap B) \cup (A \cap B)$

-드모르간 법칙(DeNorgan's law)
$(A \cup B)^c = A^c \cap B^c, \quad (A \cap B)^c = A^c \cup B^c$

표본공간 S인 실험에서 임의의 사건 A에 대해 아래 조건을 만족하는 P(A)를 A의 확률(Probability)이라 정의 합니다.

- $P(A) \geq 0$ 즉, 모든 사건의 확률은 0보다 크거나 같다.
- P(S) =1
- 여러사건 $ A_1, A_2, \cdots , A_k$가 상호 배타적 또는 독립적이라면 그 사건들의 합은 다음과 같이 나타낼 수 있습니다.
$P(A_1 \cup A_2 \cup, \cdots, \cup A_k)= \sum^k_{i=1} P(A_i)$


2. 확률계산 

 확률을 계산하기 위해서는
1) 전체 공간 즉, 표본 공간을 정의하고
2) 표본공간의 각 원소들에 적절한 확률값을 할당합니다.
3) 특별한 대상사건을 정의합니다.
4) 그 사건의 각 원소의 확률을 더해 사건의 확률을 정의합니다.

예1) 동전 3개를 던지는 확률실험(시행)에서 앞면이 두개 이상 나올 확률을 구해봅니다.
1) 표본공간:
>>> x=["H", "T"]
>>> S=[(i,j,k) for i in x for j in x for k in x]
>>> S
[('H', 'H', 'H'),
 ('H', 'H', 'T'),
 ('H', 'T', 'H'),
 ('H', 'T', 'T'),
 ('T', 'H', 'H'),
 ('T', 'H', 'T'),
 ('T', 'T', 'H'),
 ('T', 'T', 'T')]
2) 위의 표본공간의 각 원소의 확률은 동일하므로 1/8입니다.
3) 두개이상이 앞면이 나오는 사건은 다음과 같습니다.
>>> A=[i for i in S if i.count("H") >= 2]
>>> A
[['H', 'H', 'H'], ['H', 'H', 'T'], ['H', 'T', 'H'], ['T', 'H', 'H']]
4) 그러므로 사건 A의 확률은$ 4 \times\frac{1}{8}=\frac{1}{2}$ 입니다.

예 2) A와 B가 게임을 하는데 평균 전적이 A가 2/3입니다. 이 조건에서 두 게임을 할 경우 A가 적어도 한번 이길 확률?
이 문제에서 알수 있는 사전 정보는 A, B의 각각의 확률이 $P(A)=\frac{2}{3}, \; P(B)=\frac{1}{3}$ 이라는 것입니다. 두 게임을 할 경우
1) 표본공간
>>> x=["A", "B"]
>>> S=[[i,j] for i in x for j in x]
>>> S
[['A', 'A'], ['A', 'B'], ['B', 'A'], ['B', 'B']]
2) S 각 원소의 확률은 다음과 같습니다.
$2/3\cdot 2/3=4/9, \; 2/3\cdot 1/3=2/9,\; 1/3\cdot 2/3=2/9,\; 1/3\cdot 1/3=1/9$
3) A가 최소 한번 이기는 사건
>>> A=[i for i in S if i.count("A") >= 1]
>>> A
[['A', 'A'], ['A', 'B'], ['B', 'A']]
4) 위 사건의 확률은 4/9+2/9+2/9 =8/9 입니다.
또한 이 사건은 전체에서 A가 모두 질 확률을 제외한 경우와 같으므로 1-1/9=8/9와 같이 계산될 수 있습니다.

위 예에서 3전 2선승제에서 A가 이길 확률은 ?
>>> x1=[2/3, 1/3]
>>> S1= [[i,j, k] for i in x1 for j in x1 for k in x1]
>>> S2=[i for i in S1 if i.count(2/3) >= 2]
>>> S3=[i*j*k for i,j,k in S2]
>>> np.sum(np.array(S3))
0.7407407407407407

위와 같이 확률을 계산하는데이 있어 전체 원소들의 빈도 또는 갯수를 알아내는 것으로 시작됩니다. 이 경우 순열, 조합등 다음과 같이 계산할 수 있습니다.
- 곱의 법칙 : 두개의 독립된 사건인 m과 n의 시행에서 이루어질수 있는 경우의 수는 mn입니다.
예) 2개의 주사위를 시행할 경우 나올 수 있는 경우의 수는
>>> A=[[i, j] for i in range(1, 7) for j in range(1, 7)]
>>> A
[[1, 1],
 [1, 2],
 ...
 [6, 5],
 [6, 6]]
>>> len(A)
36
>>> 6*6
36
- 순열(permutation) : 순서를 고려하여 n개의 서로 다른 원소들에서 p개를 선택하는 경우의 수는 다음과 같이 계산됩니다.
$_nP_r= \frac{n!}{(n-r)!}$
예) 4개의 서로 다른 숫자로 된 암호를 찾기 위한 경우의 수. 이것은 0~9까지의 숫자중에서 4개의 숫자를 선택하는 것으로 순서를 생각하는 것이므로 한번 선택된 수는 다음에 선택되서는 안되지요. 그러므로 처음에 올 수의 경우 부터 차례로 10, 9, 8, 7 이고 그 이후에는 계산에서 제외되어야 합니다. 즉 10!/(10-4)!이 되어야 합니다.
 (!를 factorial이라고 하는데 python의 math 모듈의 factorial() 함수로 계산됩니다.)
>>> math.factorial(10)/math.factorial(6)
5040.0

- 조합(combination): 순서를 고려하지 않고 n개에서 서로다른 p개를 선택하는 경우의 수는 다음과 같이 계산됩니다.
$\left( \begin{array}{rr} n \\ r \end{array} \right)=_nC_r= \frac{n!}{r!(n-r)!}$
위의 4개의 암호 숫자를 찾는 경우에서 순열의 경우는 1234와 4321은 다른 것으로 간주하지만 조합의 경우는 순서를 고려하므로 이 둘을 같은 것으로 간주합니다. 그러므로 순열의 경우에서 선택한 수의 배열의 경우의 수를 고려해야합니다. 그러므로 결과는 다음과 같습니다.
>>> math.factorial(10)/(math.factorial(6)*math.factorial(4))
210.0

- 위의 조합 계산은 이항인 경우를 계산 한 것입니다. 만약 대상이 다항일 경우에 이 공식을 적용할 수 있을까요? 다음 예를 봅시다.
예) 학생 20명이 MT를 가서 방을 4개를 배정받는데 각 방의 인원수는 6, 4, 5, 5 명입니다. 방을 배정할 수 있는 경우의 수는 다음의 생각으로 부터 계산될 수 있습니다.
20 중에 6명을 뽑는 조합 $\times$ 14명에서 4명을 선택하는 조합 $\times$ 10명에서 5명 선택 조합 $\times$ 5명에서 5명을 선택하는 조합
>>> x=[[20,6],[14,4], [10,5]]
>>> c1=[math.factorial(x[i][0])/(math.factorial(x[i][1])*math.factorial(x[i][0]-x[i][1])) for i in range(len(x))]
>>> np.prod(np.array(c1))
9777287520.0
즉,
$\frac{20!}{6! 14!}\frac{14!}{4! 10!}\frac{10!}{5! 5!}\frac{5!}{5! 0!}=\frac{20!}{6!4!5!5!}=\left( \begin{array}{rr} 20 \\ 6\;4\;5\;5 \end{array} \right)$
위를 일반화하면 서로 다른 원소 n을 그룹의 원소의 수가 각각 n1, n2, ..., n_r일 경우 다음과 같은 식이 성립됩니다.
$\left( \begin{array}{rr} n \\ n_1\;n_2\cdots5\;n_r \end{array} \right)=\frac{n!}{n_1!n_2!\cdots n_r!}$



댓글

이 블로그의 인기 게시물

[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