机器学习中的集成学习(一)

简介: 集成学习是一种将多个弱学习器组合成强学习器的方法,通过投票法、平均法或加权平均等策略减少错误率。它分为弱分类器集成、模型融合和混合专家模型三个研究领域。简单集成技术包括投票法(用于分类,少数服从多数)、平均法(回归问题,预测值取平均)和加权平均法(调整模型权重以优化结果)。在实际应用中,集成学习如Bagging和Boosting是与深度学习并驾齐驱的重要算法,常用于数据竞赛和工业标准。

💬内容概要


1 集成学习概述及主要研究领域

2 简单集成技术

 2.1 投票法

 2.2 平均法

 2.3 加权平均

3 高级集成技术

 3.1 Bagging

 3.2 Boosting

 3.3 Bagging vs Boosting

4 基于Bagging和Boosting的机器学习算法

 4.1 sklearn中的Bagging算法

 4.2 sklearn中的Boosting算法


集成学习概述及主要研究领域


1.1 集成学习概述💥    


“众人拾柴火焰高”、“三个臭皮匠顶个诸葛亮”等词语都在表明着群体智慧的力量,所谓的“群体智慧”指的就是一群对某个主题具有平均知识的人集中在一起可以对某一些问题提供出更加可靠的答案。原因在于,汇总结果能够抵消噪音,得出的结论通常可以优于知识渊博的专家。同样的规则也适用于机器学习领域。

在机器学习中,群体智慧是通过集成学习实现的,所谓集成学习(ensemble learning),是指通过构建多个弱学习器,然后结合为一个强学习器来完成分类任务并获得比单个弱分类器更好的效果。严格来说,集成学习并不算是一种分类器,而是一种学习器结合的方法。



1.2 集成学习的三大关键领域💥


在过去十年中,人工智能相关产业蓬勃发展,计算机视觉、自然语言处理、语音识别等领域不断推陈出新、硕果累累,但热闹是深度学习的,机器学习好似什么也没有。2012年之后,传统机器学习占据的搜索、推荐、翻译、各类预测领域都被深度学习替代或入侵,在招聘岗位中,69%的岗位明确要求深度学习技能,传统机器学习算法在这一场轰轰烈烈的人工智能热潮当中似乎有些被冷落了。


在人工智能大热的背后,集成学习就如同裂缝中的一道阳光,凭借其先进的思想、优异的性能杀出了一条血路,成为当代机器学习领域中最受学术界和产业界青睐的领域。


从今天的眼光来看,集成学习是:


  • 当代工业应用中,唯一能与深度学习算法分庭抗礼的算法
  • 数据竞赛高分榜统治者,KDDcup、Kaggle、天池、DC冠军队御用算法
  • 在搜索、推荐、广告等众多领域,事实上的工业标准和基准模型
  • 任何机器学习/深度学习工作者都必须掌握其原理、熟读其思想的领域


在集成学习的发展历程中,集成的思想以及方法启发了众多深度学习和机器学习方面的工作,在学术界和工业界都取得了巨大的成功。今天,集成学习可以被分为三个主要研究领域:


  • 弱分类器集成


弱分类器集成主要专注于对传统机器学习算法的集成,这个领域覆盖了大部分我们熟悉的集成算法和集成手段,如装袋法bagging,提升法boosting。这个领域试图设计强大的集成算法、来将多个弱学习器提升成为强学习器。


  • 模型融合


模型融合在最初的时候被称为“分类器结合”,这个领域主要关注强评估器,试图设计出强大的规则来融合强分类器的结果、以获取更好的融合结果。这个领域的手段主要包括了投票法Voting、堆叠法Stacking、混合法Blending等,且被融合的模型需要是强分类器。模型融合技巧是机器学习/深度学习竞赛中最为可靠的提分手段之一,常言道:当你做了一切尝试都无效,试试模型融合。


  • 混合专家模型(mixture of experts)


混合专家模型常常出现在深度学习(神经网络)的领域。在其他集成领域当中,不同的学习器是针对

同一任务、甚至在同一数据上进行训练,但在混合专家模型中,我们将一个复杂的任务拆解成几个相对简单且更小的子任务,然后针对不同的子任务训练个体学习器(专家),然后再结合这些个体学习器的结果得出最终的输出。



2 简单集成技术


在正式学习集成算法之前,我们先来了解一下简单的集成技术。


2.1 投票法💢


投票法主要用于分类问题中,主要流程是:使用N个弱分类器对每个样本进行预测,每个弱分类器得到的预测结果都被视为“投票”,对于同一个样本来说,会得到N个投票,N个投票中最多的那个类别即为这个样本最终的预测结果。也就是说,投票法的主要规则就是少数服从多数


import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
 
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier as KNN
from sklearn.tree import DecisionTreeClassifier as DTC
from sklearn.linear_model import LogisticRegression as LR
 
data = load_breast_cancer()
X = data.data
y = data.target
Xtrain,Xtest,Ytrain,Ytest = train_test_split(X,y,test_size=0.3,random_state=0)
 
model1 = KNN()
model2 = DTC()
model3 = LR()
 
model1.fit(Xtrain,Ytrain)
model2.fit(Xtrain,Ytrain)
model3.fit(Xtrain,Ytrain)
 
pred1 = model1.predict(Xtest)
pred2 = model2.predict(Xtest)
pred3 = model3.predict(Xtest)
 
 
final_pred = []
for i in range(Xtest.shape[0]):
    final_pred.append(stats.mode([pred1[i],pred2[i],pred3[i]])[0][0])
 
 
from sklearn.metrics import accuracy_score
accuracy_score(Ytest,final_pred)
# 0.9707602339181286
 
 
 
print(model1.score(Xtest,Ytest))
print(model2.score(Xtest,Ytest))
print(model3.score(Xtest,Ytest))
 
 
 
# 0.9473684210526315
# 0.9298245614035088
# 0.9532163742690059


2.2 平均法💢


平均法主要用于回归类问题,主要流程是:使用N个弱分类器对每个样本进行预测,每个样本的最终预测值就是N个弱分类器输出的预测结果的平均值。


from sklearn.datasets import load_diabetes
from sklearn.neighbors import KNeighborsRegressor
from sklearn.tree import DecisionTreeRegressor
from sklearn.linear_model import LinearRegression
 
data = load_diabetes()
X = data.data
y = data.target
Xtrain,Xtest,Ytrain,Ytest = train_test_split(X,y,test_size=0.3,random_state=0)
 
reg1 = KNeighborsRegressor()
reg2 = DecisionTreeRegressor(max_depth=2)
reg3 = LinearRegression()
 
reg1.fit(Xtrain,Ytrain)
reg2.fit(Xtrain,Ytrain)
reg3.fit(Xtrain,Ytrain)
 
 
# 对测试集中前20个样本进行预测
Xt = Xtest[:20] 
p1 = reg1.predict(Xt)
p2 = reg2.predict(Xt)
p3 = reg3.predict(Xt)
 
 
# 使用平均法得到最终预测结果
p_final = (p1+p2+p3)/3
 
 
# 绘制前20个样本的可视化结果
 
plt.figure(figsize=(8,5))
plt.plot(p1, "gd", label="KNeighborsRegressor")
plt.plot(p2, "b^", label="DecisionTreeRegressor")
plt.plot(p3, "ys", label="LinearRegression")
plt.plot(p_final, "r*", ms=10, label="average")
plt.plot(Ytest[:20],"ko",label="Label")
 
plt.xticks(range(20))
plt.ylabel("predicted")
plt.xlabel("training samples")
plt.legend(loc=1, bbox_to_anchor=(1.4,1.0))
plt.grid(axis='x')
plt.title("Regressor predictions and their average")
 
plt.show()



print(reg1.score(Xt,Ytest[:20]))
print(reg2.score(Xt,Ytest[:20]))
print(reg3.score(Xt,Ytest[:20]))
 
# 0.38569680255687555
# 0.4245152879688403
# 0.5350833277174876
 
 
 
from sklearn.metrics import r2_score
r2_score(Ytest[:20],p_final)
 
 
 
# 0.4956095743088209


2.3 加权平均法💢


这个是平均法的改进版,指的是给不同模型加上不同的权重,这个可以定义每个模型对于预测结果的重要性。一般来说,弱分类器效果好的我们会给更高的权重。需要注意的是,所有弱分类器的权重之和等于1。


print(reg1.score(Xt,Ytest[:20]))
print(reg2.score(Xt,Ytest[:20]))
print(reg3.score(Xt,Ytest[:20]))
 
# 结果
0.38569680255687555
0.4245152879688403
0.5350833277174876
 
 
# 使用加权平均法得到最终预测结果
p_Wfinal = p1*0.2+p2*0.2+p3*0.6
 
 
r2_score(Ytest[:20],p_Wfinal)
 
# 0.5208586019573234



机器学习中的集成学习(二)+https://developer.aliyun.com/article/1544763?spm=a2c6h.13148508.setting.15.22454f0eHFZZj3

相关文章
|
1月前
|
测试技术
软件质量保护与测试(第2版)学习总结第十三章 集成测试
本文是《软件质量保护与测试》(第2版)第十三章的学习总结,介绍了集成测试的概念、主要任务、测试层次与原则,以及集成测试的不同策略,包括非渐增式集成和渐增式集成(自顶向下和自底向上),并通过图示详细解释了集成测试的过程。
52 1
软件质量保护与测试(第2版)学习总结第十三章 集成测试
|
28天前
|
前端开发 Java 程序员
springboot 学习十五:Spring Boot 优雅的集成Swagger2、Knife4j
这篇文章是关于如何在Spring Boot项目中集成Swagger2和Knife4j来生成和美化API接口文档的详细教程。
48 1
|
28天前
|
Java Spring
springboot 学习十一:Spring Boot 优雅的集成 Lombok
这篇文章是关于如何在Spring Boot项目中集成Lombok,以简化JavaBean的编写,避免冗余代码,并提供了相关的配置步骤和常用注解的介绍。
78 0
|
28天前
|
机器学习/深度学习 算法 前端开发
集成学习任务七和八、投票法与bagging学习
集成学习任务七和八、投票法与bagging学习
11 0
|
1月前
|
机器学习/深度学习 算法
【机器学习】迅速了解什么是集成学习
【机器学习】迅速了解什么是集成学习
|
2月前
|
机器学习/深度学习 人工智能 搜索推荐
如何让你的Uno Platform应用秒变AI大神?从零开始,轻松集成机器学习功能,让应用智能起来,用户惊呼太神奇!
【9月更文挑战第8天】随着技术的发展,人工智能与机器学习已融入日常生活,特别是在移动应用开发中。Uno Platform 是一个强大的框架,支持使用 C# 和 XAML 开发跨平台应用(涵盖 Windows、macOS、iOS、Android 和 Web)。本文探讨如何在 Uno Platform 中集成机器学习功能,通过示例代码展示从模型选择、训练到应用集成的全过程,并介绍如何利用 Onnx Runtime 等库实现在 Uno 平台上的模型运行,最终提升应用智能化水平和用户体验。
51 1
|
2月前
|
机器学习/深度学习 存储 数据采集
Elasticsearch 与机器学习的集成
【9月更文第3天】Elasticsearch 不仅仅是一个强大的分布式搜索和分析引擎,它还是一个完整的数据平台,通过与 Kibana、Logstash 等工具结合使用,能够提供从数据采集、存储到分析的一站式解决方案。特别是,Elasticsearch 集成了机器学习(ML)功能,使得在实时数据流中进行异常检测和趋势预测成为可能。本文将详细介绍如何利用 Elasticsearch 的 ML 功能来检测异常行为或预测趋势。
54 4
|
3月前
|
API UED 开发者
如何在Uno Platform中轻松实现流畅动画效果——从基础到优化,全方位打造用户友好的动态交互体验!
【8月更文挑战第31天】在开发跨平台应用时,确保用户界面流畅且具吸引力至关重要。Uno Platform 作为多端统一的开发框架,不仅支持跨系统应用开发,还能通过优化实现流畅动画,增强用户体验。本文探讨了Uno Platform中实现流畅动画的多个方面,包括动画基础、性能优化、实践技巧及问题排查,帮助开发者掌握具体优化策略,提升应用质量与用户满意度。通过合理利用故事板、减少布局复杂性、使用硬件加速等技术,结合异步方法与预设缓存技巧,开发者能够创建美观且流畅的动画效果。
77 0
|
3月前
|
开发者 算法 虚拟化
惊爆!Uno Platform 调试与性能分析终极攻略,从工具运用到代码优化,带你攻克开发难题成就完美应用
【8月更文挑战第31天】在 Uno Platform 中,调试可通过 Visual Studio 设置断点和逐步执行代码实现,同时浏览器开发者工具有助于 Web 版本调试。性能分析则利用 Visual Studio 的性能分析器检查 CPU 和内存使用情况,还可通过记录时间戳进行简单分析。优化性能涉及代码逻辑优化、资源管理和用户界面简化,综合利用平台提供的工具和技术,确保应用高效稳定运行。
78 0
|
4月前
|
监控 druid Java
spring boot 集成配置阿里 Druid监控配置
spring boot 集成配置阿里 Druid监控配置
279 6

热门文章

最新文章

下一篇
无影云桌面