○ 사건과 확률의 개념
- 확률 : 여러 가능한 결과 중 하나 또는 일부가 일어날 가능성, 0과 1 사이의 값으로 정의
- 확률의 용어
ㄴ 실험 또는 시행: 여러 가능한 결과 중 하나가 일어나도록 하는 행위
ㄴ 표본공간: 실험에서 나타날 수 있는 모든 결과들을 모아둔 집합
ㄴ 사건: 표본공간의 일부분(부분집합) 사건 A가 일어날 확률: P(A) 또는 Pr(A)
예) 동전을 던지는 실험; 표본공간 {H,T}, P(A) = 0.5
ㄴ 추출방법: 복원추출, 비복원추출(앞의 시행이 다음 시행에 영향을 주는 방법)
ㄴ 확률의 중요 구성요소 : .표본공간, 사건(A), 확률(P)
○ 경우의 수
- 사건의 기본적인 연산
ㄴ A의 여사건: 사건 A에 포함되지 않는 집합
ㄴ A와 B의 합사건 : A or B
ㄴ A와 B의 곱사건 : A and B
ㄴ 배반사건 : 동시에 일어날 수 없는 두 사건, A and B = 0인 두 사건
- 경우의 수의 계산
ㄴ 합의 법칙 : 두 사건 A와 B가 일어나는 경우의 수가 각각 m과 n
ㄴ 두 사건이 동시에 일어나지 않음
ㄴ사건 A 또는 사건 B가 일어나는 경우의 수는 m+n
ㄴ 곱의 법칙 : 이 때 경우의 수는 m x n
- 팩토리얼(!): 1부터 어떤 양의 정수 n까지의 정수를 모두 곱한 것, n! = nx(n-1)!
예) 4명의 학생을 순서대로 세우는 경우의 수는 4!
[실습1] 팩토리얼 정의
def fac(n):
if n==0 :
return 1
else :
return n*fac(n-1)
print(fac(4))
○ 공리 : 증명을 필요로 하지 않거나 증명할 수 없지만 직관적으로 자명한 정리
- 확률의 공리 : 모든 사건A에 대하여 0<= P(A) <=1, 표본공간에 대해 P=1, 사건 A1 A2...가 서로 배반일 때 사건들이 일어날 전체 확률은 각각의 확률을 더한 것과 같음
- 확률의 정리
. P(Ac) = 1 - P(A)
. P(A or B) = P(A) + P(B) - P(A and B)
. A가 B에 속할 때, P(A) <= P(B)
○ 순열과 조합: 순열은 순서가 있다.
- 순열 : 서로 다른 n개의 원소, 곱의 법칙에 의해 총 가능한 경우의 수 = n개의 서로 다른 원소 중 k개를 선택하여 배열하는 경우의 수, nPk = n*(n-1)*(n-k+1)
예) from itertools import permutations
list(permutations([n], k))
예) 10명의 사원 장학퀴즈, 1등, 2등이 서로 다름. 10명 중 2명을 선택하는 경우 10P2 = 10*9가 만들어질 수 있음
[실습2]
from itertools import permutations
from itertools import combinations
# 순열 : 6명 수강생 중 2명에게 순위별 상품을 주는 경우의 수
rank_per = list(permutations(["가","나","다","라","마","바"],2))
rank_per_num = len(rank_per)
print(rank_per)
print(rank_per_num)
-조합: 서로 다른 n개의 원소, 서로 다른 n개의 원소에서 k개를 순서에 상관없이 선택하는 방법
=nCk = n(n-1)...(n-k+1) / k! = nPk /n! = n! / k!*(n-k)!
[실습3]
from itertools import permutations
from itertools import combinations
# 조합 : 6명 수강생 중 2명에게 순위 상관없이 상품을 주는 경우의 수
rank_com = list(combinations(["가","나","다","라","마","바"],2))
rank_com_num = len(rank_com)
print(rank_com)
print(rank_com_num)
-중복순열 : 서로 다른 n개의 원소 중에서 중복을 허용하여 r개를 뽑아 일렬로 배열하는 경우
nㅍr = n^r
예) 동전 1개를 10번 던질 경우 2ㅍ10
[실습4]
from itertools import product
from itertools import combinations_with_replacement
# 중복순열
re_per = list(product(['A', 'B','C','D','E'], repeat = 3))
re_per_num = len(re_per)
print(re_per)
print(re_per_num)
-중복조합: 서로 다른 n개의 대상 중 중복을 허용해 r개를 순서를 고려하지 않고 뽑는 경우
nHr = n+r-1Cn-r = n+r-1Cr
nCr=nCn-r
[실습5]
from itertools import product
from itertools import combinations_with_replacement
# 중복조합
re_com = list(combinations_with_replacement(['A','B','C','D','E'], 3))
re_com_num = len(re_com)
print(re_com)
print(re_com_num)
○ 조건부 확률과 독립: 인공지능, NLP
- 조건부 확률 : 특정한 사건의 확률을 구할 때, 다른 사건에 대한 정보가 주어지는 경우, 다른 사건에 대한 정보를 이용하여 확률을 구하므로 기존 확률과 달라질 수 있음.
ㄴ 정의 : P(A|B) = P(AandB)/P(B), P(AandB)=P(B|A)P(A)
- 독립 : 사건 A와 사건 B 사이에 연관성이 없음 = 사건 B는 A에 아무런 영향을 주지 못함
= P(A|B)=P(A)
. P(A and B) = P(A) * P(B)
* 일반적으로 두 사건은 서로 연관성이 있는 경우가 많음, 사건 B는 A에 대한 영향을 줄 수 있음, P(A|B) =!P(A)
[실습6]
import random
answer_Q1andQ2 = 0
answer_Q2 = 0
answer_Q1orQ2 = 0
random.seed(4)
# 함수 정의
def random_answer():
return random.choice(["A", "B"])
# 30명의 응답 결과
for i in range(30):
Q1 = random_answer()
Q2 = random_answer()
if Q2 == "A":
answer_Q2 += 1
if Q2 == "A" and Q1 == "A" :
answer_Q1andQ2 += 1
if Q2 == "A" or Q1 == "A" :
answer_Q1orQ2 += 1
# 조건부 확률과 독립
print( "P(Q1 and Q2 | Q2 ):", answer_Q1andQ2/answer_Q2)
print( "P(Q1 and Q2 | Q1 or Q2 ):", answer_Q1andQ2/answer_Q1orQ2)
○ 확률 분포
- 확률변수 : 각각의 근원사건에 실수값을 대응시킨 함수, X, Y처럼 대문자로 표시, 시행을 하기 전엔 어떤 값을 갖게 될 지 알 수 없다는 불확실성을 표현
ㄴ P(X=x1)
ㄴ 표본공간 -> 실수값(앞면의 개수) 0,1,2
- 확률분포
ㄴ 이산확률변수 : 확률변수의 값의 개수를 셀 수 있는 경우
ㄴ 확률질량함수 : 어떤 확률변수 x가 갖는 확률을 나타내는 함수, y = f(x): x가 갖는 확률은y, 0<=f(xi) <=1
ㄴ 종류: 베르누이분포, 이항분포,기하분포, 음이항분포
ㄴ 연속확률변수 : 확률변수의 값이 연속적인 구간에 속하는 경우
ㄴ 확률밀도함수 : 어느 구간의 확률이 더 크고 작은 지 나타낼 수 있는 함수를 이용, P(0<=X<=0.1) = m
- 연속확률분포: 확률밀도함수의 조건
ㄴ mu 평균, sigma 표준편차: 표준정규분포 : mu 0, sigma 1
ㄴ 종류: 정규분포, 균일분포, 지수분포, 감마분포, 베타분포....
- 누적분포함수 : 확률질량함수의 값을 누적해서 더한 것
ㄴ F(x) = P(X <=x)라고 표시, 대문자 F로 표시
ㄴ 이산확률변수의 누적분포함수 F(x) = SIGMA p(y)
ㄴ 연속확률변수의 누적분포함수 F(x) = INTEGRAL p(y)
[실습7]
from sympy.stats import given, density, Die
## Q1. 6개의 면이 있는 주사위 생성
Die6 = Die('Die6',6)
Die6_dict = density(Die6).dict
print(Die6)
print(Die6_dict)
## Q2. 3 초과의 면만 나오는 조건을 가진 주사위 생성
condi = given(Die6, Die6 > 3)
condi_dict = density(condi).dict
print(condi)
print(condi_dict)ㅎ
'IT인터넷 > Python' 카테고리의 다른 글
[디지털 문해력]Python으로 시작하는 데이터 분석_Pandas 기본 알아보기(210930) (0) | 2021.10.02 |
---|---|
[디지털 문해력]Python 파이썬 배우기 2일차(210915) (0) | 2021.09.19 |
[디지털 문해력]Python 파이썬 배우기 1일차(210914) (0) | 2021.09.18 |
[디지털 문해력]Python으로 배우는 데이터 분석_확률과 통계 배우기 2일차(210928) (0) | 2021.09.18 |
[디지털 문해력] SQL 배우기 입문(210919) (0) | 2021.09.18 |
댓글