机器学习实验报告-集成学习

目录

一、集成学习介绍

1.1集成学习的引入

1.2集成学习发展史

1.3集成学习的学习组织方式

1.3.1并联组织关系

1.3.2串联组织关系

1.4集成学习及其实现方法概述

二、集成学习实现方法

2.1Boosting

2.1.1基本过程

2.1.2注意点

2.2bagging

2.2.1基本过程

2.2.2注意点

2.3 Stacking

2.3.1 几种比较简单的结合策略

2.3.2如何理解Stack

三、集成学习代码实现

3.1数据集

3.2代码实现

3.3运行结果及分析

四、思考与讨论

4.1boosting算法分类

4.2集成学习优缺点讨论

4.3集成学习的应用场景

4.4boosting和bagging概念之间的区别

4.5集成学习模型的评价指标

五、实验总结


一、集成学习介绍

1.1集成学习的引入

经过前面的四次实验课及理论课的机器学习方法的学习,我们认识了机器学习中的常用回归算法、分类算法和聚类算法,在众多的算法中,除神经网络算法之外,没有一款算法模型预测准确率达到 100%,因此如何提高预测模型的准确率成为研究的重点。通过前面内容的学习,我们可能会迅速想到一些方法,比如选择一款适合的算法,然后反复调整各种参数,其实这并不是最佳的方法,有以下三点原因:

一是任何算法模型都有自身的局限性;

二是反复调参会浪费许多不必要的时间;

三是依靠调参来提升模型预测准确率具有很大的不确定性。

那到底有没有一种适合的方法呢?当然有,它就是本次实验的核心——集成学习方法(Ensemble Method),或称集成学习算法。

准确来讲,集成学习算法并非一种机器学习算法,它更像是一种模型优化方法,是一种能在各种机器学习任务上提高准确率的强有力技术,这种技术的关键体现在“集成”两个字上,所谓集成就是“捏在一起”,因此集成学习算法可以理解成是一套组合了多种机器学习算法模型的框架,它关注的是框架内各个模型之间的组织关系,而非某个模型的具体内部结构。

可以说集成学习算法是“集”百家之长,使预测模型获得较高准确率,当然这也导致了模型的训练过程会稍加复杂,效率降低了一些,但在硬件性能发达的今天,几乎可以忽略不计。

当下深度学习大行其道,将任何一款传统机器学习算法单拎出来与之一较高下,几乎都会败下阵来,而集成学习算法的出现打破了这个平衡,它几乎能与深度学习平分秋色。在 Kaggle、天池等著名机器学习竞赛中,选手使用最多当属集成学习算法,而非  SVM、KNN 或者 Logistic 逻辑回归等单个算法,由此可见集成学习算法具有更广泛的适应场景,比如分类问题、回归问题、特征选取和异常点检测等各类机器学习任务。

1.2集成学习发展史

集成学习算法的理论、应用体系的构建与完善经历一个漫长的过程,下面进行简单地介绍。

集成学习最早出现于 1979 年,Dasarathy 提出了集成系统(Ensemble system) 的思想,他使用线性分类器和最近邻居分类器组成的复合模型进行训练,得到了比单个分类器训练更好的预测效果。

1988 年 Kearns 提出了“弱学习器”概念,引发了“能否用一组弱学习器创造一个强学习器”的广泛讨论。(学习器,指的是某种机器学习算法模型),注意,所谓弱学习器,指的是一个个单独的算法模型,比如 KNN 算法模型、线性回归模型、朴素贝叶斯等,而强学习器指的是由多个不同类别的“弱学习器”集成的学习器,也称“异质集成”,这类学习器的预测准确率在 90% 以上。除此之外,还有一种“基学习器”(也称同质集成),它是由同一款机器学习算法组成的。

1990 年 Schapire 对这问题给出了答案,并且研发了著名的 Boosting 算法,该算法是集成学习常用方法之一;1992 年 Wolpert 首次提出“堆叠泛化”这一概念,即“堆叠”弱学习器训练的模型比任何单个弱学习器训练的模型具有更好的性能。

1996年,Breiman 开发了另一个集成学习方法 —— Bagging 算法(也称装袋算法),并对其原理和训练过程进行了详细的描述,并明确指出 Bagging 算法能够提高预测的准确性。其后几年,Breiman 在  Bagging 算法的基础上对“随机决策森林”进行另外重新描述,提出了集成学习中最广为人知的算法 —— 随机森林算法(RandomForest),该算法通过集成学习的思想将多棵“决策树”集成为一片“森林”,使其兼顾了解决回归问题和分类问题的能力。

截止到目前,已经有越来越多的集成学习算法被提出,比如 2010 年 Kalal 等人提出的 P-N 学习,以及近几年提出的以堆叠方式构建的深度网络结构、XGBoost 等算法,它们都能显著提升模型的预测效果。

1.3集成学习的学习组织方式

集成学习不是一种独立的机器学习算法,而是把互相没有关联的机器学习算法“集成”在一起,从而取得更好的效果。我们知道,每个算法模型都有各自的局限性,集成学习方式的出现正好弥补了这一不足之处。 

总的来说,集成学习算法主要使用两种结构来管理模型与模型之间的关系,一种是并联,另一种是串联(这和物理上串联电路、并联电路似乎有些相似之处)。下面对这两种方式进行简单介绍(其实很好理解)。

1.3.1并联组织关系

所谓并联,就是训练过程是并行的,几个学习器相对独立地完成预测工作,彼此互不干扰,当所有模型预测结束后,最终以某种方法把所有预测结果合在一起。

通俗理解:这相当于学生拿到试卷后先分别作答,彼此不讨论、不参考,当考试完成后,再以某种方式把答案整合在一起。

并行式集成学习的典型代表是 Bagging 算法。并行结构示意图如下所示:

图1:集成学习并联结构

1.3.2串联组织关系

串联结构也很好理解,指的是训练过程是串行的,几个学习器串在一起,通力合作一起来完成预测任务。第一个学习器拿到数据集完成预测,然后把预测结果以及相关数据传递给第二个学习器,第二个学习器也是在完成预测后把结果和相关数据继续传递下去,直至传递到最后一个学习器。

通俗理解:这个过程很像是传声筒游戏,第一个人先听一段旋律,然后复述给第二个队员,依次进行下去,直到最后一个人给出歌曲的名字。

串行式集成学习的典型代表是 Boosting 算法。串行结构示意图如下所示:

图2:集成学习串联结构

注:串联与并联的最大区别在于,并联的学习器彼此独立,而串联则是把预测结果传递给后面的学习器。

1.4集成学习及其实现方法概述

简单来说,集成学习是一种分类器结合的方法(不是一种分类器)。

宏观上讲集成学习的实现方法分为3类:

(1)序列集成方法boosting

思路:每个学习器按照串行的方法生成。把几个基本学习器层层叠加,但是每一层的学习器的重要程度不同,越前面的学习的重要程度越高。它聚焦样本的权重。每一层在学习的时候,对前面几层分错的样本“特别关注”,建立了每个机器学习器之间的依赖关系,因此提升了整体模型的准确率。

boost家族还是非常有名的,在sklearn上已经集成了非常多的boost分类器,例子特别多。值得一提的是很多树类的boost还可以作为特征筛选器,有特征重要程度评分的功能。

(2)并行集成方法bagging

跟楼上不一样,这个方法是并行的,每个学习器是独立的存在,所以在训练的时候也将训练集分成互相有交集(训练集庞大的时候也可以没交集)的几组分别给每个学习器学习。因此bagging方法是一个集体决策,这就导致了每个学习器的学习结果存在差异。对于相同部分,直接采取;对于不同部分,采用投票的方式做出集体决策。

(3)模型融合Stacking

这个思路跟上面两种方法又有所区别。之前的方法是对几个基本学习器的结果操作的,而Stacking是针对整个模型操作的,可以将多个已经存在的模型进行组合。跟上面两种方法不一样的是,Stacking强调模型融合,所以里面的模型不一样(异质),而上面两种方法中的模型基本类似(同质)。个人感觉关键点在于组合的模型的选择和组合策略的确定。

二、集成学习实现方法

2.1Boosting

2.1.1基本过程

图3:boosting过程展示

2.1.2注意点

①权重初始化:样本权重1初始化的时候直接平分权重。如果有n个样本,那就直接每个样本的权重。

②权重更新方法:不同的模型就不一样 AdaBoost 是对错误样本赋更大的权重;GBDT(Gradient Boost Decision Tree) 每一次的计算是为了减少上一次的残差,还有很多其他的模型用了不同的方法。

③迭代:一直计算每个基本分类器的误差率,并更新,直至误差率达到规定范围。

④特点:boosting模型更关注在上一轮的结果上进行调整,是个串行的策略。所以,作为一个序列化的方法,其基本学习器之间存在强依赖关系,基本学习器可以稍微简单一点(弱分类器)。

2.2bagging

2.2.1基本过程

图3:bagging过程展示

2.2.2注意点

①随机采样:又放回地随机采样,所以有的样本被重复抽到有的不会被抽到。好处是能降低数据分布对学习器的影响。

②结合策略:随机森林就是在样本随机采样时对决策树也随机采样。

③迭代:一直训练基本学习器,直至基本学习器的数量达到规定数量。

④特点:bagging模型更关注每个模型的表现,因为是个并行的策略,每个模型都很重要。所以,基本学习器可以稍微复杂一点(随机森林的决策树深度深一点)。

2.3 Stacking

与上面两个方法不同的是,这个不是一个集成学习模型,是一个结合策略。

2.3.1 几种比较简单的结合策略

投票法、平均法、stack

①投票

投票的的基本思路就是少数服从多数。感觉多数用于分类问题中。

最简单的投票就是直接让基本学习器对某一个样本分类,每个分类器根据自己的结果对类别投票。对于最终的分类结果,我们取得票最多的选项,如果出现平票就随机选一个。

稍微有点想法的投票是绝对多数投票:有点像决策树的增益率选取,对于最终的分类结果,它不仅要满足取得票最多这一条件,还要满足被投票过半的条件。如果不满足,那就直接拒绝预测。

另一种投票方法是加权投票法:对于每个学习器赋予权重,再加权求和得到每个类别的票数,这里的权重制定方法就要看你自己了。

②平均

很多时候,针对回归问题,投票显然不能解决问题。这个时候就需要平均。

普通的平均就是直接取多个学习器的预测结果直接取平均。

加权平均跟其他的也差不多,主要是怎么个赋权法。

③Stack

从初始数据集中训练出初级学习器,然后“生成”一个新数据集用于训练次级学习器。在新数据集中,初级学习器的输出被当做样例输入特征,初始样本的标记仍被当做样例标记。上面的两种学习器我们称为:

基学习器:即上述所说的一级学习器

元学习器:即上述所说的二级学习器。这里的”元“跟元学习、元宇宙等的”元“是一个意思,表示的是更高一层的抽象。元学习器即“学习器的学习器”,有点像基学习器的加权平均和打分器。

2.3.2如何理解Stack

我的理解如下图所示

图4:关于Stack的理解

三、集成学习代码实现

本次实验代码实现AdaBoost算法-“房价预测”实战

3.1数据集

房价数据集 kc_house_data.csv

部分数据如下所示

图5:房价数据集

3.2代码实现

本实验主要是依据房屋的属性信息,包括房屋的卧室数量,卫生间数量,房屋的大小,房屋地下室的大小,房屋的外观,房屋的评分,房屋的修建时间,房屋的翻修时间,房屋的位置信息等,对房屋的价格进行预测,从而为此类价格类实际问题的处理提供技术参考。

样本数据为高维数据时;
在之前代码的基础上修改载入数据的函数,其他部分不变

from numpy import *
import matplotlib
import matplotlib.pyplot as pltdef loadDataSet(fileName):fr = open(fileName, "r")dataMat = []labelMat = []numFeat = len(fr.readline().split("\t"))for line in fr.readlines():lineArr = []curLine = line.strip().split("\t")for i in range(numFeat - 1):lineArr.append(float(curLine[i]))dataMat.append(lineArr)labelMat.append(float(curLine[-1]))fr.close()return dataMat, labelMat

这里使用 sklearn 库,并使用了线性回归和回归树计算,以及分别使用 Adaboost 进行计算相比较


from matplotlib import pyplot as plt
from sklearn import neighbors
from sklearn import ensemble
from sklearn.linear_model import LinearRegression
from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import AdaBoostRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
import csv
import numpy
fp = open('kc_house_data.csv')
fp_data = csv.reader(fp)
y = []
x = []
for line in fp_data:if line[0] != 'id':line[1] = line[1][0:8]y.append(float(line[2]))line.remove(line[2])li = []for i in line:li.append(float(i))x.append(li)x = numpy.array(x)
y = numpy.array(y)
fp.close()
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25)  # 训练集与测试集之比#adaboost算法(线性回归作为弱学习器)
adaboost = AdaBoostRegressor(LinearRegression())
adaboost.fit(x_train, y_train)
y_pre1 = adaboost.predict(x_test)
print("adaboost训练集分数:",adaboost.score(x_train,y_train))
print("adaboost验证集分数:",adaboost.score(x_test,y_test))
print('Adaboost算法(线性回归作为弱分类器)误差:')
print(mean_squared_error(y_true=y_test, y_pred=y_pre1))
#线性回归作为学习器
Linear = LinearRegression()
Linear.fit(x_train, y_train)
y_pre2 = Linear.predict(x_test)
print("单个线性回归训练集分数:",Linear.score(x_train,y_train))
print("单个线性回归验证集分数:",Linear.score(x_test,y_test))
print('线性回归算法误差:')
print(mean_squared_error(y_true=y_test, y_pred=y_pre2))#adaboost算法(回归树作为弱学习器)
adaboost = AdaBoostRegressor(DecisionTreeRegressor())
adaboost.fit(x_train, y_train)
y_pre3 = adaboost.predict(x_test)
print('Adaboost算法(回归树)误差:')
print("adaboost回归树训练集分数:",adaboost.score(x_train,y_train))
print("adaboost回归树验证集分数:",adaboost.score(x_test,y_test))
print(mean_squared_error(y_true=y_test, y_pred=y_pre3))
#普通回归树作为学习器
decision_tree = DecisionTreeRegressor()
decision_tree.fit(x_train, y_train)
y_pre4 = decision_tree.predict(x_test)
print("普通回归树训练集分数:",decision_tree.score(x_train,y_train))
print("普通回归树验证集分数:",decision_tree.score(x_test,y_test))
print('普通回归树算法误差:')
print(mean_squared_error(y_true=y_test, y_pred=y_pre4))# 做ROC曲线
plt.figure()
plt.plot(range(len(y_pre1)), y_pre1, 'b', label="predict")
plt.plot(range(len(y_pre1)), y_test, 'r', label="test")
plt.legend(loc="upper right")  # 显示图中的标签
plt.xlabel("the number of sales")
plt.ylabel('value of sales')
plt.show()# KNN算法
adaboost = AdaBoostRegressor(neighbors.KNeighborsRegressor())
adaboost.fit(x_train, y_train)
y_pre5 = adaboost.predict(x_test)
print('Adaboost算法(KNN作为弱分类器)误差:')
print(mean_squared_error(y_true=y_test, y_pred=y_pre5))
KN = neighbors.KNeighborsRegressor()
KN.fit(x_train, y_train)
y_pre5 = KN.predict(x_test)
print('KNN算法误差:')
print(mean_squared_error(y_true=y_test, y_pred=y_pre5))

3.3运行结果及分析

图6:运行结果一

(1)结果分析一

①首先,对于Adaboost算法(线性回归作为弱分类器),训练集得分为0.42,验证集得分为0.32。这意味着该模型在训练集上表现较好,但在验证集上的泛化能力较差。此外,误差值高达8.18e+10,说明该模型在回归任务中存在较大的误差。

②相比之下,单个线性回归模型的训练集得分为0.70,验证集得分为0.69,误差值为3.66e+10。虽然单个线性回归模型的表现也不是非常理想,但相对于Adaboost算法来说,它的泛化能力稍强且误差较小。

③接下来,对于Adaboost算法(回归树),训练集得分为0.9998,验证集得分为0.85,误差值为1.77e+10。这表明使用回归树作为弱分类器时,Adaboost算法在训练集和验证集上都有很好的表现,并且误差较低。然而,普通回归树的训练集得分为1.0,验证集得分为0.72,误差值为3.37e+10。虽然普通回归树在训练集上表现完美,但在验证集上的泛化能力较差。

因此Adaboost算法(回归树)在这组数据上表现最好,具有较高的训练集得分、验证集得分和较低的误差。

可见,使用回归树时的集成学习算法的误差较小; 而线性回归表现则相反。

图7:运行结果二

(2)结果分析二

这张图是集成学习算法 Adaboost 的线性回归作为弱学习器的模型生成的。在代码中,我们可以使用 Adaboost 算法训练了两个模型:一个是以线性回归为基础学习器的 Adaboost 模型,另一个是以决策树回归器为基础学习器的 Adaboost 模型。而在画图部分,代码使用的是以线性回归为基础学习器的 Adaboost 模型预测结果与真实结果的对比图。

根据上图发现,蓝色线与红色线非常接近,基本上重合在一起,说明模型的预测结果与真实结果非常吻合,Adaboost 模型具有较高的准确性。

四、思考与讨论

4.1boosting算法分类

Boosting 是一种集成学习方法,通过建立多个弱分类器(或回归器),将它们组合成一个强分类器(或回归器)。在每一轮迭代中,Boosting 算法会按照一定的规则赋予每个样本不同的权重,然后训练一个基础分类器。在基础分类器的训练过程中,Boosting 算法会根据上一轮迭代的结果对样本权重进行调整,使得基础分类器更加关注被错误分类的样本,从而提高整个模型的准确性。

常用的 Boosting 算法主要包括以下几种:

(1)AdaBoost(Adaptive Boosting)

AdaBoost 是最早的 Boosting 算法之一,它采用加权平均的方法组合基础分类器,同时根据错误率调整每个分类器的权重。在 AdaBoost 中,每个基础分类器都是一个弱分类器,常用的基础分类器有决策树、神经网络等。

(2)Gradient Boosting

Gradient Boosting 是另一种常用的 Boosting 算法,它通过在残差空间中训练基础分类器来构建一个强分类器。在每一轮迭代中,Gradient Boosting 会根据损失函数的梯度将残差作为样本的标签,然后训练一个基础分类器。通过不断迭代,Gradient Boosting 可以逐步降低残差,提高整个模型的准确性。

(3)XGBoost

XGBoost 是一种基于 Gradient Boosting 算法的优化实现,它对 Gradient Boosting 做了一些改进,包括使用正则化控制过拟合、引入特征子采样等。XGBoost 在许多任务中都有较好的表现,被广泛应用于工业界和学术界。

(4)LightGBM

LightGBM 是另一种基于 Gradient Boosting 算法的优化实现,它在梯度计算和直方图算法上做了优化,能够快速训练大规模数据集,同时具有较好的准确性和泛化能力。

4.2集成学习优缺点讨论

集成学习是一种通过组合多个模型来提高预测准确性的机器学习方法,它有以下优点和缺点:

(1)优点

集成学习可以通过组合多个弱分类器来构建一个强分类器,从而提高整个模型的准确性和泛化能力。

集成学习能够有效地降低模型的方差,减少过拟合的风险,提高模型的稳定性和可靠性。

集成学习可以使用不同类型的基础模型,从而增加模型的多样性,进一步提高整个模型的准确性和鲁棒性。

集成学习对于数据噪声、缺失值等问题有较好的容错性,能够处理复杂的现实场景。

(2)缺点

集成学习需要训练多个模型,并且需要占用大量的计算资源和时间,从而增加了训练成本和复杂度。

集成学习需要进行多次模型集成和调参,过程较为繁琐,需要一定的经验和技能。

集成学习中的不同基础模型可能存在相关性,如果没有合理地选择和组合模型,可能导致集成模型的性能下降。

集成学习对于训练数据的质量要求较高,需要有足够多的样本和标签信息才能达到良好的效果。

4.3集成学习的应用场景

集成学习是一种将多个学习器进行集成以提高预测准确率的机器学习方法,其应用场景包括但不限于以下几个方面:

分类问题:集成学习可以用于分类问题,如图像分类、文本分类、情感分析等。

回归问题:集成学习也可以用于回归问题,如房价预测、股票价格预测等。

异常检测:集成学习可以用于异常检测,如网络入侵检测、信用卡欺诈检测等。

推荐系统:集成学习可以用于推荐系统中,如商品推荐、电影推荐等。

特征选择:集成学习可以用于特征选择,即从众多特征中选择最重要的特征。

模型融合:集成学习可以将不同的模型进行融合,如随机森林、Adaboost等。

迁移学习:集成学习可以用于迁移学习中,即将已学习的知识迁移到新的领域中。

自然语言处理:集成学习可以用于自然语言处理中,如机器翻译、问答系统等。

图像处理:集成学习可以用于图像处理中,如目标检测、图像分割等。

金融风险预测:集成学习可以用于金融风险预测中,如信用评估、欺诈检测等。

医疗诊断:集成学习可以用于医疗诊断中,如癌症诊断、心脏病诊断等。

人脸识别:集成学习可以用于人脸识别中,如人脸检测、人脸识别等。

总之,集成学习是一种非常灵活的机器学习方法,可应用于多种领域,特别是在需要提高预测准确率的场景下。

4.4boosting和bagging概念之间的区别

Boosting 和 Bagging 都是集成学习中的经典方法,它们的主要区别在于以下几个方面:

(1)集成方式不同:

Bagging(自助聚合)是一种通过随机抽样的方式构建多个基础模型,并将它们的预测结果进行平均或投票来得到最终预测结果的集成方法。而 Boosting(提升算法)则是一种通过迭代的方式构建多个基础模型,每次迭代都会根据前一次模型的预测结果对训练样本进行加权,以便下一轮模型能够更好地拟合误分类样本。

(2)基础模型不同:

Bagging 中的基础模型通常是相互独立的、弱分类器,例如决策树、随机森林等。而 Boosting 中的基础模型则是弱分类器的线性组合,例如 AdaBoost、GBDT 等。

(3)训练方式不同:

Bagging 中的基础模型可以并行训练,每个模型之间没有关联,可以同时训练多个模型,速度较快。而 Boosting 中的基础模型需要串行训练,每个模型之间有依赖关系,需要按顺序逐个训练,耗时较长。

(4)预测结果不同:

Bagging 的预测结果是多个模型的平均或投票结果,因此具有较高的稳定性和泛化能力。而 Boosting 的预测结果则是多个模型的线性组合,可以根据每个模型的权重来调整预测结果,因此具有更好的准确性和灵活性。

4.5集成学习模型的评价指标

集成学习可以进行回归和分类的建模。

(1)回归模型的评价指标有:

均方误差(Mean Squared Error,MSE)是预测值与真实值之间差值的平方的平均值,用来衡量模型的预测精度,MSE 越小,说明模型的预测结果越准确。

均方根误差(Root Mean Squared Error,RMSE)是均方误差的平方根,用来衡量模型的预测精度,RMSE 越小,说明模型的预测结果越准确。

平均绝对误差(Mean Absolute Error,MAE)是预测值与真实值之间差值的绝对值的平均值,用来衡量模型的预测精度,MAE 越小,说明模型的预测结果越准确。

决定系数(Coefficient of Determination,R-squared)用来衡量模型对数据的拟合程度,取值范围为 0~1,R-squared 越接近 1,说明模型对数据的拟合程度越好。

(2)分类模型的评价指标有:

准确率(Accuracy)是指分类正确的样本数占总样本数的比例,用来衡量模型的分类准确度。

精确率(Precision)是指分类为正类的样本中,实际为正类的样本数占分类为正类的样本数的比例,用来衡量模型对正类的分类准确度。

召回率(Recall)是指实际为正类的样本中,被分类为正类的样本数占实际为正类的样本数的比例,用来衡量模型对正类的识别能力。

F1 分数(F1-score)是精确率和召回率的调和平均数,用来综合衡量模型的分类准确度和识别能力。

ROC 曲线和 AUC 值是用来评估二元分类器性能的常用指标。ROC 曲线是以假正率(False Positive Rate,FPR)为横轴,真正率(True Positive Rate,TPR)为纵轴,绘制出来的曲线。AUC 值是 ROC 曲线下面积的大小,取值范围为 0~1,AUC 值越大,说明分类器的性能越好。

五、实验总结

本次实验我们探究了机器学习中的集成学习框架。首先以如何提高预测模型的准确率引入集成学习这一核心概念,然后简单介绍了集成学习的发展史,集成学习算法经历了漫长的发展过程,最早出现于 1979 年,经过多次改进和提升,如今已经衍生出了众多算法,包括 Boosting、Bagging、随机森林、深度堆叠网络等,这些算法能够显著提升模型的预测效果。而对于集成学习的学习组织方式,大致可分为并联组织方式和串联组织方式。它们最大的区别在于,并联的学习器彼此独立,而串联则是把预测结果传递给后面的学习器。

在本次实验第二部分,我花了很多的篇幅探究集成学习的实现方法,包括bagging、boosting及Stack,分别介绍了它们的基本流程及注意点。较为特殊的是,Stack不是一个集成学习模型,而是一个结合策略。几种比较简单的结合策略有投票法、平均法、stack。

在本次实验的第三部分,我对AdaBoost算法进行了实现,通过具体的“房价预测”实战。运行结果均显示Adaboost 模型的预测结果与真实结果非常吻合,具有较高的准确性。

在实验讨论部分,我首先讨论了boosting算法的分类,AdaBoost 是最早的 Boosting 算法之一;其次是集成学习的优缺点,集成学习能提高模型准确性和稳定性,但需要克服计算成本高、模型解释性差和基模型质量等挑战。很值得注意的一点是,Bagging 和 Boosting 在集成方式、基础模型、训练方式和预测结果等方面都有所不同,应根据具体问题和数据情况选择合适的方法。

在我的个人观点中,集成学习是一种非常有价值的机器学习技术。通过将多个模型的预测结果进行整合,可以提高模型的稳定性和准确性。这对于处理复杂的数据和任务尤为重要。然而,集成学习也需要考虑到计算成本、解释性以及基模型选择等方面的挑战。因此,在实际应用中,需要综合考虑各种因素,并针对具体问题选择适合的集成学习方法。总的来说,我认为集成学习对于提升机器学习算法的性能和应用价值具有重要意义。

​​​​​​​2024-1-22

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/640761.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QT实现USB通讯

一.概述 QT实现USB通讯这里主要介绍两种方法,一种是通过libusb库来实现usb通讯,一种是通过hidapi库实现通信。 1.介绍libusb库 libusb 是一个 C 库,提供对 USB 设备的通用访问。 可移植的:使用单个跨平台API,它可以…

一、防御保护---信息安全概述

一、网络安全防御---信息安全概述 1.信息安全现状及挑战1.1 网络空间安全市场在中国,潜力无穷1.2 数字化时代威胁升级1.3 传统安全防护逐步失效1.4 安全风险能见度不足1.5 缺乏自动化防御手段1.6 网络安全监管标准愈发严苛 2.信息安全概述2.1 简介2.2 常见的网络安全…

Java 设计者模式以及与Spring关系(四) 代理模式

目录 简介: 23设计者模式以及重点模式 代理模式(Proxy Pattern) 静态代理示例 spring中应用 动态代理 1.基于JDK的动态代理 target.getClass().getInterfaces()作用 内名内部类写法(更简洁,但不推荐) 2.基于CGLIB实现 spring中应用 …

uniapp使用自定义组件

tt.vue中使用video-player组件 用到的目录如下: pages.json {"path": "pages/Tabbar/tt/tt","style": {"navigationBarTitleText": "","enablePullDownRefresh": false,// 使用自定义组件"using…

C++ 类定义

C 类定义 定义一个类需要使用关键字 class,然后指定类的名称,并类的主体是包含在一对花括号中,主体包含类的成员变量和成员函数。 定义一个类,本质上是定义一个数据类型的蓝图,它定义了类的对象包括了什么&#xff0…

【论文阅读笔记】Swin-Unet: Unet-like Pure Transformer for Medical Image Segmentation

1.介绍 Swin-Unet: Unet-like Pure Transformer for Medical Image Segmentation Swin-Unet:用于医学图像分割的类Unet纯Transformer 2022年发表在 Computer Vision – ECCV 2022 Workshops Paper Code 2.摘要 在过去的几年里,卷积神经网络&#xff…

x-cmd pkg | dasel - JSON、YAML、TOML、XML、CSV 数据的查询和修改工具

目录 简介首次用户快速实验指南基本功能性能特点竞品进一步探索 简介 dasel,是数据(data)和 选择器(selector)的简写,该工具使用选择器查询和修改数据结构。 支持 JSON,YAML,TOML&…

CentOS 7 安装配置MySQL

目录 一、安装MySQL​编辑​编辑 1、检查MySQL是否安装及版本信息​编辑 2、卸载 2.1 rpm格式安装的mysql卸载方式 2.2 二进制包格式安装的mysql卸载 3、安装 二、配置MySQL 1、修改MySQL临时密码 2、允许远程访问 2.1 修改MySQL允许任何人连接 2.2 防火墙的问题 2…

TCP三握四挥(面试需要)

TCP建立连接需要三次握手过程,关闭连接需要四次挥手过程 三次握手 从图中可以看出,客户端在发起connect时,会发起第一次和第三次握手。服务端在接收客户端连接时,会发起第二次握手。 这三次握手,都会通过SYNACK的方式…

基于ChatGPT4+Python近红外光谱数据分析及机器学习与深度学习建模教程

详情点击链接:基于ChatGPT4Python近红外光谱数据分析及机器学习与深度学习建模教程 第一:GPT4 1、ChatGPT(GPT-1、GPT-2、GPT-3、GPT-3.5、GPT-4模型的演变) 2、ChatGPT对话初体验 3、GPT-4与GPT-3.5的区别,以及与…

20240122在WIN10+GTX1080下使用字幕小工具V1.2的使用总结(whisper)

20240122在WIN10GTX1080下使用字幕小工具V1.2的使用总结 2024/1/22 19:52 结论:这个软件如果是习作,可以打101分,功能都实现了。 如果作为商业软件/共享软件,在易用性等方面,可能就只能有70分了。 【百分制】 可选的改…

2017年认证杯SPSSPRO杯数学建模A题(第二阶段)安全的后视镜全过程文档及程序

2017年认证杯SPSSPRO杯数学建模 A题 安全的后视镜 原题再现: 汽车后视镜的视野对行车安全非常重要。一般来说,汽车的后视镜需要有良好的视野范围,以便驾驶员能够全面地了解车后方的道路情况。同时,后视镜也要使图像的畸变尽可能…

Centos升级gcc版本

步骤1:查看当前服务器gcc版本 gcc –version 步骤2:查看当前gcc安装目录 find / -name gcc cd /usr/bin ll gcc* 因为gcc,g,c都是配套的,查找出 g和c的原版本位置 步骤3:安装下载依赖包 yum install glibc-heade…

yolov8 opencv dnn部署 github代码

源码地址 本人使用的opencv c github代码,代码作者非本人 实现推理源码中作者的yolov8s.onnx 推理条件 windows 10 Visual Studio 2019 Nvidia GeForce GTX 1070 opencv4.7.0 (opencv4.5.5在别的地方看到不支持yolov8的推理,所以只使用opencv4.7.0) c部署 环境…

竞赛保研 机器视觉目标检测 - opencv 深度学习

文章目录 0 前言2 目标检测概念3 目标分类、定位、检测示例4 传统目标检测5 两类目标检测算法5.1 相关研究5.1.1 选择性搜索5.1.2 OverFeat 5.2 基于区域提名的方法5.2.1 R-CNN5.2.2 SPP-net5.2.3 Fast R-CNN 5.3 端到端的方法YOLOSSD 6 人体检测结果7 最后 0 前言 &#x1f5…

Maven《四》-- 基于Idea进行Maven工程构建

目录 🐶4.1 构建概念和构建过程 🐶4.2 命令方式项目构建 1. 🥙编译:mvn compile 2. 🥙清理:mvn clean 3. 🥙打包:mvn package 4. 🥙安装:mvn install …

泰迪科技最新大数据法律监督模型解决方案

大数据法律监督平台是基于监督数据整合管理平台、监督模型构建平台、内置模型库以及法律监督线索管理平台打造的一套服务于检察机关法律监督工作的专业化系统。通过数据采集、融合、挖掘、建模、展现等一系列能力,辅助检察官从纷繁复杂的数据中,开展多维…

java遍历(for和forEach)

1.dade文件 package model;public class dade {private int id;private String name;public dade() {}public dade(int id, String name) {this.id id;this.name name;}public int getId() {return id;}public void setId(int id) {this.id id;}public String getName() {r…

Python中的函数(二)

1 闭包与装饰器 1.1 闭包 闭包(Closure)是指在一个函数内部定义的函数,并且该内部函数可以访问外部函数作用域中的变量。闭包可以在外部函数执行完毕后,仍然保持对外部函数作用域的引用,从而可以继续访问和操作外部函…

【Java】--网络编程:基于TCP协议的网络通信

【Java】–网络编程:基于TCP协议的网络通信 文章目录 【Java】--网络编程:基于TCP协议的网络通信一、TCP协议1.1 概念1.2 三次握手1.2.1 文字描述1.2.2 画图演示 1.3 四次挥手1.3.1 文字描述1.3.2 画图演示 二、基于TCP的Socket网络编程2.1 概念2.2 服务…