일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- programmers
- c
- Spotify Api
- SWEA
- SECS
- 비트겟
- 파이썬
- SW Expert Academy
- Spring
- SECS-II
- java
- 회원가입
- modern c++
- C++
- spring boot
- CS
- MYSQL
- 백준
- Computer Science
- Spring JPA
- python
- 프로그래머스
- Gem
- Baekjoon
- 자바
- 회귀
- spotify
- SECS/GEM
- regression
- 스포티파이
- Today
- Total
비버놀로지
[나이브 베이즈 분류] 유방암 검사 키트 본문
유방암 검사 키트
40대 여성이 mammogram(X-ray) 검사를 통해 유방암 양성 의심 판정을 받았을 때 유방암을 실제로 가지고 있을 확률은 어떻게 될까요?
mammogram_test() 함수를 구현하며 베이즈 법칙을 직접 응용해보겠습니다. mammogram_test() 함수는 세 가지 숫자를 입력 받습니다.
- sensitivity - 검사의 민감성을 뜻합니다. 유방암 보유자를 대상으로 검사 결과가 양성으로 표시될 확률입니다. 0부터 1 사이의 값을 갖습니다.
- prior_prob - 총 인구를 기준으로 유방암을 가지고 있을 사전 확률(prior probability)입니다. 0.004 정도로 매우 낮은 값입니다.
- false_alarm - 실제로는 암을 갖고 있지 않지만 유방암이라고 진단될 확률입니다. 0.1 정도로 생각보다 높은 값입니다.
입력 받은 세 값을 바탕으로 나이브 법칙을 이용해 유방암 보유 여부를 확률로 출력합니다.
>>> 0.8
>>> 0.004
>>> 0.1
3.11%
실습
A=1 은 Mammogram 검사를 통해 암으로 진단되는 경우, B=1 은 실제로 유방암을 가지고 있는 경우입니다.
1. sensitivity는 P(A=1∣B=1)로 표현할 수 있습니다. 암을 실제로 가지고 있을 때 암으로 진단될 확률이 80%라면
P(A=1∣B=1)=0.8
2. 일반적으로 유방암을 가지고 있을 확률은, 즉 prior_prob의 값은 매우 낮습니다:
P(B=1)=0.004
3.유방암을 가지고 있지 않을 확률은 1에서 prior_prob를 빼면 됩니다:
P(B=0)=1−P(B=1)=0.996
4.실제로 암을 가지고 있지 않지만 암으로 진단되는 확률, false_alarm는 생각보다 매우 높습니다:
P(A=1∣B=0)=0.1
5. Mammogram 검사를 통해 암으로 진단되는 경우의 확률, P(A=1)를 구해보겠습니다:
P(A=1)
=P(A=1∣B=0)P(B=0)
+P(A=1∣B=1)P(B=1)
=0.1×0.996+0.8×0.004
=0.1028
6.유방암 진단을 받았을 때 실제로 유방암을 가지고 있을 확률을 베이즈 법칙을 이용해 계산하면 다음과 같습니다:
def main():
sensitivity = float(input())
prior_prob = float(input())
false_alarm = float(input())
print("%.2lf%%" % (100 * mammogram_test(sensitivity, prior_prob, false_alarm)))
def mammogram_test(sensitivity, prior_prob, false_alarm):
p_a1_b1 = sensitivity # p(A = 1 | B = 1)
p_b1 = prior_prob # p(B = 1)
p_b0 = 1 - prior_prob # p(B = 0)
p_a1_b0 = false_alarm # p(A = 1|B = 0)
p_a1 = p_a1_b0*p_b0 + p_a1_b1*p_b1 # p(A = 1)
p_b1_a1 = p_a1_b1*p_b1/p_a1 # p(B = 1|A = 1)
return p_b1_a1
if __name__ == "__main__":
main()
'인공지능 머신러닝' 카테고리의 다른 글
[나이브 베이즈 분류] Bag of Words (0) | 2022.11.03 |
---|---|
[나이브 베이즈 분류] 나이브 베이즈 분류기 (0) | 2022.11.03 |
[나이브 베이즈 분류] 확률로 pi 계산하기 (0) | 2022.11.03 |
[회귀분석] 영어 단어 코퍼스 분석하기 (0) | 2022.11.03 |
[회귀분석] 다항식 회귀 분석 (0) | 2022.11.03 |