集成学习:综述

Ensemble learning: A survey

集成方法被认为是解决许多机器学习挑战的最先进解决方案。此类方法通过训练多个模型并组合其预测,从而提高单一模型的预测性能。本文介绍了集成学习的概念,回顾了传统、新颖和最先进的集成方法,并讨论了该领域的当前挑战和趋势。

本文分类于:
算法开发(Algorithmic Development) > 集成方法(Ensemble Methods)
技术(Technologies) > 机器学习(Machine Learning)
技术(Technologies) > 分类(Classification)

关键词: 提升 (Boosting), 分类器组合(classifier combination), 集成模型(ensemble models), 机器学习(machine-learning), 专家混合(mixtures of experts), 多分类器系统(multiple classifier system), 随机森林(random forest)

1 INTRODUCTION(引言)

集成学习是一个统称,指在监督机器学习任务中组合多个学习器(基学习器)来做出决策的方法。学习器(或称基学习器)是一种算法,它接收一组带标签的样本作为输入,并生成一个能泛化这些样本的模型(例如分类器或回归器)。通过使用生成的模型,可以对新的未标记样本进行预测。集成学习器可以是任何类型的机器学习算法(例如决策树、神经网络、线性回归模型等)。集成学习的主要前提是,通过组合多个模型,单个学习器的错误很可能被其他学习器补偿,从而使得集成的整体预测性能优于单个学习器

集成学习通常被视为群体智慧在机器学习中的体现。这一概念可以通过弗朗西斯·高尔顿爵士(1822-1911)的故事来说明,他是一位英国哲学家和统计学家,构思了标准差和相关性的基本概念。在参观一次牲畜博览会时,高尔顿进行了一个简单的重量竞猜比赛。参与者被要求猜测一头牛的重量。数百人参加了比赛,但没有人猜中准确的重量:1,198磅。令他惊讶的是,高尔顿发现所有猜测的平均值非常接近精确重量:1,198磅。在这个实验中,高尔顿揭示了组合多个预测以获得准确预测的力量。集成方法在机器学习挑战中体现了这一概念,与单一模型相比,它们能带来预测性能的提升。此外,当参与学习器的计算成本较低时(例如决策树),集成模型通常非常高效。

如今,集成被认为是解决众多机器学习挑战的最先进方法,正如一项广泛比较研究所展示的:该研究使用了来自UCI的121个数据集以及各种现实挑战,比较了来自17个家族的179种分类器(Fernández-Delgado, Cernadas, Barro, & Amorim, 2014)。最近,文献中发表了几篇关于集成学习的全面综述(Gomes, Barddal, Enembreck, & Bifet, 2017; Kulkarni & Sinha, 2013; Rokach, 2016; Wozniak, Graña, & Corchado, 2014)。虽然这些综述各自强调了一个特定的子研究领域,但它们并未呈现集成方法的整体视图。其他提供了集成模型广泛视图的综合性工作(Polikar, 2006; Ren, Zhang, & Suganthan, 2016; Rokach, 2010)未能涵盖最近提出的一些显著进展和发现。本文旨在作为集成模型的入门介绍,并综述该领域的最先进方法。我们还对当前研究热点进行了深入回顾,例如将集成学习融入深度神经网络、用于训练集成模型的分布式算法,以及将集成模型转化为更简单的模型。本文其余部分组织如下:首先,我们介绍集成学习的基础和起源,解释集成学习的工作原理并阐述其优势。下一节介绍构建集成模型和组合学习器输出的不同通用方法。然后,我们回顾一些构建集成学习器最常用的方法。最后,我们介绍共识聚类(consensus clustering),并讨论用于简化集成模型的不同方法。

2 ENSEMBLE LEARNING FOUNDATIONS(集成学习基础)

集成学习指的是生成并组合多个学习器(inducers)来解决特定的机器学习任务。对集成方法论的直观解释源于人类本性,即倾向于收集不同的意见,对其进行权衡(weigh)与组合(combine),以做出复杂的决策。其主要思想是,权衡并聚合多个个体的意见,比只选择一个个体的意见更好。此类决策的一个例子是为疾病匹配合适的医疗方案(Polikar, 2006)。

2.1 Background(背景)

玛丽·让·安托万·尼古拉·德·卡里塔(Marie Jean Antoine Nicolas de Caritat,1743-1794)是一位法国数学家,他于1785年提出了著名的孔多塞陪审团定理(Condorcet’s jury theorem)。该定理讨论的是一个由投票者组成的陪审团,他们需要对一个二元结果(例如,是否定罪被告)做出决策。如果每个投票者做出正确判断的概率 p>.5p > .5p>.5(即每个投票者比随机猜测更可能正确),并且假设投票是独立的,那么增加投票者的数量可以提高做出正确决策的概率。这个定理有两个主要局限性:投票独立的假设以及只有两种可能的结果。詹姆斯·迈克尔·苏罗维茨基(James Michael Surowiecki)在其2004年的著作《群体的智慧:为什么多数人比少数人更聪明,以及集体智慧如何塑造商业、经济、社会和国家》(The Wisdom of Crowds: Why the Many Are Smarter than the Few and How Collective Wisdom Shapes Business, Economics, Societies and Nations)中详细阐述了这一概念。他描述了如何整合来自不同来源的信息,从而做出通常优于单一个体的决策。当然,并非所有群体都是智慧的(例如,股市泡沫中的贪婪投资者)。根据苏罗维茨基的观点,当满足以下标准时,群体的智慧很可能超越单个决策者

  1. 独立性(Independence): 个体的意见不受其他意见的影响。
  2. 去中心化(Decentralization): 个体能够基于局部信息进行专业化并得出结论。
  3. 意见多样性(Diversity of opinions): 个体应持有私有信息,即使这仅仅是对已知事实的独特解读。
  4. 聚合(Aggregation): 存在某种机制将个体的判断转化为集体决策。

这些概念在监督学习背景下的体现自20世纪70年代起就得到了探索,当时图基(Tukey, 1977)提出了由两个线性回归模型组成的集成。图基建议将第一个线性回归模型拟合到原始数据上,再将第二个线性模型拟合到残差上。两年后,Dasarathy 和 Sheela (1979) 建议使用两个或多个不同类别的分类器组合成一个分类器系统。20世纪90年代,该领域取得了重大进展,如图1所示。Hansen 和 Salamon (1990) 首次表明,通过调用神经网络集成,可以降低神经网络的泛化误差。大约在同一时期,Schapire (1990) 描述了在可能近似正确(PAC)的意义上组合多个弱学习器如何可能优于一个强学习器。这项工作为著名的 AdaBoost(自适应提升)算法奠定了基础。自此以后,集成模型能够提高单一模型预测性能的观点被反复证实。Oza 和 Turner (2008) 回顾了集成方法在遥感、人员识别、一对多识别(one versus all recognition)和医学等领域的应用。过去几年的研究展示了集成方法在目标检测(Paistikriangkrai, Shen, & van den Hengel, 2016)、教育(Beemer, Spoon, He, Fan, & Levine, 2017)和恶意软件检测(Idrees, Rajarajan, Conti, Chen, & Rahulamathavan, 2017)中的成功应用。
在这里插入图片描述
图1 每年发表的论文数量,基于在“web of science”数据库中搜索术语“ensemble”和“machine learning”

2.2 Why ensemble methods work?(为什么集成方法有效?)

集成方法之所以能提高预测性能,有以下几个原因(Dietterich, 2002; Polikar, 2006):

  • 避免过拟合(Overfitting avoidance): 当可用数据量很少时,学习算法容易找到许多不同的假设(hypotheses),这些假设能完美预测所有训练数据,但对未见实例的预测效果却很差。对不同假设进行平均(Averaging)可以降低选择错误假设的风险,从而提高整体预测性能。
  • 计算优势(Computational advantage): 进行局部搜索的单一学习器可能会陷入局部最优(local optima)。通过组合多个学习器,集成方法降低了陷入局部最小的风险
  • 表示能力(Representation): 最优假设可能不在任何单一模型的假设空间内。通过组合不同的模型,可以扩展搜索空间,从而更好地拟合数据空间。图2展示了一个仅使用两个属性的简单二分类任务的训练集。目标是根据邮件长度(x轴)和收件人数量(y轴),归纳出一个能将新邮件分类为垃圾邮件(哭脸)或非垃圾邮件(笑脸)的分类器。在这个例子中,我们使用决策桩(decision stump)作为模型。决策桩是一个弱分类器,只包含一次分裂(split)。在图2a中,我们可以看到每个决策桩仍然会错误分类一些训练实例。然而,图2b显示,通过组合所有三个决策桩,我们获得了对训练实例的完美拟合。
    在这里插入图片描述
    图2:组合决策桩实现完美分类

2.3 Ensemble learning and unique machine learning challenges(集成学习与独特的机器学习挑战)

存在几种对机器学习算法构成非平凡挑战(nontrivial challenges)的场景。如下所述,集成方法可用于缓解这些挑战:

  • 类不平衡(Class imbalance)许多机器学习问题中存在某一类别的样本数量远多于其他类别的情况(Japkowicz & Stephen, 2002)。在这种情况下,机器学习算法可能会倾向于多数类(majority class)而忽略少数类(minority classes)。集成方法可以应用于缓解类不平衡问题。一种方法是创建一个集成,其中每个学习器都使用数据的平衡子样本(balanced subsample)进行训练(Nikulin & Ng, 2009)。另一项研究展示了将随机欠采样技术(random under-sampling techniques)与集成技术(如装袋bagging或提升boosting)相结合,可以显著提高类不平衡问题的预测性能(Galar, Fernandez, Barrenechea, Bustince, & Herrera, 2012)。通过使用EUSBoost方法,预测性能可以进一步提高,该方法利用进化欠采样(evolutionary under-sampling) 来促进个体学习器之间的多样性(Galar, Fernandez, Barrenechea, & Herrera, 2013)。

  • 概念漂移(Concept drift): 在许多实时机器学习应用中,特征的分布和标签往往会随时间变化。这种现象通常会随着时间推移影响模型的预测性能。基于集成的方法通常是解决此问题的一种补救措施。例如,在动态加权多数(Dynamic Weighted Majority, DWM) 方法中(Kolter & Maloof, 2003),会根据预测性能的变化动态地创建和删除单个决策树。另一项研究探讨了集成中不同的多样性水平如何影响其对新概念的泛化能力(Minku, White, & Yao, 2010)。这项工作还表明,仅靠多样性就可以减少由漂移引起的初始误差增加。处理漂移的多样性(Diversity for Dealing with Drifts, DDD) 方法(Minku & Yao, 2012)体现了这一概念,它通过维护两个具有不同多样性水平的决策树(决策森林)集成来实现。在这种方法中,在漂移检测发生之前使用低多样性森林。检测到漂移后,训练新的低多样性和高多样性森林,并基于(a)旧的高多样性森林、(b)新的低多样性森林和(c)旧的低多样性森林的加权多数投票(weighted majority voting)来预测新实例。ADWIN 是另一种方法,当集成成员的准确性显著下降时,可以重置它们(Bifet, Frank, Holmes, & Pfahringer, 2010)。该方法也可以与在线装袋集成(online bagging ensembles)结合使用(Bifet, Holmes, Pfahringer, Kirkby, & Gavalda, 2009)。

  • 维数灾难(Curse of dimensionality) :增加输入到机器学习模型的特征数量通常会以指数方式增加搜索空间,从而导致拟合出无法泛化的模型的可能性增加。这种现象被称为维数灾难。某些集成学习方法可用于减轻这种现象的影响。Bryll, Gutierrez-Osuna, 和 Quek (2003) 引入了属性装袋(Attribute Bagging, AB),这是一种使用随机选择的特征子集来训练学习器的方法。AB还尝试通过评估不同子集大小所获得的准确性来确定特征子集的适当大小。改进决策森林(Improved Decision Forest, IDF; Huang, Fang, & Fan, 2010) 是一种决策森林算法,通过应用指定的特征选择机制来处理高维数据集。它适用于由数千个基因组成的基因表达数据。Rokach (2008) 提出了一种遗传算法,用于搜索特征集的最佳互斥划分(mutually exclusive partition),以替代随机划分。最优特征集划分(Optimal Feature Set Partitioning, OFSP) 方法预先创建固定数量的特征视图(feature views),以降低维度并优化准确性(Kumar & Minz, 2016)。

3 BUILDING AN ENSEMBLE MODEL(构建集成模型)

给定一个包含 nnn 个样本和 mmm 个特征的数据集 D={(xi,yi)}(∣D∣=n,xi∈Rm,yi∈R)D = \{(x_i, y_i)\}(|D| = n, x_i \in R^m, y_i \in R)D={(xi,yi)}(D=n,xiRm,yiR),一个集成学习模型 φ\varphiφ 使用一个聚合函数 GGG,该函数聚合 KKK 个学习器 {f1,f2,...,fk}\{f_1, f_2, ..., f_k\}{f1,f2,...,fk} 的输出来预测单个结果,如下所示:
y^i=φ(xi)=G(f1,f2,...,fk)(1)\hat{y}_i = \varphi(x_i) = G(f_1, f_2, ..., f_k) (1)y^i=φ(xi)=G(f1,f2,...,fk)(1)

其中,对于回归问题 y^i∈R\hat{y}_i \in Ry^iR,对于分类问题 y^i∈Z\hat{y}_i \in Zy^iZ。在这个通用框架下,构建一个集成模型涉及选择训练参与模型的方法论,以及选择合适的组合学习器输出的过程。

3.1 Model training(模型训练)

有几种方法可以训练集成模型以达到期望的结果。然而,在生成集成模型时必须考虑一些关键原则:

  1. 多样性(Diversity): 集成模型的卓越性能主要得益于使用了各种不同的“归纳偏好”(inductive biases)(Deng, Runger, Tuv, & Vladimir, 2013)。因此,参与的学习器应具有足够的多样性,以获得期望的预测性能
  2. 预测性能(Predictive performance): 个体学习器的预测性能应尽可能高,并且至少应优于随机模型。

乍一看,这两个原则似乎相互矛盾。此外,具有多样化学习器的集成并不总能提高预测性能(Bi, 2012)。结合这两个原则的主要思想是在集成中组合预测性能好且错误不相关的学习器,因为实证和理论都已表明,整个集成的预测性能与个体学习器所犯错误的不相关程度呈正相关(Ali & Pazzani, 1995)。有几种方法用于实现包含多样化学习器的目标:

  • 输入操纵(Input manipulation): 在这种方法中,每个基模型使用不同的训练子集进行拟合,从而为不同的基模型使用多样化的输入。这种方法在训练集的微小变化可能导致完全不同的模型的情况下被证明是有效的。这种方法最简单的实现是,每个模型使用一个略有不同的样本进行训练。不同学习器之间的类分布可以是随机的,也可以根据整个数据集中的类分布来确定(Chan & Stolfo, 1995a)。
  • 操纵学习算法(Manipulated learning algorithm): 在这种方法中,每个基模型的使用方式被改变。实现这一点的一种方法是操纵基模型遍历假设空间(hypothesis space)的方式。这是通过引导基模型走向不同的收敛路径来实现的(Brown, Wyatt, & Trio, 2005)。例如,在构建决策树集成时,我们可以在每次分裂时随机从 kkk 个最佳分裂属性中选择一个来注入随机性。邻居分布(Distributing neighbors)(Maudes, Rodriguez, & García-Osorio, 2009)是一种通过生成原始特征的不同组合来扩展特征空间的方法。以这种方式创造多样性的另一种方法是使用不同的超参数值训练基模型(Lin & Chen, 2012)。例如,用不同的学习率、不同的层数和属性等训练神经网络学习器。
  • 划分(Partitioning): 可以通过将原始数据集划分为更小的子集,然后使用每个子集训练不同的学习器来实现多样性。在 水平划分(horizontal partitioning) 中,我们将原始数据集划分为几个包含完整特征集的集合,这样学习器仅因其实例不同而不同(Chawla, Hall, Bowyer, & Kegelmeyer, 2004)。垂直划分(vertical partitioning) 则相反,每个学习器使用相同的实例但使用不同的特征(Rokach, 2008)。特征子空间聚合方法(Feature subspace aggregating method, Feating)(Ting, Wells, Tan, Teng, & Webb, 2011)将特征空间划分为在固定数量属性上定义的互斥局部区域。用户指定用于划分子空间的特征数量,从而确定局部化的程度。序数一致性驱动的特征子空间聚合(Ordinal consistency driven feature subspace aggregating, Feating)(Blaszczynski, Stefanowski, & Slowinski, 2016)同样将属性空间细分为局部区域。该方法优先选择能产生一致性区域的划分。CoFeating 已被证明在具有大量属性的数据集上表现良好。
  • 输出操纵(Output manipulation) :这种方法指的是将多个二元分类器组合成单个多类分类器的技术。纠错输出码(Error-correcting output codes, ECOC) 是这种方法的一个成功例子(Dietterich & Bakiri, 1995)。在这种方法中,每个类被编码为一个 LLL 位的码字(code-word),其中 LLL 是参与集成的分类器数量。每个分类器的目的是预测码字的第 LLL 位。然后,分类器应用于新实例以生成表示预测结果的 LLL 位字符串。为给定实例选择的预测类是其码字最接近实例字符串的类。接近度可以使用不同的方法测量,例如欧几里得解码(euclidean decoding)和汉明距离(Hamming distance)。自适应ECOC(Adaptive ECOC, AECOC)(Zhong & Cheriet, 2013)通过在对不同二元分类器进行训练时添加降维程序(conventionality reduction procedures)来扩展ECOC。N元纠错编码方案(N-ary error correcting coding scheme)(Zhou, Tsang, Ho, & Muller, 2016)是最近开发的一种方法,它将主多类分类器分解为更简单的多类子问题。
  • 集成混合(Ensemble hybridization) :这种方法在构建集成时至少结合了两种策略。随机森林(Random forest) 算法可能是混合方法最著名的体现,因为它在构建每棵树时操纵实例(通过自助采样),此外还通过在每个节点随机选择特征子集来操纵学习算法。RotBoost 是旋转森林(rotation forest)和 AdaBoost 算法混合的一个例子(Zhang & Zhang, 2008)。在每次迭代中,生成一个新的旋转矩阵并用于创建数据集。AdaBoost 集成从这个数据集归纳而来。实证测试表明,RotBoost 在准确性方面优于旋转森林和 AdaBoost。动态随机森林算法(Dynamic random forest algorithm)(Bernard, Adam, & Heutte, 2012)依赖于一种自适应的树归纳过程。每棵树的训练都受到它如何补充已训练好的树的指导。这是通过使用与随机森林相关的重采样方法和随机化过程来实现的(详见下文)。非线性提升投影(Nonlinear boosting projection, NLBP)(GarcÃa-Pedrajas, GarcÃa-Osorio, & Fyfe, 2007)结合了提升(boosting)和子空间方法。在学习器训练的每次迭代中,我们构建一个投影,该投影考虑了先前分类器错误分类的实例。在随机旋转集成(random rotation ensembles)(Blaser & Fryzlewicz, 2016)中,在训练每个基学习器时旋转特征空间。这种方法被证明对于包含许多连续特征的问题是有效的。

3.2 Output fusion(输出融合)

输出融合(Output fusion)指的是将基模型输出集成为单个输出的过程。以下部分总结了组合输出的主要方法。

  • 加权方法(Weighting methods): 可以通过为每个基模型分配权重来组合基模型输出。加权方法最适用于基模型性能相当的情况。多数投票(Majority voting) 是分类问题最简单的加权方法,所选类别是得票最多的类别。对于回归问题,这个概念体现在对所有学习器的输出进行平均(Mendes-Moreira, Soares, Jorge, & Sousa, 2012)。集成分类器中分布求和法(distribution summation method) 的思想是将从每个基模型获得的条件概率向量相加。选择的类别基于总和向量中的最高值,如下所示:
    y^=arg max⁡(φ(xi))其中φ(xi)=∑k=1Kfk(xi)(2) \hat{y} = \argmax(\varphi(x_i)) \quad \text{其中} \quad \varphi(x_i) = \sum_{k=1}^{K}f_k(x_i) (2)y^=argmax(φ(xi))其中φ(xi)=k=1Kfk(xi)(2)
    另一种加权方法是分配一个与学习器强度成正比的权重。这通常根据在验证集上的预测性能来完成(Opitz & Shavlik, 1996)。在贝叶斯组合方法(Bayesian combination method) 中,权重基于给定整个数据集获得该模型的概率似然(probabilistic likelihood)(Duan, Ajami, Gao, & Sorosshian, 2007)。Schapire 和 Singer (1998) 提出了一种在聚合最终决策时考虑预测置信度的加权方法。他们将该方法应用于决策树集成,其中预测置信度根据到达相应叶节点的实例数量分配。方差优化装袋和bogging(variance optimized bagging and bogging) 方法(Derbeko, El-Yaniv, & Meir, 2002)旨在优化树的线性组合,该组合以方差减少为指导并保持规定的准确性。权重也可以通过使用一个目标函数来分配,其中权重满足 ∑wi=1\sum w_i = 1wi=1−1<wi<1-1 < w_i < 11<wi<1,目标是使误差最小化(Mao et al., 2015)。最近的一项研究提出使用在10折交叉验证上计算的马修斯相关系数(Matthews correlation coefficient, MCC) 作为权重选择的质量度量(Haque, Noman, Berretta, & Moscato, 2016)。

  • 元学习方法(Meta-learning methods) :元学习(Meta-learning)是一个从学习器中学习的过程。元学习模型不同于标准的机器学习模型,因为它们包含不止一个学习阶段。在元学习范式中,个体学习器的输出作为元学习器(meta-learner)的输入,元学习器生成最终输出。元学习方法在特定基模型在不同子空间上具有不同性能的情况下效果很好。例如,当基模型持续正确分类或持续错误分类某些实例时。堆叠(Stacking) 可能是最流行的元学习技术(Wolpert, 1992)。通过使用元学习器,该方法试图归纳出哪些基模型是可靠的,哪些不是。在堆叠中,我们创建一个元数据集(meta-dataset),它包含与原始数据集相同数量的实例。然而,它不是使用原始输入属性,而是使用基模型的输出作为输入特征。预测属性与原始数据集中的相同。测试实例首先由每个个体学习器进行预测。然后将这些预测输入到一个元级集合(meta-level set)中,该集合被输入到提供最终输出的元模型(meta-model)中。建议将原始数据集划分为两个子集。第一个子集保留用于形成元数据集,第二个子集用于构建基学习器。基本堆叠算法有几种改进版本。例如,Troika(Menahem, Rokach, & Elovici, 2009)旨在专门提高多类数据集上的预测性能。仲裁树(arbiter trees)、组合树(combiner trees)分级(grading)(Chan & Stolfo, 1995b; Seewald & Furnkranz, 2001)是为集成基学习器输出而开发的附加元学习算法。加权装袋(Weighted bagging)(Shieh & Kamm, 2009)具有一个预处理过程,其中使用核密度估计器(kernel density estimator)根据点与目标类的接近程度为其分配概率权重。此过程减少了离群点(outliers)对所构建模型的影响。专家混合(Mixture of Experts, ME) 是一种非常流行的元学习变体,它依赖于分而治之(divide-and-conquer)的思想,问题空间在几个专家(experts)之间划分。ME 使用误差函数来定位数据空间不同分布最合适的基模型(Jacobs, Jordan, Nowlan, & Hinton, 1991)。子空间可能具有软“边界”,即允许子空间重叠。然后,为每个子空间选择一个基模型负责提供预测。
    为了选择最佳的基模型,通常使用另一种学习算法。Omari 和 Figueiras-Vidal (2015) 引入了一种用于组合大型决策树集成的后聚合(postaggregation)过程。该方法结合了元学习和加权的优点。它包含两个步骤。第一步,使用加权方法(如分布求和)融合单个树的输出并创建初始聚合。第二步,通过在原始训练实例及其初始聚合上应用机器学习算法来获得后聚合。Masoudnia 和 Ebrahimpour (2014) 最近发表了一篇关于 ME 方法的全面综述。

4 ENSEMBLE METHODS(集成方法)

集成方法可以分为两个主要框架:依赖框架(dependent framework)独立框架(independent framework)。在依赖框架中,每个学习器(inducer)的输出会影响下一个学习器的构建。在此框架下,先前迭代中产生的知识会指导后续迭代的学习过程。在独立框架中,每个学习器是独立于其他学习器构建的。在以下小节中,我们将简要回顾这两种框架中最流行的集成方法。表1总结了流行方法与其所属框架以及相关训练技术之间的联系。

表1:方法类别

方法名称 (Method name)融合方法 (Fusion method)依赖性 (Dependency)训练方法 (Training approach)
AdaBoost加权 (Weighting)依赖 (Dependent)输入操纵 (Input manipulation)
Bagging加权 (Weighting)独立 (Independent)输入操纵 (Input manipulation)
Random forest加权 (Weighting)独立 (Independent)集成混合 (Ensemble hybridization)
Random subspace methods加权 (Weighting)独立 (Independent)集成混合 (Ensemble hybridization)
Gradient boosting machines加权 (Weighting)依赖 (Dependent)输出操纵 (Output manipulation)
Error-correcting output codes加权 (Weighting)独立 (Independent)输出操纵 (Output manipulation)
Rotation forest加权 (Weighting)独立 (Independent)操纵学习算法 (Manipulated learning)
Extremely randomized trees加权 (Weighting)独立 (Independent)划分 (Partitioning)
Stacking元学习 (Meta-learning)独立 (Independent)操纵学习算法 (Manipulated learning)

4.1 AdaBoost

AdaBoost (Freund & Schapire, 1995) 是构建集成模型最著名的依赖框架(dependent)算法。AdaBoost 的主要思想是:在训练新的学习器(inducer)时,聚焦于先前被错误分类的实例。这种聚焦的程度由分配给训练集中每个实例的权重决定。在第一次迭代中,所有实例被赋予相同的权重。在每次迭代中,被错误分类实例的权重会增加,而被正确分类实例的权重则会减少。此外,还会根据各个基学习器(base learner)的整体预测性能为其分配权重。

AdaBoost 算法的伪代码在算法 1 (Algorithm 1) 中提供。该算法假设一个包含 nnn 个实例的数据集,标签为 -1 或 +1。对新实例的分类是通过对所有分类器 MtM_tMt 进行加权投票(weighted voting)来完成的,每个分类器 MtM_tMt 拥有一个权重 αtα_tαt。这种迭代过程产生了一系列相互补充的基学习器。

AdaBoost 存在几种值得注意的变体:Soft margin AdaBoost (Rätsch, Onoda, & Müller, 2001) 在算法中引入了正则化(regularization),以减轻异常值(outlier)的影响。Modest AdaBoost (Vezhnevets & Vezhnevets, 2005) 添加了正则化,这提高了模型的泛化能力(generalization),但降低了训练精度(training accuracy)SpatialBoost (Avidan, 2006) 是一种在原始算法中融入了空间推理(spatial reasoning) 的方法。由于 AdaBoost 等基于提升(boosting)的方法固有的顺序性(inherent sequential nature),对其进行并行化(parallelizing)并非易事。Palit 和 Reddy (2012) 利用 MapReduce 范式开发了两种并行提升方法:AdaBoost.PLLogitBoost.PL。这些方法仅需一个 MapReduce 周期:每个 Mapper 在其自身的数据子集上运行 AdaBoost 算法,以生成一组学习器(inducers); 然后,这些学习器及其权重被排序并传输给 ReducersReducer 对权重进行平均,以得出最终集成的权重。近期的一项工作指出了提升方法(boosting)在诸如语音和图像识别等困难分类任务中取得良好性能的局限性(limitations) (Cortes, Mohri, & Syed, 2014)。

在这里插入图片描述

4.2 Bagging

Bagging(Bootstrap Aggregating 的缩写;Breiman, 1996)是一种简单而有效的方法,用于生成独立模型(independent models) 的集成。在该方法中,每个学习器(inducer)都使用从原始数据集中通过有放回抽样(sampling with replacement) 得到的实例样本进行训练。为了确保每个学习器有足够数量的实例,每个样本通常包含与原始数据集相同数量的实例。通过多数投票(majority voting) 各学习器的预测结果来确定新实例(unseen instance)的最终预测(Kuncheva, 2004)。由于抽样是有放回的,在训练同一个学习器时,某些原始实例很可能出现多次,而其他实例可能完全不被包含。由于学习器是独立训练的,Bagging 可以很容易地以并行方式(parallel manner) 实现,即使用不同的计算单元训练每个学习器。

Bagging 算法有多种改进和变体: 改进的Bagging算法(Improved Bagging Algorithm, IBA; Jiang, Li, Zheng, & Sun, 2011):在该算法中,通过用信息熵(information entropy) 标记每个样本,改进了重采样过程。经验评估表明,IBA 可以在某些机器学习挑战中提高 Bagging 的泛化能力。在线Bagging(以及Boosting)方法(Online bagging (and boosting) method; Oza, 2005):在运行速度显著加快的同时,保持了 Bagging 的准确性。Wagging(加权聚合;Weight Aggregation; Bauer & Kohavi, 1999):该变体为实例分配随机权重双重Bagging(Double-bagging; Hothorn & Lausen, 2003):在每次迭代中,使用袋外样本(out-of-bag examples) 训练两个分类器。最近的研究表明,当使用极限学习机(Extreme Learning Machines, ELMs) 作为基学习器时,Bagging 在人脸识别挑战中表现有效(Ghimire & Lee, 2014)。值得注意的是,对决策树进行Bagging可以看作是随机森林技术(Breiman, 2001)的一个特例(particular instance)

4.3 Random forest and random subspace methods(随机森林和随机子空间方法)

随机森林(见图3和图4)可能是目前最受欢迎的集成方法。该方法由Ho(1995)与Amit和Geman(1994)在相近时间分别独立提出。数年后,Breiman(2001)在其论文中对该方法进行了系统阐述并推动其普及——根据Google学术统计(截至2017年6月),该论文引用量已近3万次。随机森林的受欢迎度持续攀升,主要归功于其简洁性和预测性能。此外,相较于需要精细调参的其他方法(如GBM),随机森林被认为是更易于调节参数的算法。该算法通过构建大量相互独立的未剪枝决策树实现预测。各独立决策树的构建遵循算法2所示流程。输入参数 NNN 代表用于确定树节点划分的输入变量数量。为构建既保持足够预测精度又具备随机性的树模型,决策树归纳器通过双重随机化机制注入随机性:(a) 每棵树在实例的差异化抽样子集上进行训练;(b) 节点划分时不再全局搜索最优分裂属性,而是随机抽样属性子集并在其中选择最优划分。第二重随机化可通过不同方式实现:替代传统基于信息增益等度量选择最优属性的方式,改为依据属性度量值按比例随机选择。类似思想已在随机化C4.5决策树中实现(Dietterich, 2000)。随机森林算法在节点划分时不直接选择全局最优属性,而是从最优的 nnn 个特征集合中等概率随机选取属性。该算法还具备实时处理版本(Saffari等人, 2009),可有效应对序列数据中的概念漂移问题——该版本通过时间加权机制,依据各决策树在不同时间窗口的预测误差自适应淘汰部分子树,同时生成新树进行替代。

尽管原始算法以决策树为基础学习器(核心优势在于节点分裂时的特征子集随机选择机制),但该步骤可扩展为更普适的随机子空间方法(RSM; Ho, 1998),从而兼容其他类型的归纳器。除标准流程外,还存在多种注入随机性的技术路径:其一,在特征分裂选择阶段不使用全部实例,而采用子抽样实例集(Kamath & Cantu-Paz, 2001)。由于节点分裂结果会随抽样样本变化,该方法可生成多样性决策树用于集成。Kulkarni与Sinha(2013)系统综述了随机森林的各类变体,提出专门分类体系并对比现有方法。最新研究表明,相较于极限学习机、支持向量机和神经网络,随机森林具有更强的鲁棒性和稳定性,尤其在训练集规模有限时表现更优(Han等人, 2018)。
在这里插入图片描述
图3 随着时间的推移,每种方法发表的论文数量。基于web of science数据库
在这里插入图片描述
图4:2014至2017年间各方法的技术帖数量。帖子收集自 StackExchange 统计和数据科学论坛,我们统计了包含方法名称的消息。
在这里插入图片描述

4.4 Gradient boosting machines

梯度提升机(GBM;Friedman, 2001)采用级联式训练机制,每个基学习器的训练依赖于前序已训练的模型。其核心区别在于:GBM在函数空间进行优化(Natekin & Knoll, 2013),通过构造与集成模型损失函数负梯度方向最大相关的基学习器实现渐进优化。具体而言,GBM通过迭代生成回归树序列,每棵新树基于任意可微损失函数预测前序树的伪残差。用户需自定义损失函数及其负梯度计算方式。模型以加性方式聚合预测结果,每个新增基学习器的训练目标是最小化集成损失函数。需特别注意:GBM通常包含大量浅层树(与随机森林的少量深层树形成对比)。选择恰当的树数量(即迭代次数)至关重要——过高导致过拟合,过低则欠拟合。最优迭代次数一般通过验证集评估预测性能确定。过拟合问题可通过随机梯度提升法(Friedman, 2002)缓解:该方法使用原始数据集的连续小子集顺序训练树模型。

XGBoost(Chen & Guestrin, 2016)作为可扩展的树提升系统(图4),近年已成为业界主流工具。其成功体现在2015年Kaggle竞赛中:29个冠军方案有17个采用XGBoost。该算法通过三项创新提升扩展性:

  1. 分裂查找算法:(a)通过节点默认方向处理稀疏数据;(b)采用合并剪枝操作处理加权数据;(c)高效枚举所有可能分裂点以优化阈值
  2. 在GBM损失函数中增加正则化项,生成更简洁且泛化性更强的集成模型
  3. 支持Apache Hadoop等分布式平台,实现跨机器并行计算加速

LightGBM(微软研究院郭霖轲等开发)是另一高效梯度提升实现。其创新包括:

  • 基于直方图算法降低训练耗时与内存消耗
  • 采用网络通信算法优化并行学习(Zhu et al., 2017)

4.5 Rotation forest

旋转森林(Rodriguez, Kuncheva, & Alonso, 2006)是一种通过在旋转特征空间中基于完整数据集训练每个决策树归纳器来生成多样性的方法。当为基分类器创建训练数据时,特征被随机分割为K个子集,并对每个子集应用主成分分析(PCA)。PCA的核心思想是通过正交变换将任何可能相关的特征转化为一组线性无关的特征(称为主成分)。每个成分都是原始特征的线性组合。该变换确保第一主成分具有最大可能方差,后续每个成分在正交于前序成分的约束下获得最高可能方差。在集成学习背景下,这种变换有效地为每个基学习器构建新特征——不同的特征分区将产生不同的转换特征集,从而生成不同的分类树。除了增强树间多样性外,旋转树还缓解了决策树仅能将输入空间分割为平行于原始特征轴平面的约束。尽管实验评估表明其准确率优于随机森林,但旋转森林存在两个主要缺陷:首先,每次归纳时计算PCA会产生随机森林训练中不存在的计算开销;其次,由于所生成树的节点使用转换特征而非原始特征,归纳器的可解释性受损。Schclar与Rokach(2009)提出使用随机投影替代PCA投影来构建独立决策树,这减轻了主成分计算带来的计算复杂度负担。每个用于训练树的衍生特征都是原始特征的随机线性组合。随机投影随机离散化集成(RPRDE)是旋转森林的变体,其先将连续特征离散化,再为每个归纳器提供离散特征的随机线性组合(Ahmad & Brown, 2014)。

4.6 Extremely randomized trees(极度随机化树)

极度随机化树(Geurts, Ernst, & Wehenkel, 2006)是通过向训练过程注入随机性来生成多样性集成的另一种方法。在训练极度随机化树时,除了从特征的随机子集中选择最优分裂属性外,分裂特征的切分点也被随机化。极度随机化树的另一区别在于:与随机森林不同,该方法不使用自助采样法实例流程。所有决策树均基于同一训练集进行归纳。Geurts等人研究表明,尽管极度随机化树往往具有较高的偏差和方差分量,但融合足够大规模的树森林可消除这些问题。近年多项研究证实了极度随机化树在脑肿瘤分割领域的有效性(Gotz等人, 2014; Pinto等人, 2015; Soltaninejad等人, 2017)。

4.7 Ensemble methods and deep neural networks

深度神经网络(DNN)已成为机器学习领域的重要力量。近年来,DNN的应用显著提升了语音识别、视觉目标识别、目标检测及众多其他领域的最先进水平(LeCun, Bengio, & Hinton, 2015)。DNN由多层非线性运算组成,能够发现复杂结构并学习大型数据集中的高层概念。近年来已有若干尝试将集成方法与DNN相结合的研究,其中大多数聚焦于构建DNN集成模型。

深度神经决策森林(Kontschieder等人, 2015)是一种融合卷积神经网络(CNN)与决策森林技术的学习方法,其引入了决策树的随机反向传播版本,进而组合成决策森林。另一项由CNN构成的集成模型最近被开发用于面部表情识别任务(Wen等人, 2017)。Qiu等人(2014)提出了用于回归和时间序列预测的DNN集成模型,该集成中将DNN的输出构建为支持向量回归(SVR)模型的输入以生成最终结果。Deng和Platt(2014)通过堆叠卷积神经网络、循环神经网络和全连接神经网络应对语音识别挑战,实验结果证明手机识别准确率显著提升。

与上述方法不同,gcForest(Zhou & Feng, 2017)作为融合集成方法与DNN的新颖方法,将随机森林模型替代DNN神经元——每个随机森林的输出向量作为下一层的输入。此外,该方法在高维输入时采用多粒度扫描以支持表征学习。值得注意的是,著名的dropout技术(Srivastava等人, 2014)在每次迭代中丢弃部分DNN神经元的操作,也可视为由不同神经网络(每个网络丢弃不同神经元)组成的集成方法。

4.8 Comparison of ensemble methods

在集成学习短暂的发展历程中,众多研究评估了不同场景下各类集成方法的性能。Dietterich(2000)的早期研究比较了基于C4.5决策树的随机化、Bagging和Boosting集成方法,实验表明:在数据噪声较低时,Boosting能获得最优结果。Bauer与Kohavi(1999)的另一项早期研究评估了不同场景中Bagging和Boosting的表现,发现Bagging能降低不稳定方法的方差,而Boosting方法既能降低不稳定方法的偏差和方差,却会增加稳定方法的方差。Opitz与Maclin(1999)的研究进一步指出,Boosting对数据集特性更为敏感,可能在噪声数据集上产生过拟合。Banfield等学者(2007)基于57个公开数据集开展实验,将Bagging与其他七种随机化技术进行对比。结果显示:仅在8个数据集中存在统计显著优于Bagging的方法。但值得注意的是,包含1000棵树的随机森林和Boosting在所有算法中取得了最佳平均排名。Fernández-Delgado等(2014)更对17个算法家族的179种方法在121个数据集上展开测试,最终得出结论:随机森林方法(尤其是R语言实现的并行随机森林)的综合性能往往优于其他学习方法。除预测性能外,在选择最佳集成方法时还需考虑其他关键因素:

  • 适用场景适配性:不同方法在特定场景下的性能存在差异(如类别不平衡、高维数据、多标签分类及噪声数据等)。因此,建议先描述学习任务特征再选择对应方法。
  • 计算成本:集成模型的训练复杂度及新样本预测耗时是重要评估指标,尤其在实时系统中更需考量(Bifet et al., 2009)。
  • 软件可用性:不同平台对机器学习模型提供各自的实现方案。能在多应用中复用相同算法的能力,对实施团队具有重要价值。
  • 易用性:用户需要理解模型调参机制,故更倾向提供明确控制参数集的模型。

5 CONSENSUS CLUSTERING(共识聚类)

将集成学习直接应用于聚类问题并非易事,这既因不同聚类系统的簇关联机制不明确,也因缺乏类别信息(Weingessel, Dimitriadou, & Hornik, 2003)。因此,在组合多个聚类模型时,核心目标是构建优于其他聚类系统的共识解(Monti, Tamayo, Mesirov, & Golub, 2003; Strehl & Ghosh, 2002; Topchy, Law, Jain, & Fred, 2004)。该方法能显著提升聚类模型的稳定性和鲁棒性(Fred & Jain, 2002)——即所得聚类系统对离群点和噪声敏感性更低,且通常优于单一聚类模型。聚类集成包含两个主要阶段,与监督集成模型相似:生成阶段与集成阶段(Vega-Pons & Ruiz-Shulcloper, 2011)。生成阶段使用给定数据集训练不同聚类模型,而集成阶段则将不同聚类结果映射为单一共识聚类。共识聚类本质是将聚类模型集合映射为组合聚类结果的函数(Topchy, Law, et al., 2004)。生成阶段可依据监督集成模型诱导器训练机制,采用不同方法构建聚类模型,例如:使用不同实例/特征子空间、不同聚类算法、不同超参数配置、将数据投影至不同子空间等(Ghaemi, Sulaiman, Ibrahim, & Mustapha, 2009)。将多聚类模型集成至共识聚类被视为构建聚类集成最困难的环节(Topchy, Jain, & Punch, 2004)。现有共识聚类方法主要包含:投票法需先解决标签对应问题(确定不同模型给出的标签集间关系),再通过投票为实例分配最终簇归属(Ayad & Kamel, 2010);基于超图的方法将集成问题转化为超图分割问题——以不同聚类模型构建图结构,顶点对应数据实例,超边表示同簇实例集合,随后通过优化算法求解共识聚类(Ben-Hur, Elisseeff, & Guyon, 2001; Karypis, Aggarwal, Kumar, & Shekhar, 1999; Strehl & Ghosh, 2002);证据积累框架将簇分配结果转化为共关联矩阵(描述实例对被分配至同簇的频率),采用此方法可在避免标签对应问题的情况下获得共识聚类(Fred & Jain, 2005)。其他传统聚类模型集成方法的全面综述可参阅Ghaemi等(2009)及VegaPons与Ruiz-Shulcloper(2011)的调研报告。贝叶斯共识聚类(BCC)是近年发展的新方法,通过扩展狄利克雷混合模型为多数据源提供可扩展的鲁棒共识聚类(Lock & Dunson, 2013);加权对象集成聚类(WOEC)是另一种新近提出的共识聚类生成方法,其在图分割过程中整合实例权重,实验表明该方法相比前沿方法能产生更稳定、鲁棒的聚类结果(Ren, Domeniconi, Zhang, & Yu, 2017)。共识聚类已被证实在基因表达数据生物意义簇发现(Kiselev et al., 2017; Monti et al., 2003; Verhaak et al., 2010)、视频镜头分割(Chang, Lee, Hong, & Archibald, 2008; Zheng, Zhang, & Li, 2012)、在线事件检测(Wu et al., 2017)及网络安全(Liu & Lam, 2012)领域具有显著效果。

6 MAKING ENSEMBLES SIMPLER AND SMALLER(集成模型的简化与压缩)

尽管集成模型具有高预测精度,但其他模型可能因两大核心原因更受青睐:首先,大型集成模型的预测通常耗时较长,因为需聚合多个诱导器的输出来生成单个预测,这在实时预测系统中尤为显著(Partalas, Tsoumakas, & Vlahavas, 2008; Tsoumakas, Partalas, & Vlahavas, 2008);其次,集成输出由众多诱导器结果构成,其可解释性几乎为零,该特性使其难以应用于需对个体决策提供清晰合理解释的领域(如医疗、保险等;Freitas, 2014)。下文将综述为缓解这些问题所开发的相关方法。

6.1 Ensemble pruning methods(集成剪枝方法)

集成剪枝方法(亦称集成选择方法)致力于降低集成模型复杂度,其核心在于搜索性能不低于原始集成的成员子集(Zhang, Burer, & Street, 2006)。子集确定后,仅保留所选基学习器用于预测聚合。研究证明:寻找与提升集成性能等效的小规模集成属于NP难计算难题(Tamon & Xiang, 2000),且剪枝可能牺牲模型对未见样本的泛化能力。当周志华等学者(Zhou, Wu, & Tang, 2002)提出"少而精"定理后,构建小型高精度集成成为可能。剪枝过程可动态执行——根据特定样本仅激活部分诱导器进行预测(Hernández-Lobato, Martínez-Muñoz, & Suárez, 2009; Park & Fürnkranz, 2012)。此类方法的理论基础是:多数投票中的优胜类别无需全部票数即可判定。Martínez-Muñoz等(2009)证实:恰当选择子集成可达到原始集成的最大预测性能。多年来已经开发了许多集成修剪方法。选择集成子集的两种最流行的方法是基于排序和搜索的方法。

  • 排序法:此类方法依据预设标准对基学习器进行排序,按阈值筛选最优模型。Caruana等(2004)提出前向逐步选择策略,从大量诱导器中筛选预测性能最优者。Hu等(2007)开发的FS-PP-EROS算法通过精度导向的前向搜索构建粗糙子空间选择性集成,实验证明该方法在减小集成规模的同时精度超越Bagging。Bryll等(2003)的AB方法采用包装法评估随机m属性子集性能,仅允许高排名诱导器参与集成。 鉴于诱导器多样性对集成质量至关重要,部分方法基于多样性进行排序:
    • Margineantu与Dietterich(1997)提出基于Kappa统计量的成对模型比较法,按共识度选择模型直至达到目标集成规模
    • Banfield等(2005)的正确率多样性度量(PCDM)聚焦于基模型预测存在歧义的样本
    • Partalas等(2010)采用不确定性加权精度(UWA)衡量预测不确定性的类似方法
    • Rokach(2009)的集体共识剪枝法(CAP)同时考量单树预测能力与树间冗余度
    • 张与王(2009)针对随机森林提出融合精度与多样性的三重度量剪枝法
    • Dai(2013)则为时间序列领域设计四种基于排序的剪枝评估指标
  • 搜索法:此类方法在分类器空间进行启发式搜索,评估不同分类器子集的集体性能。例如周志华等(Zhou et al., 2002)提出的GASEN算法,通过遗传算法为集成中每个模型分配随机权重,经迭代优化后剔除低权重基模型——权重值直接反映模型在集成中的适应度。其改进版GASEN-b(Zhou & Tang, 2003)为每个分类器分配二进制标识位决定最终参与权。代表性方法还包括:
    • 普罗卓米迪斯与斯托尔福(Prodromidis & Stolfo,2001)提出基于后向相关性的剪枝法:在基模型输出层训练元分类器,剔除低相关性成员
    • 罗凯奇等(Rokach, Maimon, & Arbel, 2006)按ROC性能排序模型,逐步添加最优成员直至预测性能无提升
    • 张等(Zhang et al., 2006)将剪枝问题建模为二次整数规划问题,利用半定规划(SDP)技术求解精度-多样性的帕累托最优子集
    • 钱等(Qian, Yu, & Zhou, 2015)的帕累托集成剪枝(PEP)采用进化优化技术同步提升精度与压缩规模,实验显示其超越前沿剪枝算法,并在安卓恶意软件检测中验证有效性(Fan et al., 2016)
    • 江等(Jiang, Wu, & Guo,2017)新近提出的森林剪枝法(FP)聚焦决策树集成,基于分支重要性度量对树节点进行剪枝

基于搜索的方法在准确性方面通常比排名方法表现更好,但由于它们在大空间中搜索,它们的计算成本也非常高。因此,应该选择一个可行的搜索策略。

6.2 Ensemble derived models

集成剪枝方法虽能显著提升预测性能与计算效率,却未解决模型可解释性与知识获取问题。 相关研究主要通过以下途径实现知识抽取:

  • 邓某某(Deng, 2014)的简化树集成学习器(STEL):从树集成中提取规则并挖掘频繁变量交互,构建可迭代匹配新样本的规则分类器
  • Iqbal(2012)的REEMTIC方法:结合教学式与分解式方法,将基分类器转化为可解释规则集,并通过ESPRESSO算法进行逻辑最小化

构建等效精简模型的技术路线包括:

  1. 基于生成数据训练

    • Buciluǎ等(2006):利用集成模型标注海量无标签数据,训练保持精度的轻量神经网络
    • MUNGE算法:当无标签数据缺失时,生成模拟原始数据分布的合成数据
    • 重生树(Breiman & Shang, 1996):通过核密度估计生成数据→集成标注→训练最终决策树
    • Domingos(1998)的CMM:从生成数据中隐式学习集成数据划分结构
  2. 基于集成内部结构后处理

    • Van Assche & Blockeel(2007)的ISM:基于集成结构迭代选择信息量最大节点,构建性能等效的单一决策树
    • Vandewiele等(2016)的GENESIM:应用遗传算法将集成诱导器转化为单决策树,实验证明其泛化精度超越优化单树

7 CONCLUSIONS AND OPEN RESEARCH QUESTIONS

集成方法通过模拟人类决策机制——在重要抉择前汇集多方意见,其核心思想在于整合多个基模型以提升预测性能。本文系统综述了该领域主要方法与技术,深入探讨了集成训练的基本原理及诱导器输出融合机制。文中重点揭示了三大研究趋势与未来方向: (1)面向大数据的算法精炼:通过分布式部署提升多机协同效率,优化计算资源利用率(如"Big Data"场景适配); (2)模型可解释性转化:在保持原始集成预测精度的前提下,构建结构精简、可解释性强的等效模型; (3)深度集成融合:顺应深度神经网络研究浪潮,推进集成范式与深度学习的创新性融合。

参考

[1] Sagi O, Rokach L. Ensemble learning: A survey[J]. WIREs Data Mining and Knowledge Discovery, 2018, 8(4): e1249.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

W_chuanqi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值