경기도미래기술학교 AI개발자 부트캠프 40일차 TIL- 베이즈 정리 계속.

2023. 7. 4. 17:18카테고리 없음

반응형

https://www.youtube.com/watch?v=Y4ecU7NkiEI&t=275s 

 

어제 만든 여아의 부모 추정(?)을 함수화 해서 코딩을 다시 만들었다.

import pandas as pd

def calculate_posterior(df):
    total_probability = (df['birth_princess_likelihood'] * df['birth_princess_ratio']).sum()
    print('total_probability:',total_probability)
    df['posterior_probability'] = df['birth_princess_likelihood'] * df['birth_princess_ratio'] / total_probability
    return df

table = pd.DataFrame(index=['P1', 'P2', 'P3'])

index_len = len(table.index)

table['birth_princess_likelihood'] = 0.6, 0.5, 0.4
table['birth_princess_ratio'] = 1/index_len, 1/index_len, 1/index_len

table = calculate_posterior(table)

print(table)

 

(df[] * df[]).sum() 하면 각 데이터프레임의 요소마다 더한뒤 그 수를 합칠 수 있다.

 

그 다음 스팸 문자 구별을 공부했다.

 

import pandas as pd
#posterior
# 스팸메일인데 링크가 들어있음.
# 스팸메일인데 링크가 들어있지 않음.
# 일반메일인데 링크가 들어있음.
# 일반메일인데 링크가 들어있지 않음.

spam_likeli_with_link = 0.6
ham_likeli_with_link = 0.2

def update_bayesian_table(table, likelihood):
    table['likelihood'] = likelihood
    table['unnorm'] = table['prior'] * table['likelihood']

    norm_const = table['unnorm'].sum()
    table['posterior'] = table['unnorm'] / norm_const

    return table

table = pd.DataFrame(index = ['Spam', 'Ham'])
table['prior'] = 0.5, 0.5
table = update_bayesian_table(table, likelihood= [0.6, 0.2])

print(table)



def update_bayesian_table(table, likelihood):
    table['likelihood'] = likelihood
    table['unnorm'] = table['prior'] * table['likelihood']

    norm_const = table['unnorm'].sum()
    table['posterior'] = table['unnorm'] / norm_const

    return table

table = pd.DataFrame(index = ['Spam', 'Ham'])
table['prior'] = 0.5, 0.5
table = update_bayesian_table(table, likelihood= [0.4, 0.05])

print(table)
728x90