Soft Voting Classifier
上一篇博客我们看到对于集成学习来说,我们可以使用少数服从多数的方式集成多个模型算法进行处理,那么在这个过程中,我们接触到了一个概念,这种少数服从多数的投票的方式,叫做 Hard Voting。相应的其实还有一种更重要的方式:Soft Voting。
其实 Soft Voting 的思想也很简单。就是在很多情况下,少数服从多数其实不是最合理的。其实更合理的投票应该是对于不同的人来说是有权值的。那么最典型的例子就是网上有很多唱歌比赛的投票,专业的音乐评审他们的票数的分值就应该相应的高一些,而普通的观众的分值就应该低一些。
那么回到 Voting Classifier 中,我们举一个简单的例子,下面有 5 个模型,面对的是一个二分类问题,把数据分为 A A A 类和 B B B 类。下面列出的是着 5 个模型把同一个数据分为 A A A 类或者 B B B 类的概率。
如果我们单看结果,只有模型 1 和 4 将数据分为
A
A
A 类,模型 2,3,5 将数据分为
B
B
B 类。相应的:
如果使用少数服从多数,那么最后的分类结果就是
B
B
B,这就叫做 Hard Voting。
但是显然看这个数据就觉得有点问题,虽然只有两个模型将数据分为
A
A
A 类,但是这两个模型似乎非常确定将我们的模型分成
A
A
A 类,预测率达到了 90%及以上。相对的,虽然我们有 3 个模型将数据分为
B
B
B 类,但是他们的概率都不是太确定,概率都在 70% 及以下。
那么在这种情况下,虽然
A
A
A 类得到的票数少,但是感觉它的权值应该更高一些,那么 Soft Voting 就是这样的一个考虑。它是将概率作为权值进行计算。分为
A
A
A 的概率就是:
B
B
B 类的概率就是:
那么我们根据这样的结果来看,我们应该把数据分为
A
A
A 类。那么这样的一种策略就是 Soft Voting。换句话说,它不仅仅看有多少票要投给
A
A
A,多少票要投给
B
B
B,与此同时,它还要看投给
A
A
A 的票他们到底有多大的概率确认这个样本应该分成
A
A
A 类。
那么 Soft Voting 集成学习中,要求集合的每一个模型都能估计概率。下面我们来看看之前学习的分类算法是不是都支持可以估计概率。
首先最简单的逻辑回归,本身就是基于概率模型的。下面的 Sigmoid 函数就是在模拟使用我们的特征计算出一个值,然后基于这个值的不同相应的它属于某一类的概率是多少。所以逻辑回归是可以计算分成某一类相应的概率的。
那么,我们来看 kNN 算法,对于 kNN 算法来解决分类问题的时候,比如 k =3,我们要看我们需要预测的样本点周围最近的三个样本点它们分别属于什么类别,在下图中,两个属于红色类,一个属于蓝色类,通过投票,我们知道 kNN 算法就将这个样本分成红色类,相应的概率就是 2/3。所以 kNN 算法也是支持计算概率的。
再来来看看决策树,其实决策树计算概率的方式和 kNN 算法非常的一致,只不过对于决策树来说,我们的样本是从根节点不断走到叶子节点的。通常在一个叶子节点的时候,其中是包含多个数据的,它的基尼系数或者信息熵可能还不为0。换句话说,在这个叶子节点中,是包含有不同类的数据的,那么哪个类的数据量大,我们就把该样本分成哪个类,然后计算概率是和 kNN 相似的。
在之前学习的算法中,其中最复杂的就是 SVM 算法,其实它本身的思路是没有考虑概率的,其实它就是寻找 margin 的最大值。不过,SVM 依然可以使用一些方式来计算这个概率,其实这样的方式它更多的代价是计算资源,具体 SVM 算法是怎么计算出这个概率的,就不介绍了。在 sklearn 中,SVC 这个类有一个参数 probability,它默认是为 False,当我们将该参数的值设为 True,就能够计算相应的概率了,但是会牺牲一定的计算时间。
那么快速回顾了几种分类算法,有了相应的概率,那么我们就可以使用 Soft Voting 这种方式。
从结果可以看出,Soft Voting 是比 Hard Voting 效果更好的。
具体代码见 Soft Voting.ipynb