首页 > 分享 > 集成学习(中)——投票法和bagging及代码实现

集成学习(中)——投票法和bagging及代码实现

投票法

讲bagging前就应该先谈到投票法,投票法是一种遵循少数服从多数原则的集成学习模型,通过多个模型的集成降低方差,从而提高模型的鲁棒性。举个例子,在预测泰坦尼克号的生死问题上,综合了logistics、Knn和决策树三个模型的预测结果,再决定出label的叫做投票。那么怎么综合这三个模型的预测结果便是关键问题了,第一种,直接使用预测的结果,如果三个模型中,一个预测死,两个预测生,那么便是生,这就是投票法的硬投票,第二种,使用模型预测的概率,可以做平均,也可以出现第四个模型讲三个模型的概率作为输入,再进行预测,这就是软投票。
投票的原理非常直观,但是效果好不好取决于你集成了哪些模型,如果本身的单个模型效果就不好,那么就会影响你整个大模型的准确率。

投票法代码实现

from sklearn.linear_model import LogisticRegression from sklearn.svm import SVC from sklearn.ensemble import VotingClassifier from sklearn.preprocessing import StandardScaler from sklearn.pipeline import make_pipeline from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import cross_val_score from sklearn.model_selection import RepeatedStratifiedKFold import numpy as np import matplotlib.pyplot as plt #借助Pipeline完成模型预处理工作 models = [('lr',LogisticRegression()),('svm',make_pipeline(StandardScaler(),SVC()))] ensemble = VotingClassifier(estimators=models,voting='sqft') #使用sklearn自己生成数据做样式 from sklearn.datasets import make_classification X, y = make_classification(n_samples=1000, n_features=20, n_informative=15, n_redundant=5, random_state=2) print(X.shape, y.shape)

12345678910111213141516171819

# 构建大模型 def get_voting():# 定义模型models = list()models.append(('knn1', KNeighborsClassifier(n_neighbors=1)))models.append(('knn3', KNeighborsClassifier(n_neighbors=3)))models.append(('knn5', KNeighborsClassifier(n_neighbors=5)))models.append(('knn7', KNeighborsClassifier(n_neighbors=7)))models.append(('knn9', KNeighborsClassifier(n_neighbors=9)))ensemble = VotingClassifier(estimators=models, voting='hard')return ensemble #建立详细模型 def get_models():models = dict()models['knn1'] = KNeighborsClassifier(n_neighbors=1)models['knn3'] = KNeighborsClassifier(n_neighbors=3)models['knn5'] = KNeighborsClassifier(n_neighbors=5)models['knn7'] = KNeighborsClassifier(n_neighbors=7)models['knn9'] = KNeighborsClassifier(n_neighbors=9)models['hard_voting'] = get_voting()return models

123456789101112131415161718192021

#接收一个模型实例,并且分层10倍交叉验证三次重复 def evaluate_model(model, X, y):cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)scores = cross_val_score(model, X, y, scoring='accuracy', cv=cv, n_jobs=-1, error_score='raise')return scores 12345

#打印每个算法的平均性能, #创建一个箱形图和须状图来比较每个算法的精度分数分布。 models = get_models() results, names = list(), list() for name, model in models.items():scores = evaluate_model(model, X, y)results.append(scores)names.append(name)print('>%s %.3f (%.3f)' % (name, np.mean(scores), np.std(scores))) plt.boxplot(results, labels=names, showmeans=True) plt.show() 1234567891011

bagging

与投票法不同的是,Bagging不仅仅集成模型最后的预测结果,同时采用一定策略来影响基模型训练,保证基模型可以服从一定的假设。希望各个模型之间具有较大的差异性,而在实际操作中的模型却往往是同质的,因此一个简单的思路是通过不同的采样增加模型的差异性。
Bagging的核心在于自助采样(bootstrap)这一概念,即有放回的从数据集中进行采样,也就是说,同样的一个样本可能被多次进行采样。统计学上的重采样。
Bagging的基本流程:首先我们随机取出一个样本放入采样集合中,再把这个样本放回初始数据集,重复N次采样,最终我们可以获得一个大小为N的样本集合。同样的方法, 我们可以采样出X个含N个样本的采样集合,然后基于每个采样集合训练出一个基学习器,再将这些基学习器进行结合。其中我们可以引出一个重要概念OOB,中文名字叫做袋外误差,这个也是我们衡量学习器好坏的重要标准。假设集合里面的元素记为 x i x_{i} xi​,那么在一次的抽取中, N 1 N_{1} N1​不被抽到的概率为 ( 1 − 1 / X ) (1-1/X) (1−1/X),因为样本之间是相互独立的,所以在抽取N次后, N 1 N_{1} N1​不被抽到的概率则为 ( 1 − 1 / X ) X (1-1/X)^{X} (1−1/X)X,那么在抽取次数足够大的情况下我们对X取个极限,可以得到 e − 1 e^{-1} e−1,也就是说将会有约 1 / 3 1/3 1/3的样本没有被抽到,这 1 / 3 1/3 1/3的样本误差,我们便称为袋外误差。

bagging代码实现

from numpy import mean from numpy import std from sklearn.datasets import make_classification from sklearn.model_selection import cross_val_score from sklearn.model_selection import RepeatedStratifiedKFold from sklearn.ensemble import BaggingClassifier 123456

#生成模拟数据 X, y = make_classification(n_samples=1000, n_features=20, n_informative=15, n_redundant=5, random_state=5) 123456

model = BaggingClassifier() 1

cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1) #10折交叉验证,并重复三次数据,参数n_jobs=-1是使用所有内核 n_scores = cross_val_score(model, X, y, scoring='accuracy', cv=cv, n_jobs=-1, error_score='raise') 12345678

print('Accuracy: %.3f (%.3f)' % (mean(n_scores), std(n_scores))) 1

相关知识

卷积神经网络实现鸢尾花数据分类python代码实现
智能植物浇水系统开发:投票自动化项目
【图像分割】基于阈值法实现大脑图像分割附Matlab代码
Python原生代码实现KNN算法(鸢尾花数据集)
python深度学习之用lightgbm算法实现鸢尾花种类的分类任务实战源码
基于卷积神经网络和集成学习的材质识别和分割方法研究
如何实现基于深度学习的花卉识别系统:YOLO模型与UI界面集成指南
构建智能化玉米病虫害检测系统:深度学习与实时UI集成详解
在企业网络中实施网络构建时,如何通过SSH服务、SNMP、VLAN修剪、DHCP中继、MSTP、VRRP、LACP和OSPF协议提高网络管理的效率和保障网络的冗余性?请详细阐述配置这些技术的要点。
常见的病毒检测方法包括()A、特征代码法B、检验和法C、行...

网址: 集成学习(中)——投票法和bagging及代码实现 https://m.huajiangbk.com/newsview839836.html

所属分类:花卉
上一篇: “森禾杯”浙江省省树省花和特色树
下一篇: 投票啦!快为你心中的县花县树投上