百度
360搜索
搜狗搜索

stacking集成算法,集成学习的常用方法详细介绍

本文目录一览: 集成学习的常用方法

集成学习的常用方法有:堆叠(Stacking)、提升(Boosting)、袋装(Bagging)、随机森林(Random Forest)、并行集成(Parallel Ensemble)。
1、堆叠(Stacking):堆叠方法通过训练一个元学习器来组合多个基学习器的预测结果。首先,使用训练数据训练多个基学习器,然后将它们的预测结果作为输入,训练一个元学习器来进行最终的预测。
2、提升(Boosting):提升方法是通过迭代的方式训练一系列的弱学习器来提升整体的性能。在每个迭代过程中,弱学习器的重点是对先前的错误进行纠正,最终将所有弱学习器的结果进行加权组合。
3、袋装(Bagging):袋装方法通过在原始训练数据集上随机抽取多个子集,并使用每个子集进行独立的训练来构建多个基学习器。最后,通过统计这些基学习器的结果来进行最终的预测。
4、随机森林(Random Forest):随机森林是一种基于决策树的集成学习方法。它通过构建多个决策树,并对特征和样本进行随机抽样,以减少过拟合,并使用投票或平均的方式来组合这些决策树的结果。
5、并行集成(Parallel Ensemble):并行集成方法将基学习器并行训练,每个基学习器都使用不同的训练数据和特征集。最后,通过平均或投票的方式将所有基学习器的结果进行组合。
以上这些方法都有其独特的特点和适用场景。选择适合的集成学习方法取决于问题的性质、数据的特点以及算法的可行性。在实践中,通常需要通过交叉验证等方法来评估和选择最佳的集成学习方法。
集成学习的应用
1、机器学习分类问题:集成学习可用于解决分类问题。通过结合多个基学习器的预测结果,能够提高分类准确性和性能。例如,在声音识别、图像分类、垃圾邮件过滤等任务中都可以应用集成学习方法。
2、回归问题:集成学习也可以用于处理回归问题。通过结合多个基学习器的回归结果,能够提高结果的准确性和鲁棒性。例如,在房价预测、股票价格预测等领域中集成学习方法被广泛应用。
3、特征选择:集成学习可以通过组合多个基学习器的特征选择结果,来选择最重要和最有用的特征。这有助于降低维度和消除冗余特征,提高模型的效果和解释性。
4、异常检测:集成学习可用于检测异常情况,特别是在具有复杂和高维数据的场景下。通过结合多个基学习器的异常判断结果,可以提高检测的准确性和鲁棒性。在网络安全、信用卡欺诈检测等领域中应用广泛。
5、自然语言处理:集成学习可用于处理自然语言处理任务,如文本分类、情感分析和命名实体识别等。通过结合多个基学习器的预测结果,能够提高对文本的解析和理解能力。
这是集成学习应用的一小部分示例,实际上在很多领域都有成功的应用。集成学习方法的优点在于能够通过结合多个学习器的优势,并克服单个学习器的不足,从而提供更强大和可靠的结果。

stacking集成算法能有几层

就我所知道的,在boosting框架下有Adaboost,GBDT,xgboost;bagging框架的有随机森林。这两个框架中基分类器可以不限于决策树。
不限,但是很多情况下,两层的效果是相对比较好的,多层反而不好。在不同的数据集上多做实验试一下。

集成算法

集成学习包括Bagging方法和Boosting方法,下面详细分析这两种方法。
下面是决策树与这些算法框架进行结合所得到的新的算法: 1) Bagging + 决策树 = 随机森林 2)AdaBoost + 决策树 = 提升树 3)Gradient Boosting + 决策树 = GBDT
Bagging法假设训练样本集服从均匀分布,即1/N。
(1) 从训练样本集中 随机可放回抽样(Bootstrapping )N次 ,得到与训练集相同大小的训练集,重复抽样K次, 得到K个训练集 。 (2) 每个训练集得到一个最优模型, K个训练集得到K个最优模型。 (3) 分类问题:对K个模型采用 投票的方式得到分类结果 ;回归问题:对K个模型的值 求平均得到分 类结果。
每一个样本数据是有权重的,每一个学习器是有先后顺序的。在PAC(概率近似正确)的学习框架下,一定可以将弱分类器组装成一个强分类器。
(1)每一轮如何改变训练数据的权值和概率分布?
(2)通过什么方式来组合弱学习器?
其中,学习器性能越好,对应的权值也越大。样本权值1初始化为1/N,即初始样本集服从均匀分布,后面随着前一个学习器的结果更新样本权值。
集成学习得到多个学习器后,结合策略得到最终的结果。通常用到最多的是平均法,投票法和学习法。
适用范围:
规模大的集成,学习的权重较多 , 加权平均法易导致过拟合 个体学习器性能相差较大时宜使用加权平均法,相近用简单平均法 。
绝对多数投票法:某标记 超过半数 ,也就是我们常说的要票过半数,否则就当会拒绝预测; 相对多数投票法:预测为得票 最多 的标记,若同时有多个标记的票最高,则从中随机选取一个,也就是所谓的“少数服从多数”。 加权投票法:提供了预测结果,与加权平均法类似。
对于学习法,代表方法是stacking,当使用stacking的结合策略时, 我们不是对弱学习器的结果做简单的逻辑处理,而是再加上一层学习器,也就是说,我们 将训练集弱学习器的学习结果作为输入, 将训练集的输出作为输出,重新训练一个学习器来得到最终结果。 在这种情况下,我们将弱学习器称为初级学习器,将用于结合的学习器称为次级学习器。对于测试集,我们首先用初级学习器预测一次,得到次级学习器的输入样本,再用次级学习器预测一次,得到最终的预测结果。

1)训练样本集 Bagging:训练集是有放回抽样,从原始集中选出的K组训练集是相互独立的。 Boosting:每一次迭代的训练集不变。 2)训练样本权重 Bagging:每个训练样本的权重相等,即1/N。 Boosting:根据学习器的错误率不断调整样例的权值,错误率越大,权值越大。 3)预测函数的权重: Bagging:K组学习器的权重相等,即1/K。 Boosting:学习器性能好的分配较大的权重,学习器性能差的分配较小的权重。 4)并行计算 Bagging:K组学习器模型可以并行生成。 Boosting:K组学习器只能顺序生成,因为后一个模型的样本权值需要前一个学习器模型的结果。
Bagging和Boosting方法都是把若干个学习器整合为一个学习器的方法,Bagging方法可以降低模型的方差,Boosting方法可以降低模型的偏差,在实际工作中,因情况需要选择集成方法。

集成模型

1.1概述

? ? 集成学习(ensemble learning)本身不是一个单独的机器学习算法,而是通过在数据上构建多个模型,集成所有模型的建模结果。集成算法会考虑多个评估器的建模结果,汇总之后得到一个综合的结果,以此来获得比单个模型更好的回归或分类表现。

? ? 多个模型集成的模型叫集成评估器,组成集成评估器的每个模型都叫基评估器(base estimator),通常有三类集成算法:装袋法(Bagging),提升法(Boosting)和stacking.

? ? 装袋法的核心思想是构建多个相互独立的评估器,然后对其预测进行平均或是多数表决原则来决定集成评估器的结果,装袋法的代表模型就是随机森林。

? ? 提升法中,基评估器是相关的,是按顺序一一构建的,其核心思想是结合弱评估器的力量一次次对难以评估的样本进行预测,从而构成一个强评估器,提升法的代表模型:Adaboost和梯度提升树。

? ? stacking,就是当初始训练数据学出若干个基学习器后,将这几个学习器的预测结果作为新的训练集,来学习一个新的学习器。

随机森林原理与Sklearn参数详解

目录

1、集成算法概述

2 、 Sklearn中RandomForestClassifier重要参数详解

3、Sklearn中RandomForestRegressor重要参数详解

4、附录

5、总结

1、集成算法概述: 集成算法的目标是多个评估器建模的结果,汇总后得到一个综合结果,以此来获取比单个模型更好的回归或分类表现。多个模型集成成为的模型叫集成评估器,单个模型叫基评估器。通常说有三种集成算法:装袋法(Bagging)、提升法(Boosting)和stacking。装袋法的基本思想是构建多个相互独立的基评估器,然后通过预测平均或多数表决原则来决定集成评估器的结果。装袋法的典型代表就是随机森林(RandomForest)。

2、RandomForestClassifier重要参数:

n_estimators: integer, optional (default=100), 森林中基评估器的数量,即树的数量。n_estimators越大模型效果越好,但达到一定程度时,精确性趋于稳定。n_estimators越大模型的计算量越大,需要的内存也越大。

random_state: int, RandomState instance or None, optional (default=None), 控制树的生成模式。在DecisionTreeClassifier中random_state生成随机的一棵树,这里的参数控制的是随机生成一片森林模式。 用袋装法集成时,基分类器应当是相互独立的,是不同的。

bootstrap: boolean, optional (default=True), 要让基分类器尽量都不一样,一种方式是使用不同的训练数据集来训练不同的树。而装袋法采用的是有放回采样法,来确保每棵树的随机性。booststrap就是用来控制抽样技术的参数。

oob_score: bool (default=False), 是否启用袋外数据做测试。有放回采样策略中,自助数据集平均包含63%的原始数据被抽中(每个样本从原始数据抽中到自助集的概率为: =63%左右),也就是说袋外数据(out of bag data? 简称oob数据)大致占37%。在使用随机森林时,我们可以不划分测试和训练集,只要开启袋外数据支持,就可以用袋外数据测试我们的模型。然后这并不绝对,如果n足够大,则没有数据落入袋外,自然无法使用oob数据来测试模型了。如果需要用袋外数据做测试,则设置该参数为True,实例化并训练模型完成后,可以通过oob_score_来查看真是落入袋外的数据量。

重要属性与接口:

除了estimators_和oob_socre_这两个属性外,作为树模型也有feature_importances这个属性。

常用的接口主要有:apply,fit,predict和score。除此之外,还需要注意随机森林的predict_proba接口,该接口返回预测数据的被分到每一类标签的概率。如果是二分类,则predict_proba返回的数值大于0.5时被划分为1,否则为0。(在sklearn的随机森林中predict_proba返回每棵树的概率,然后取平均概率,从而根据概率值是否大于0.5划分为1,否则为0,来决定样本分类的)

Bagging要求基分类器相互独立,袋装法另一个必要条件是:基分类器的误差率要小于0.5,即准确率大于0.5,集成效果才好于基分类器。所以使用随机森林前,先要观察各基分类器是否都有至少50%的预测正确率。

3、RandomForestRegressor重要参数:

criterion:string, optional (default=”mse”)

1、输入“mse”使用均方误差mean squared err(MSE),父节点和子节点之间的均方误差的差额将被用来作为特征选择的标准,这种方法通过使用叶子节点的均值来最小化L2损失。

2、输入“friedman_mse”使用费尔德曼均方误差,这种指标使用费尔德曼针对潜在分枝中的问题改进后的均方误差。

3、输入“mae”使用绝对平均误差MAE(mean absolute error),这种指标使用叶节点的中值来最小化L1损失。

其中N是样本数量,i是每一个数据样本,fi是模型回归出的数值,yi是样本点i实际的数值标签。因此MSE的本质是回归值与真实值的差异。 在回归树中,MSE不仅是最优的分枝指标,也是最常用的衡量回归树回归质量的指标。

回归树接口:

score: 返回的是R平方,并不是MSE。R平方定义如下:

, , ,

其中u是残差平方和(MSE*N),v是总平方和,N是样本数量,i是每个样本,fi是模型回归出的值,yi是样本点i的实际数值标签。y帽是真实数值标签的平均数。

R2可以为正也可以为负,当残差平方和远远大于模型总平方和时,模型非常糟糕,R2为负;但MSE永远为正。但Sklearn当中使用均方误差作为评判标准时,却是计算“负均方误差”(neg_mean_squared_error)以负数表示。其实就是MSE前加了个负号。

4、附录

参数列表

属性列表

接口列表

5、总结: 本文详细介绍了集成学习中Bagging的典型代表随机森林的工作原理,同时对sklearn中RandomForestClassifier和RandomForestRegressor核心参数、属性、接口进行了介绍。

Stacking算法

大家都是只关注stacking的操作是什么,虽然这很重要,但是却没有说明白为何有效。这一直是困惑我的点,我想通过论文搞清这些东西。貌似没找到,找到再贴。
??我们将假设训练数据:train.csv有1000行;测试数据:test.csv有200行。然后按照下图所示训练:

最后,我想贴一些现成的stacking的框架的链接:
https://github.com/liyi19950329/stacking
https://github.com/liyi19950329/vecstack
https://github.com/liyi19950329/mlens
https://github.com/rasbt/mlxtend
https://github.com/mpearmain/gestalt
https://github.com/reiinakano/xcessiv
https://github.com/kaz-Anova/StackNet
这些框架都集成好了,学会使用就能实现stacking,不过我还是建议看看源码
如果源码看不下去,可以看看kaggle的教程: https://www.kaggle.com/arthurtok/introduction-to-ensembling-stacking-in-python

Blending:用不相交的数据训练不同的 Base Model,将它们的输出取(加权)平均。实现简单,但对训练数据利用少了。

模型融合方法总结

????????一般来说,通过融合多个不同的模型,可能提升机器学习的性能,这一方法在各种 机器学习比赛 中广泛应用,比如在kaggle上的otto产品分类挑战赛①中取得冠军和亚军成绩的模型都是融合了1000+模型的“庞然大物”。

????????常见的集成学习&模型融合方法包括:简单的Voting/Averaging(分别对于分类和回归问题)、Stacking、Boosting和Bagging。

????????在不改变模型的情况下,直接对各个不同的模型预测的结果,进行投票或者平均,这是一种简单却行之有效的融合方式。

????????比如对于 分类问题 ,假设有三个相互独立的模型,每个正确率都是70%,采用少数服从多数的方式进行投票。那么最终的正确率将是:

????????即结果经过简单的投票,使得正确率提升了8%。这是一个简单的概率学问题——如果进行投票的模型越多,那么显然其结果将会更好。但是其 前提条件是模型之间相互独立,结果之间没有相关性。越相近的模型进行融合,融合效果也会越差。

????????比如对于一个正确输出全为1的测试,我们有三个很相近的的预测结果,分别为:

进行投票其结果为:

而假如我们的各个预测结果之间有很大差异:

其投票结果将为:

????????可见模型之间差异越大,融合所得的结果将会更好。//这种特性不会受融合方式的影响。 注意这里所指模型之间的差异,并不是指正确率的差异,而是指模型之间相关性的差异。

? ??????对于 回归问题 ,对各种模型的预测结果进行平均,所得到的结果通过能够减少过拟合,并使得边界更加平滑,单个模型的边界可能很粗糙。这是很直观的性质,随便放张图②就不另外详细举例了。

????????在上述融合方法的基础上,一个进行改良的方式是对各个投票者/平均者分配不同的权重以改变其对最终结果影响的大小。对于正确率低的模型给予更低的权重,而正确率更高的模型给予更高的权重。这也是可以直观理解的—— 想要推翻专家模型(高正确率模型)的唯一方式,就是臭皮匠模型(低正确率模型)同时投出相同选项的反对票 。 具体的对于权重的赋值,可以用正确率排名的正则化等。

????????这种方法看似简单,但是却是下面各种“高级”方法的基础。

????????Boosting是一种将各种弱分类器串联起来的集成学习方式,每一个分类器的训练都依赖于前一个分类器的结果,顺序运行的方式导致了运行速度慢。和所有融合方式一样,它不会考虑各个弱分类器模型本身结构为何,而是对训练数据(样本集)和连接方式进行操纵以获得更小的误差。但是为了将最终的强分类器的误差均衡,之前所选取的分类器一般都是相对比较弱的分类器,因为一旦某个分类器较强将使得后续结果受到影响太大。 所以多用于集成学习而非模型融合(将多个已经有较好效果的模型融合成更好的模型)。

????????这里引用知乎专栏 《【机器学习】模型融合方法概述》③处引用的加州大学欧文分校Alex Ihler教授的两页PPT:

????????其基本工作机制如下:

? ? ? ? 1、从初始样本集中训练出一个基学习器;

? ? ? ? 2、根据基学习器的表现对样本集分布进行调整,使得做错的样本能在之后的过程中受到更多的关注;

? ? ? ? 3、用调整后的样本集训练下一个基学习器;

? ? ? ? 4、重复上述步骤,直到满足一定条件。

? ?????? 注意,一般只有弱分类器都是同一种分类器(即同质集成)的时候,才将弱分类器称为基学习器,如果是异质集成,则称之为个体学习器。由于不是本文重点,所以此处不作区分。特此说明。

????????最终将这些弱分类器进行 加权相加 。

????????常见的Boosting方法有Adaboost、GBDT、XGBOOST等。 //下面仅从思想层次上简单介绍各种方法,具体的算法推理公式推导以及可用的工具包等参考本文附录。

????????Bagging是 Bootstrap?Aggregating 的缩写。这种方法同样不对模型本身进行操作,而是作用于样本集上。采用的是随机有放回的选择训练数据然后构造分类器,最后进行组合。与Boosting方法中各分类器之间的相互依赖和串行运行不同,Bagging方法中基学习器之间不存在强依赖关系,且同时生成并行运行。

????????其基本思路为:

? ? ? ? 1、在样本集中进行K轮有放回的抽样,每次抽取n个样本,得到K个训练集;

? ? ? ? 2、分别用K个训练集训练得到K个模型。

? ? ? ? 3、对得到的K个模型预测结果用投票或平均的方式进行融合。

? ?????? 在这里,训练集的选取可能不会包含所有样本集,未被包含的数据成为包/袋外数据,可用来进行包外误差的泛化估计。每个模型的训练过程中,每次训练集可以取全部的特征进行训练,也可以随机选取部分特征训练,例如极有代表性的随机森林算法就是每次随机选取部分特征。

????????下面仅从思想层面介绍随机森林算法:

? ? ? ? 1、在样本集中进行K轮有放回的抽样,每次抽取n个样本,得到K个训练集,其中n一般远小于样本集总数;

? ? ? ? 2、选取训练集,在整体特征集M中选取部分特征集m构建决策树,其中m一般远小于M;

? ? ? ? 3、在构造每棵决策树的过程中,按照选取最小的基尼指数进行分裂节点的选取进行决策树的构建。决策树的其他结点都采取相同的分裂规则进行构建,直到该节点的所有训练样例都属于同一类或者达到树的最大深度;

? ? ? ? 4、重复上述步骤,得到随机森林;

? ? ? ? 5、多棵决策树同时进行预测,对结果进行投票或平均得到最终的分类结果。

????????多次随机选择的过程,使得随机森林不容易过拟合且有很好的抗干扰能力。

优化方式上 >

? ??????在机器学习中,我们训练一个模型通常是将定义的Loss最小化的过程。但是单单的最小化loss并不能保证模型在解决一般化的问题时能够最优,甚至不能保证模型可用。训练数据集的Loss与一般化数据集的Loss之间的差异被称为generalization error。

阅读更多 >>>  软件测试自学网,软件开发如何开始学习?

????????Variance过大会导致模型过拟合,而Bias过大会使得模型欠拟合。

? ? ????? Bagging 方法主要通过降低 Variance 来降低 error , Boosting 方法主要通过降低 Bias 来降低 error 。

????????Bagging方法采用多个不完全相同的训练集训练多个模型,最后结果取平均。由于

????????所以最终结果的Bias与单个模型的Bias相近,一般不会显著降低Bias。????

????????另一方面,对于Variance则有:

????????Bagging的多个子模型由不完全相同的数据集训练而成,所以子模型间有一定的相关性但又不完全独立,所以其结果在上述两式的中间状态。因此可以在一定程度上降低Variance从而使得总error减小。

????????Boosting方法从优化角度来说,是用forward-stagewise这种贪心法去最小化损失函数

。所谓forward-stagewise,就是在迭代的第n步,求解新的子模型f(x)及步长a(或者称组合系数),来最小化

,这里

是前n步得到的子模型的和。因此Boosting在最小化损失函数,Bias自然逐步下降,而由于模型间强相关,不能显著降低Variance。

????????Bagging里面每个分类器是强分类器,因为他降低的是方差,方差过高需要降低是过拟合。

????????boosting里面每个分类器是弱分类器,因为他降低的是偏差,偏差过高是欠拟合。

样本选择上>

????????Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。

????????Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。

样例权重 >

????????Bagging:使用均匀取样,每个样例的权重相等

????????Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大

预测函数 >

????????Bagging:所有预测函数的权重相等。

????????Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重

并行计算 >

????????Bagging:各个预测函数可以并行生成

????????Boosting:理论上各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。计算角度来看,两种方法都可以并行。bagging,random forest并行化方法显而意见。boosting有强力工具stochastic gradient boosting

????????接下来介绍在 各种机器学习比赛中 被誉为“七头龙神技”的Stacking方法。

? ?????? (但因其模型的庞大程度与效果的提升程度往往不成正比,所以一般很难应用于实际生产中)

? ??????下面以一种易于理解但不会实际使用的两层的stacking方法为例,简要说明其结构和工作原理: (这种模型问题将在后续说明)

????????假设我们有三个基模型M1,M2,M3,用训练集对其进行训练后,分别用来预测训练集和测试集的结果,得到P1,T1,P2,T2,P3,T3

????????这种方法的问题在于,模型M1/2/3是我们用整个训练集训练出来的,我们又用这些模型来预测整个训练集的结果,毫无疑问过拟合将会非常严重。因此在实际应用中往往采用 交叉验证 的方法来解决过拟合问题。

????????首先放几张图⑤,我们着眼于Stacking方法的第一层,以5折交叉验证为例说明其工作原理:

1、首先我们将训练集分为五份。

2、对于每一个基模型来说,我们用其中的四份来训练,然后对未用来的训练的一份训练集和测试集进行预测。然后改变所选的用来训练的训练集和用来验证的训练集,重复此步骤,直到获得完整的训练集的预测结果。

3、对五个模型,分别进行步骤2,我们将获得5个模型,以及五个模型分别通过交叉验证获得的训练集预测结果。即P1、P2、P3、P4、P5。

4、用五个模型分别对测试集进行预测,得到测试集的预测结果:T1、T2、T3、T4、T5。

5、将P1~5、T1~5作为下一层的训练集和测试集。在图中分别作为了模型6的训练集和测试集。

????????Stacking方法的整体结构如下图所示:

????????Blending是一种和Stacking很相像的模型融合方式,它与Stacking的区别在于训练集不是通过K-Fold的CV策略来获得预测值从而生成第二阶段模型的特征,而是建立一个Holdout集,例如10%的训练数据,第二阶段的stacker模型就基于第一阶段模型对这10%训练数据的预测值进行拟合。

????说白了,就是把Stacking流程中的K-Fold CV 改成HoldOut CV。

????以第一层为例,其5折HoldOut交叉验证将如下图③所示:

? ?????? 需要注意的是,网上很多文章在介绍 Stacking 的时候都用了上面 Blending 的图还强行解释了的,比如③、⑤等。

? ?? Stacking 与 Blending 相比 ,Blending的优势在于:

? ? 1、Blending比较简单,而Stacking相对比较复杂;

? ? 2、能够防止信息泄露:generalizers和stackers使用不同的数据;

? ? 3、不需要和你的队友分享你的随机种子;

????而缺点在于:

? ? 1、只用了整体数据的一部分;

? ? 2、最终模型可能对留出集(holdout set)过拟合;

? ? 3、Stacking多次交叉验证要更加稳健。

????文献②中表示两种技术所得的结果都相差不多,如何选择取决于个人喜好。如果难以抉择的话,可以同时使用两种技术并来个第三层将其结果合并起来。

以上为本人学习的总结,很多内容都未经实际验证,如果发现总结中有错误或与实际表现不符,敬请指正。

【参考文献】

①https://www.kaggle.com/c/otto-group-product-classification-challenge

②https://mlwave.com/kaggle-ensembling-guide/

③https://zhuanlan.zhihu.com/p/25836678

④https://blog.csdn.net/Mr_tyting/article/details/72957853

⑤https://blog.csdn.net/data_scientist/article/details/78900265

⑥https://mlwave.com/human-ensemble-learning/

⑦https://blog.csdn.net/sinat_29819401/article/details/71191219

⑧https://blog.csdn.net/zwqjoy/article/details/80431496

⑨http://lib.csdn.net/article/machinelearning/35135

130在线民宿 UGC 数据挖掘实战--集成模型在情感分析中的应用

本次实验将加载两个数据,一个是已经标注好的用户评论数据,另外一个是用户评价主题句,通过标注过的用户评论数据进行基于集成模型的情感极性模型训练,然后利用模型对主题句进行情感极性推理,最后通过数据聚合可视化得出主题情感极性。 使用 Pandas 加载在线数据表格,并查看数据维度和前 5 行数据。
数据属性如下表所示
加载我们之前通过主题词典提取出来的主题句。
数据属性如下表所示

用户评论分词 jieba 分词器预热,第一次使用需要加载字典和缓存,通过结果看出返回的是分词的列表。
批量对用户评价进行分词,需要一些时间,并打印第一行情感极性训练集的分词结果。
批量对用户评价主题句进行分词,并打印第一句用户主题句分词结果。
依据统计学模型假设,假设用户评论中的词语之间相互独立,用户评价中的每一个词语都是一个特征,我们直接使用 TF-IDF 对用户评价提取特征,并对提取特征后的用户评价输入分类模型进行分类,将类别输出为积极的概率作为用户极性映射即可。 用户评论向量化 TF-IDF 是一种用于信息检索与数据挖掘的常用加权技术,当某个词在文章中的TF-IDF越大,那么一般而言这个词在这篇文章的重要性会越高,比较适合对用户评论中的关键词进行量化。
数据集合划分 按照训练集 8 成和测试集 2 成的比例对数据集进行划分,并检查划分之后的数据集数量。
我们在系列实验的开始使用朴素贝叶斯模型来训练情感分析模型,下面我们新增逻辑回归模型作为对比模型。逻辑回归(Logistic Regression)是一种用于解决二分类问题的机器学习方法,在线性回归的基础上,套用了一个 sigmod 函数,这个函数将线性结果映射到一个概率区间,并且通常以 0.5 分界线,这就使得数据的分类结果都趋向于在 0 和 1 两端,将用户评论进行向量化之后也可以用此方式预测用户情感。本实验直接对标注过的用户情感数据进行训练,并验证单一模型和集成模型在情感分析性能上的差异。 模型加载
通过传入原始的标签和预测的标签可以直接将分类器性能进行度量,利用常用的分类模型评价指标对训练好的模型进行模型评价,accuracy_score 评价被正确预测的样本占总样本的比例,Precision 是衡量模型精确率的指标,它是指模型识别出的文档数与识别的文档总数的比率,衡量的是模型的查准率。Recall 召回率也称为敏感度,它是指模型识别出的相关文档数和文档库中所有的相关文档数的比率,衡量的是检索系统的查全率,表示正样本在被正确划分样本中所占的比例,f1_score 值是精确率与召回率的调和平均数,是一个综合性的指数。
我们分别对不同模型使用相同的数据集进行训练和测试,以此来比较单模型之间的差异,并打印模型运行时间供大家参考,批量处理不同的模型需要一些时间进行计算,清耐心等待。
通过求得的指标进行模型评价,我们发现使用相同的数据进行模型训练,朴素贝叶斯模型和逻辑回归模型性能基本持平,相差很微弱,逻辑回归稍稍占一些优势。
Stacking 堆栈模型训练 集成学习是地结合来自两个或多个基本机器学习算法的优势,学习如何最好地结合来自多个性能良好的机器学习模型的预测结果,并作出比集成中的任何一个模型更好的预测。主要分为 Bagging, Boosting 和 Stacking,Stacking 堆栈模型是集成机器学习模型的一种,具体是将训练好的所有基模型对整个训练集进行预测,然后将每个模型输出的预测结果合并为新的特征,并加以训练。主要能降低模型的过拟合风险,提高模型的准确度。
开始对两个模型进行集成训练,训练的时间要比单一模型时间久一些,清耐心等待。
评测结果收集。
结果分析 将结果存入 Dataframe 进行结果分析,lr 表示逻辑回归,nb 表示朴素贝叶斯,model_stacking 将两个单模型集成后的模型。从结果来看集成模型准确度和 f1 值都是最高的,结合两个模型的优势,整体预测性能更好,鲁棒性更好。
样例测试 通过测试样例发现,分类器对正常的积极和消极判断比较好。但是当我们改变语义信息,情感模型则不能进行识别,模型鲁棒性较差。作为早期的文本分类模型,我们使用 TFIDF 的特征提取方式并不能很好的解决语义问题,自然语言是带有语序和语义的关联,其词语之间的关联关系影响整句话的情感极性,后续我们继续试验深度情感分析模型研究解决此类问题。
加载民宿主题数据。
模型预测
将情感分析模型推理的结果写入 DataFrame 中进行聚合。
单主题聚合分析 挑选一个主题进行主题情感分析。
对民宿“设施”进行描述统计,此次我们使用主题词典的出来的用户关于民宿“设施”主体的讨论条数为 4628 条,平均用户情感极性为 0.40 表示为整体呈现不满意的情况,有超过一半的关于“设施”的民宿评论中表现用户不满意的情况,重庆民宿需要在“设施”进行改善,以此提高用户满意度。
单主题情感极性可视化 我们开始进行“设置”主题下的用户主题情感进行可视化,首先加载画图模块。
对“设施”主题下的用户情感极性进行可视化,我们利用集成模型对主题句进行情感极性预测,如下所示。

正则化是什么意思

正则化的意思:修改学习算法,使其降低泛化误差而非训练误差。
正则化,英文为regularizaiton,定义是修改学习算法,使其降低泛化误差(generalization error)而非训练误差。旨在更好实现模型泛化的补充技术,即在测试集上得到更好的表现。它是为了防止过拟合,进而增强模型的泛化能力。
正则化的常见方法
1、提前终止法(earlystopping)
提前终止法适用于模型表达能力很强的时候。此时模型的训练误差会随着训练次数的增多而逐渐下降,但是训练误差却会随着训练次数的增加呈现先下降再上升的趋势(模型可能开始过拟合),提前终止法就是在训练误差最低的时候终止训练。
2、模型集成(ensemble)
常用的模型集成方法有:bagging、boosting、stacking。
3、dropoutd
dropoutd的基本步骤是在每一次的迭代中,随机删除一部分节点,只训练剩下的节点。每次迭代都会随机删除,每次迭代删除的节点也都不一样,相当于每次迭代训练的都是不一样的网络,通过这样的方式降低节点之间的关联性以及模型的复杂度,从而达到正则化的效果。

网站数据信息

"stacking集成算法,集成学习的常用方法"浏览人数已经达到17次,如你需要查询该站的相关权重信息,可以点击进入"Chinaz数据" 查询。更多网站价值评估因素如:stacking集成算法,集成学习的常用方法的访问速度、搜索引擎收录以及索引量、用户体验等。 要评估一个站的价值,最主要还是需要根据您自身的需求,如网站IP、PV、跳出率等!