集成学习voting Classifier在sklearn中的实现

 

    机器学习的算法有很多,对于每一种机器学习算法,考虑问题的方式都略微有所不同,所以对于同一个问题,不同的算法可能会给出不同的结果,那么在这种情况下,我们选择哪个算法的结果作为最终结果呢?那么此时,我们完全可以把多种算法集中起来,让不同算法对同一种问题都进行预测,最终少数服从多数,这就是集成学习的思路。

    其实在我们的生活中,也经常会用到集成学习的思路。比如想买一件化妆品时找朋友推荐,通常情况下,我们不会只找一个人推荐,我们会咨询很多朋友推荐,看她们综合的意见。比如想去电影院看一部最近上映的电影,但是拿不准好不好看,问身边的十个朋友,如果七个人都说挺好看的,值得一看,只有三个朋友反映一般般,此时,就会倾向与去看一看。其实我们在做很多决定的时候,潜意识里都会用到集成学习的思想,一定是综合多方面的意见,因为不同的人由于经历不同,视角不同,他们给出的决策背后的原因可能就不同,那么,我们集成更多的人的意见,通常情况来讲,得到的结果很有可能就是最合适的。

    接下来我们就来看看怎样用sklearn实现我们集成学习中的voting classifier,我们在这里调用sklearn中的ensemble,用hard voting的方式集成了三个不同的分类器(逻辑回归、支持向量机、决策树),先展示了三个分类器单独使用时的准确率

    在这里我们没有对单个分类器进行调参,只是给大家演示什么是voting classifier,在具体使用的时候大家也可以先把每一个分类器调整到最好参数情况下,在一起使用集成学习。

    可以看出,集成后的准确率高于单个分类器的准确率,但是在这里voting的参数设置为hard,对应的就是少数服从多数的投票方式,那么大家应该想到了,既然有hard voting,对应的应该就有soft voting, 其实这个想法也很简单,因为在有的情况下,少数服从多数并不适用,那么更加合理的投票方式,应该是有权值的投票方式,在现实生活中也有这样的例子,比如在唱歌比赛中,专业的评审的投票分值就应该比观众的投票分值高。

    hard voting的少数服从多数原则在下面这种情况下就显得不太合理,虽然只有模型1和模型4分类结果为A,但概率都高于90%,也就是说很确定结果为A,其他三个模型分类结果是B,但从概率看,并不是很确定。这时如果用hard voting得出的最终结果为就显得不太合理。

    在使用soft voting时,把概率当做权值,这时候集成后的结果为A就显得更为合理。

     换句话说,当用soft voting进行集成时,它不仅要看投给A多少票,B多少票,还要看到底有多大是我概率把样本分成A/B类,在使用时,就要求集合的每一个模型都能估计概率。那我们来回顾一下有哪些算法是能够估计概率的: 

  •     逻辑回归
  •     KNN
  •     决策树
  •     SVM(间接)

    接着,我们来看看在sklearn中实现soft voting:

    在这里,我们已经入门了集成学习算法,但是有一个很大的问题,就是虽然我们集成了不同的算法,但是算法的种类是有限的,我们怎样才能聚集更多的分类器,为我们创建出更好的分类结果呢?我们在下一篇文章继续深入探讨,拜了喵。

### Voting集成学习框架概述 Voting集成学习是一种通过组合多个分类器的结果来提高预测性能的方法。该方法基于多数投票原则,在分类任务中尤其有效。对于回归任务,则通常采用平均策略。 #### 架构原理 在Voting集成学习框架下,每个基分类器独立训练并作出预测。最终决策由所有基分类器的预测结果汇总得出: - **硬投票 (Hard Voting)**:适用于分类场景,选择得票最多的类别作为最终输出[^1]。 - **软投票 (Soft Voting)**:同样用于分类问题,但会考虑各分类器返回的概率分布,取概率最高的类别为最终结果。这种方式往往能带来更好的泛化能力。 #### 示意代码实现 以下是Python环境下利用Scikit-Learn库构建简单Voting Classifier的例子: ```python from sklearn.ensemble import VotingClassifier from sklearn.linear_model import LogisticRegression from sklearn.svm import SVC from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split # 创建虚拟数据集 X, y = make_classification(n_samples=1000, n_features=20, n_informative=2, n_redundant=10, random_state=42) # 划分训练集测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42) # 定义不同类型的分类器 clf1 = LogisticRegression(random_state=1) clf2 = SVC(probability=True, random_state=1) # 初始化Voting Classifier voting_clf = VotingClassifier(estimators=[('lr', clf1), ('svc', clf2)], voting='soft') # 训练模型 voting_clf.fit(X_train, y_train) ``` #### 架构图展示 虽然无法直接绘制图形,可以描述理想中的Voting集成学习框架架构如下: 1. 输入特征向量进入系统; 2. 特征被传递给多个预定义好的基础估计器(如逻辑回归、支持向量机等); 3. 各个估计器分别计算自己的预测值; 4. 预测值汇聚至顶层节点进行加权求和或投票表决; 5. 输出最终决定类标签或其他形式的目标变量估计值。 由于当前环境限制,未能提供具体的图像文件。建议查阅相关文献资料获取更加直观的理解。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值