<수업 내용>
def multi_class_entropy_h1():
probs = [3/7, 2/7, 2/7]
probs = np.array(probs)
h0 = -np.sum(probs * np.log2(probs))
print('root node H: ', h0)
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)
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_str = 4/7 * h1_str_t + 3/7 * h1_str_f
print('h1층의 피처 stream의 최종 entropy: ', h1_str)
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_slo = 1/7 * 0 + 1/7 * 0 + 5/7 * h1_slo_s
print('h1층의 피처 slope의 최종 entropy: ', h1_slo)
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)
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_ele = 3/7 * h1_ele_high + 1/7 * 0 + 1/7 * 0 + 2/7 * h1_ele_medium
print('h1층의 피처 elevation의 최종 entropy: ', h1_ele)
def multi_class_entropy_h2():
'''high node'''
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_str = 1/3 * 0 + 2/3 * h2_str_f
print('h2층의 피처 stream의 최종 entropy: ', h2_str)
'''medium node'''
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)
multi_class_entropy_h1()
multi_class_entropy_h2()