고래밥 이야기

7.1 앙상블 학습 본문

머신러닝 교과서 with 파이썬, 사이킷런, 텐서플로를 참고하여 작성하였습니다. 

 

# 안보고 코드를 구현하려고 노력하였기에 변수가 각각 틀릴 수도 있습니다..

# 코드 다 암기하기. 실력이 급하다. 

 

  • 단일 분류기보다 앙상블이 더 오차가 적다는 것을 이항 분포를 통해서 보이기
from scipy.special import comb # 조합을 활용할 때 사용된다. combination의 comb이다.
import math

def ensemble_error(n_classifier, error):
    k_start = math.ceil(n_classifier / 2) # 분류기 개수의 절반 이상이 예측이 틀린다면, 전체가 틀렸다고 할수 있으므로..! 가령 11개라면 6개 이상이 틀려야만이 앙상블이 틀린 것이다.
    probs = [comb(n_classifier, k) *
        error ** k *
        (1 - error) ** (n_classifier - k) 
        for k in range(k_start, n_classifier + 1)] # range 자주 실수한다. 주의하길
    return sum(probs)
    
ensemble_error(n_classifier = 11, error = 0.25)    

0.03432750701904297 # 0.25보다 훨씬 작다.

 

  • 위의 ensemble_error를 error에 따라 단일 분류기와 ensemble 비교하기
import numpy as np
import matplotlib.pyplot as plt
error_range = np.arange(0, 1+0.01 , 0.01) # np.arange 계속 틀린다..ㅠㅠ
error_probs = [ensemble_error(n_classifier = 11, error = error) for error in error_range]
plt.plot(error_range, error_probs)
plt.plot(error_range, error_range)
plt.legend(loc = "upper left") # labeling을 안해줬기 때문에 아무것도 안뜬다. plt.plot에 label로 넣어줘야한다.
plt.grid()
plt.show()

 

Comments