zoukankan      html  css  js  c++  java
  • 机器学习中的集成学习方法(一)理论

    集成学习(aka combination/aggregation)就是构造若干模型并用它们的(加权预测/投票)值用于对新样本的预测。类似于多个决策者进行同一个决策。通常来说集成的效果要好于单个模型,当特征,数据,单个模型做到瓶颈时,多模型带来的提升很明显。因此集成学习广泛用于竞赛和实际应用中。其实很多本身就很优秀的模型就是集成了很多弱的模型,比如boosting系(adaboost),gradient boosting系(GBDT),random decision系(Random Forest)。Modular system 类似于ensemble learning,两者主要区别是前者单个分类器只能解决一个子问题,而后者则能解决整个问题。

    那什么样的集成会比单个模型好?
    1. 模型之间差异大,错误uncorrelated。
    2. 模型的准确率高于随机猜,否则集成后的误差会增长。

    为什么ensemble会有效?
    Dietterich在ensemble learning in machine learning中从统计,计算,表示三个方面解释了这个问题,也有人认为这不是真正的“有效性理论基础”,说成是猜想或者直观解释可能更适合。在这之前先复习一下标准的学习框架。
    假设样本是从分布p(x,y)中采样得到。我们的目标是从所有可能的h(x)中(记为空间H)找到最佳模型h(x), 使得的loss function的期望值最小:E[L(h(x),y)|x,y]
    1. 模型误差:通常我们是在子空间搜索(限定模型形式/先验)而不是在整个空间H搜索,因此会带来模型误差。
    2. 统计误差:因为p(x,y)未知,所以只能根据它的一个采样(训练集)来最小化误差,E(L)=(L(xi),yi)/n
    3. 优化误差:在最小化loss function时可能是因为使用近似算法或者算法陷入局部最优导致没有收敛到全局最优值带来的误差。

    下面从三个原因说为什么集成会比单个模型好?
    1. Statistical(对应用统计误差):通常要搜索的建设空间非常大,但往往训练样本比较少,导致学习的结果是一系列满足训练集并且具有近似精度的假设,而满足训练集的假设不一定在实际中有好的表现,这样选择其中一个就会有很大风险,而把这些假设ensemble起来能够降低这一风险。可以理解成集成使得各个假设和目标之间的误差得到一定程度上的抵消。
    2. Computational(对应优化误差):在NN/DT中,学习最优的参数被证明是NP-Hard问题,在数据足够的情况下,statistical问题将不存在,但是仍然很难找到最优的参数。通过某些启发式的方法构造多个近似真正未知的假设,这样集成这些就假设将更近似真实的假设。
    3. Representational(对用模型误差):虽然对于NN/DT这样的算法,给予足够的数据,能够去表示所有的假设,然而给定有限的样本,这些算法往往只能表示有限的假设,如果真实的假设不在其表示范围内并且空间在某种集成运算下不封闭,那么集成这些假设就有可能表示出不在假设空间的目标假设。


    图1:三个基本原因

    综上,以上的三点原因,现有算法都没有很好的解决,那么通过集成部分弥补标准学习算法的不足。

    改天再整理下集成学习的几种不同方法。

    reference
    1. ensemble learning in machine learning
    2. some MLer's talk

    转自 http://lovebingkuai.diandian.com/post/2013-04-28/40050551522

  • 相关阅读:
    14.4.9 Configuring Spin Lock Polling 配置Spin lock 轮询:
    14.4.8 Configuring the InnoDB Master Thread IO Rate 配置InnoDB Master Thread I/O Rate
    14.4.7 Configuring the Number of Background InnoDB IO Threads 配置 后台InnoDB IO Threads的数量
    14.4.7 Configuring the Number of Background InnoDB IO Threads 配置 后台InnoDB IO Threads的数量
    14.4.6 Configuring Thread Concurrency for InnoDB 配置Thread 并发
    14.4.6 Configuring Thread Concurrency for InnoDB 配置Thread 并发
    14.4.5 Configuring InnoDB Change Buffering 配置InnoDB Change Buffering
    14.4.5 Configuring InnoDB Change Buffering 配置InnoDB Change Buffering
    14.4.4 Configuring the Memory Allocator for InnoDB InnoDB 配置内存分配器
    14.4.4 Configuring the Memory Allocator for InnoDB InnoDB 配置内存分配器
  • 原文地址:https://www.cnblogs.com/renly/p/3116468.html
Copyright © 2011-2022 走看看