正文
集成学习(Ensemble Learning) : 指的是一种学习方法,它的思想在于通过采用投票的方式综合多个分类回归模型的结果以提高分类回归的准确率。这种方法与我们平时通过听取许多他人意见来决策的过程是一致的,综合更多的有效信息往往才能更好的对事物进行判断。
1、scikit-learn 下的集成学习接口(Voting Classifier)
集成学习根据统计投票结果的时候,根据是否考虑投票权重分成两类:
- hard voting, 每个分类器都为产生一个预测结果,最终新样例的预测结果为得票数最高的类别。
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
from sklearn.ensemble import VotingClassifier
voting_clf = VotingClassifier(estimators= [
('logistic_clf',LogisticRegression()),
('DT_clf',DecisionTreeClassifier()),
('svm_clf',SVC())
],voting= 'hard')
### Usage
from sklearn import datasets
X = datasets.load_iris().data[:,2:]
y = datasets.load_iris().target
voting_clf.fit(X,y)
- soft voting , 软投票分类器根据不同模型给出的所有预测的概率对输入数据进行分类,这个预测概率值对应的就是每个分类器给每个类别票权,最终预测结果为得票权最高的类别。这种基于概率做出的集成投票结果相比硬投票的结果准确率上会高一些。但使用 soft voting 时前提要求每个预测模型都能够估计预测结果的概率。
from sklearn.ensemble import VotingClassifier
voting_clf = VotingClassifier(estimators= [
('logistic_clf',LogisticRegression()),
('DT_clf',DecisionTreeClassifier(random_state=666)),
('svm_clf',SVC(probability=True)) ### SVM 模型默认不支持计算概率结果,开启概率计算会增加运算开销
],voting= 'soft')
voting_clf.fit(X,y)
voting_clf.score(X,y)
2、集成学习的子决策模型
统计中的 大数定律 提出在随机试验中,尽管每次的结果是不一样的,但进行大量的重复试验后,所有随机试验结果的平均值总会接近于一个确定的值。也就是在 偶然事件的大量重复出现背后,往往呈现的是几乎必然的规律。大量的重复试验实则在捕获这个必然。
所以在集成学习的投票决策中,要想最终投票的结果足够可靠,根据大数定律的理论只有从足够多(上百上千上万)的投票基础上选出的最终结果才具有足够高的可信度。但从算法类型数量的有限程度上来说,投票者的数量远远不够用来捕捉 必然。所以为了尽可能 增加集成学习的投票者数量,一个可行的方案是创建更多的 子模型 来集成更多子模型的意见。
2.2 创建子模型方法
集成学习中参与决策的子模型必须是具有差异性的(否则不满足随机试验的原则),为了使创建的子模型具有这种随机性(任意两子模型是不同的),可以通过只让每个子模型只看样本集的一部分数据来训练得到。根据大数定律,尽管由片面数据训练得到的单个子模型预测准确率较低,但只要子模型的准确率基本能高于随机概率,随着子模型数量的增加,最终集成学习的整体准确率就会逐渐提高:
假设每个子模型的准确率平均约为 51%51\%51%,这个概率略高于随机决策概率(50%50\%50%)
集成学习只有1个子模型,整体准确率: C110.511=0.51C^{1}_{1} 0.51^1 = 0.51C110.5