集成学习-多数投票分类器

集成方法(Ensemable method)的目标是:将不同的分类器组成一个元分类器,与但个分类器相比,元分类器具有更好的泛化性能。通常使用多数投票的原则,将大多数分类器预测的结果作为最终的类标,即

y ^ = m o d e ( C 1 ( x ) , C 2 ( x ) , , C m ( x ) ) , m o d e

对于二类别分类器来说,设正类为1,负类为-1,则预测结果可以表示为
y ^ = s i g n [ i = 1 m C i ( x ) ] = { 1 , i f   i = 1 m C i ( x ) 0 1 , o t h e r

C 1 ( x ) , C 2 ( x ) , , C m ( x ) 为训练后的 m 个分类器,分类器可以继承不同的分类算法,如决策树,支持向量机,逻辑斯谛回归等;还可以使用相同的分类算法使用拟合不同的训练子集。

证明集成分类器的性能好于单个成员分类器
假定二类别分类中的 n 个成员都有相同的错误率 ε ,且分类器之间相互独立。此时分类器集成后出错的概率服从二项分布,设出错的分类器数量为 n 2 时集成分类器为错误(此时集成分类器不一定出错,但是可能会出错),所以:

P { n u m E R R O R n 2 } = j = n 2 n ( n j ) ( ε ) j ( 1 ε ) n j

假定有11个分类器,单个分类器错误率为0.25,则集成后的错误率为:
ε e n s e m b l e = j = 6 11 ( 11 j ) ( 0.25 ) j ( 1 0.25 ) 11 j = 0.034

以下展示了11个分类器的情况下,成员分类器错误率与集成错误率的关系曲线。交点处大约为0.5。即在11个分类器的情况下,当成员分类器错误率<0.5时,集成分类器的错误率要低于成员分类率;当成员分类器错误率>0.5时,集成分类器的错误率要高于成员分类率

from scipy.misc import comb
import math
import numpy as np
import matplotlib.pyplot as plt


def ensemable_error(n_classifier, singal_error):
    probs = [comb(n_classifier, i) * 
             (singal_error ** i) * ((1-singal_error)**(n_classifier-i))
             for i in range(math.ceil(n_classifier / 2), n_classifier+1)]
    return sum(probs)


print(ensemable_error(8, 0.5))
error_range = np.arange(0.0, 1.01, 0.01)
ens_errors = [ensemable_error(11, error) for error in error_range]
plt.plot(error_range, ens_errors, label='Ensemble Error', linewidth=2)
plt.plot(error_range, error_range, label='Base Error', linewidth=2, linestyle='--')
plt.xlabel('Base Error')
plt.ylabel('Base/Ensemble error')
plt.legend(loc='best')
plt.xlim((0, 1))
plt.ylim((0, 1))
plt.grid()
plt.show()

这里写图片描述

猜你喜欢

转载自blog.csdn.net/winycg/article/details/80422496
今日推荐