앞서 보았듯이 모든 가정을 만족한다면 앙상블의 에러율(0.034)은 개별 분류기의 에러율(0.25)보다 훨씬 낮습니다. 만약 에러율이 0.5인 분류기가 짝수 개일 때 예측이 반반으로 나뉘면 에러로 취급됩니다. 이상적인 앙상블 분류기와 다양한 범위의 분류기를 가진 경우와 비교하기 위해 파이썬으로 확률 질량 함수를 구현해 보겠습니다.3

    >>> from scipy.special import comb
    >>> import math
    >>> def ensemble_error(n_classifier, error):
    ...     k_start = int(math.ceil(n_classifier / 2.))
    ...     probs = [comb(n_classifier, k) *
    ...              error**k *
    ...              (1-error)**(n_classifier - k)
    ...              for k in range(k_start, n_classifier + 1)]
    ...     return sum(probs)
    >>> ensemble_error(n_classifier=11, error=0.25)
    0.03432750701904297

    ensemble_error 함수를 구현한 후 분류기 에러가 0.0에서 1.0까지 걸쳐 있을 때 앙상블의 에러율을 계산하겠습니다. 그다음 앙상블과 개별 분류기 에러 사이의 관계를 선 그래프로 시각화해 보죠.

    >>> import numpy as np
    >>> import matplotlib.pyplot as plt
    >>> error_range = np.arange(0.0, 1.01, 0.01)
    >>> ens_errors = [ensemble_error(n_classifier=11, error=error)
    ...               for error in error_range]
    >>> plt.plot(error_range, ens_errors,
    ...          label='Ensemble error',
    ...          linewidth=2)
    >>> plt.plot(error_range, error_range,
    ...          linestyle='--', label='Base error',
    ...          linewidth=2)
    >>> plt.xlabel('Base error')
    >>> plt.ylabel('Base/Ensemble error')
    >>> plt.legend(loc='upper left')
    >>> plt.grid(alpha=0.5)
    >>> plt.show()

     

     


      3 역주 확률 질량 함수의 누적 값은 사이파이 binom.cdf()를 사용하면 간단하게 구할 수 있습니다. 실패 확률 25%인 분류기가 여섯 개 이상 실패할 확률을 누적한 것은 성공 확률 75%인 분류기가 다섯 개 이하로 성공할 확률을 누적한 것과 같으므로 다음과 같이 구할 수 있습니다.

    from scipy.stats import binom; binom.cdf(5, 11, 0.75)

    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.