[청년취업사관학교 새싹]핀테커스 수업 7주차(10/12)

장민정·2023년 10월 13일
0

<수업 내용>

def multi_class_entropy_h1():
    # root node
    probs = [3/7, 2/7, 2/7]
    probs = np.array(probs)
    h0 = -np.sum(probs * np.log2(probs))
    print('root node H: ', h0)
    # root node H:  1.5566567074628228

    # stream
    # true
    probs = [1/4, 1/4, 2/4]
    probs = np.array(probs)
    h1_str_t = -np.sum(probs * np.log2(probs))
    print('h1층의 피처 stream에서 true의 entropy: ', h1_str_t)
    # h1층의 피처 stream의 entropy:  1.5

    # false
    probs = [2/3, 1/3]
    probs = np.array(probs)
    h1_str_f = -np.sum(probs * np.log2(probs))
    print('h1층의 피처 stream에서 false의 entropy: ', h1_str_f)
    # h1층의 피처 stream에서 false의 entropy:  0.9182958340544896

    # final h1_str
    h1_str = 4/7 * h1_str_t + 3/7 * h1_str_f
    print('h1층의 피처 stream의 최종 entropy: ', h1_str)
    # h1층의 피처 stream의 최종 entropy:  1.2506982145947811

    # slope
    # flat - 0
    # moderate - 0
    # steep
    probs = [3/5, 1/5, 1/5]
    probs = np.array(probs)
    h1_slo_s = -np.sum(probs * np.log2(probs))
    print('h1층의 피처 slope에서 steep의 entropy: ', h1_slo_s)
    # h1층의 피처 slope에서 steep의 entropy:  1.3709505944546687

    # final h1_slo
    h1_slo = 1/7 * 0 + 1/7 * 0 + 5/7 * h1_slo_s
    print('h1층의 피처 slope의 최종 entropy: ', h1_slo)
    # h1층의 피처 slope의 최종 entropy:  0.9792504246104776


    # elevation
    # high
    probs = [2/3, 1/3]
    probs = np.array(probs)
    h1_ele_high = -np.sum(probs * np.log2(probs))
    print('h1층의 피처 elevation에서 high의 entropy: ', h1_ele_high)
    # h1층의 피처 elevation에서 high의 entropy:  0.9182958340544896

    # highest - 0
    # low - 0
    # medium
    probs = [1/2, 1/2]
    probs = np.array(probs)
    h1_ele_medium = -np.sum(probs * np.log2(probs))
    print('h1층의 피처 elevation에서 medium의 entropy: ', h1_ele_medium)
    # h1층의 피처 elevation에서 medium의 entropy:  1.0

    # final h1_ele
    h1_ele = 3/7 * h1_ele_high + 1/7 * 0 + 1/7 * 0 + 2/7 * h1_ele_medium
    print('h1층의 피처 elevation의 최종 entropy: ', h1_ele)
    # h1층의 피처 elevation의 최종 entropy:  0.6792696431662097


def multi_class_entropy_h2():
    '''high node'''
    # stream
    # false
    probs = [1/2, 1/2]
    probs = np.array(probs)
    h2_str_f = -np.sum(probs * np.log2(probs))
    print('h2층의 피처 stream에서 false의 entropy: ', h2_str_f)
    # h2층의 피처 stream에서 false의 entropy:  1.0

    # final h1_str
    h2_str = 1/3 * 0 + 2/3 * h2_str_f
    print('h2층의 피처 stream의 최종 entropy: ', h2_str)
    # h2층의 피처 stream의 최종 entropy:  0.6666666666666666

    '''medium node'''
    # slope
    # steep
    probs = [1 / 2, 1 / 2]
    probs = np.array(probs)
    h2_slo_s = -np.sum(probs * np.log2(probs))
    print('h2층의 피처 slope에서 steep의 entropy: ', h2_slo_s)
    # h2층의 피처 slope에서 steep의 entropy:  1.0


multi_class_entropy_h1()
multi_class_entropy_h2()

0개의 댓글