0%

在机器学习中的常规算法,都是作为一个独立模型发挥作用,而集成学习就是让这些单独的模型一起解决问题,实现“3 个臭皮匠顶个诸葛亮”的效果”。集成学习归属于机器学习,是一种训练思路,并不是某种具体的方法或者算法。

集成学习通过将多个弱学习器进行结合,通常可以获得比单一学习器显著优越的泛化性能。要想获得好的集成,需要个体学习器“好而不同”,即个体学习器要有一定的“准确性”,即学习器不能太坏,并且要有“多样性”,即学习器之间有差异性。假设个体学习器之间的错误率相互独立,那随着集成中的个体learner数目增加,集成后的错误率将指数下降。在实际情况下,准确性和多样性存在冲突。如何产生“好而不同”的个体learner,是集成学习的研究核心。

根据个体learner的生成方式,可以把集成学习分为两类,一类是个体learner之间存在强依赖关系,必须串行生成的序列化方法。一类是learner之间不存在强依赖关系,可以同时生成的并行化方法。前者的代表是boosting,后者的代表是Bagging以及随机森林(Random Forest) 1. boosting 2. bagging(bootstrap aggregating的缩写,也称作“套袋法”)

Boosting 和 bagging 最本质的差别在于他对基础模型不是一致对待的,而是经过不停的考验和筛选来挑选出「精英」,然后给精英更多的投票权,表现不好的基础模型则给较少的投票权,然后综合所有人的投票得到最终结果。

boosting

主流的方法有Adaboost和Gradient Boost

决策树是一种逻辑简单的机器学习算法,具有一种树形结构,因此得名。决策树是最简单的机器学习算法,它易于实现,可解释性强,完全符合人类的直观思维,有着广泛的应用。决策树模型既可以做分类也可以做回归。

  • 对于分类问题。测试样本点到达的叶子节点上所有类别中样本点最多的类别,即为测试样本点的类别;
  • 对于回归问题。测试样本点到达的叶子节点上所有样本点输出值的平均值,即为测试样本点的输出值;
节点 内容
根节点 包含样本全集
内部节点 对应特征属性
叶节点 决策结果

决策树有三个步骤 1. 特征选择

特征选择决定了使用哪些特征来做判断。在训练数据集中,每个样本的属性可能有很多个,不同属性的作用有大有小。因而特征选择的作用就是筛选出跟分类结果相关性较高的特征,也就是分类能力较强的特征。在特征选择中通常使用的准则是:信息增益。

  1. 决策树生成

选择好特征后,就从根节点触发,对节点计算所有特征的信息增益,选择信息增益最大的特征作为节点特征,根据该特征的不同取值建立子节点;对每个子节点使用相同的方式生成新的子节点,直到信息增益很小或者没有特征可以选择为止。

  1. 决策树剪枝

剪枝的主要目的是对抗“过拟合”,通过主动去掉部分分支来降低过拟合的风险。

决策树分类

根据使用的特征选择算法不同,我们将决策树分为三类

  1. ID3 使用信息增益作为特征选择,只能处理分类问题,loss函数的评价是使用信息熵

  2. C4.5 它是ID3的改进版本,使用信息增益比作为特征选择依据。只能处理分类问题,理由同上

  3. CART(Classification and Regression Tree) 采用Gini系数时可以处理分类问题,采用variance系数时可以用于回归问题,如果是一个回归问题,那么每一次特征选择后,其方差更小,那么叶节点内的均值就是一个回归值。

决策树的样本处理

Gini系数

假设我们在使用Gini系数处理分类问题,对于连续特征值的特征,通过取相邻样本的平均值作为划分点,比如m个样本的连续特征A有m个,从小到大排列为\(a_1,a_2,\dots a_m\)则CART算法取相邻两样本值的平均数,一共取得m-1个划分点,其中第i个划分点\(T_i\)表示为 \(T_i = \frac{a_i + a_{i+1}}{2}\),然后就是对于这m-1个点,分别计算以该点作为二元分类点时的基尼系数。选择基尼系数最小的点作为该连续特征的二元离散分类点。比如取到的基尼系数最小的点为𝑎𝑡,则小于𝑎𝑡的值为类别1,大于𝑎𝑡的值为类别2,这样我们就做到了连续特征的离散化。要注意的是,与ID3或者C4.5处理离散属性不同的是,如果当前节点为连续属性,则该属性后面还可以参与子节点的产生选择过程。

对于CART分类树离散值的处理问题,采用的思路是不停的二分离散特征。

回忆下ID3或者C4.5,如果某个特征A被选取建立决策树节点,如果它有A1,A2,A3三种类别,我们会在决策树上一下建立一个三叉的节点。这样导致决策树是多叉树。但是CART分类树使用的方法不同,他采用的是不停的二分,还是这个例子,CART分类树会考虑把A分成{𝐴1}和{𝐴2,𝐴3}, {𝐴2}和{𝐴1,𝐴3}, {𝐴3}和{𝐴1,𝐴2}三种情况,找到基尼系数最小的组合,比如{𝐴2}和{𝐴1,𝐴3},然后建立二叉树节点,一个节点是A2对应的样本,另一个节点是{A1,A3}对应的节点。同时,由于这次没有把特征A的取值完全分开,后面我们还有机会在子节点继续选择到特征A来划分A1和A3。这和ID3或者C4.5不同,在ID3或者C4.5的一棵子树中,离散特征只会参与一次节点的建立。

在真实世界中,常常会面临样本具有特征缺失的情况。我们需要解决两个问题 (1)如何在属性值缺失的情况下进行划分属性选择 (2)给定划分属性,若样本在该属性上的值缺失,如何对样本划分?

variance系数

分类时,如果待分类样本有缺失变量,而决策树决策过程中没有用到这些变量,则决策过程和没有缺失的数据一样;否则,如果决策要用到缺失变量,决策树也可以在当前节点做多数投票来决定。回归的话,多数投票会换成局部回归等类似的方法。这样决策树就能给缺失变量的样本一个预测了。

最近在有关NLP相关的内容,不知怎的居然逐渐投入到计算机语言的研究去了,特别是编译原理。看来自然语言和计算机语言也是有某种互通吧。看的东西很多也很杂。感觉好多知识都是似曾相识。不管怎样,先写一篇博客,稍稍记录一下我的学习成果。

阅读全文 »

模式匹配是检查某个值(value)是否匹配某一个模式的机制,一个成功的匹配同时会将匹配值解构为其组成部分。它是Java中的switch语句的升级版,同样可以用于替代一系列的 if/else 语句。

scala的模式匹配是其非常出彩的一个点。

阅读全文 »

这篇文章我会介绍在推荐系统中如何基于FM模型来做召回。召回可以粗略地分为两大类,一种是统计类的,比如ItemCF, UserCF,都是基于对历史大数据的统计,找到相似矩阵,不涉及模型训练。另一种是模型类的,比如FM、YoutubeNet、DSSM之类的,有确定的模型以及损失函数。

阅读全文 »

akka是什么? akka是一个基于actor并发模型的框架,该模型可以追溯到1973年发表的论文《A Universal Modular Actor Formalism for Artificial Intelligence 》, Actor就源于该模型。

actor通过消息传递的方式与外界通信。消息传递是异步的。每个actor都有一个邮箱,该邮箱接收并缓存其他actor发过来的消息,actor一次只能同步处理一个消息,处理消息过程中,除了可以接收消息,不能做任何其他操作。

阅读全文 »

一个赌徒,要去摇老虎机,走进赌场一看,一排老虎机,外表一模一样,但是每个老虎机吐钱的概率可不一样,他不知道每个老虎机吐钱的概率分布是什么,那么每次该选择哪个老虎机可以做到最大化收益呢?这就是多臂赌博机问题 (Multi-armed bandit problem, K- or N-armed bandit problem, MAB

阅读全文 »

Python 作为编程语言存在多个具体实现,包括最常用的 CPython、超集 Cython、.NET 平台的 IronPython、JVM 上的 Jython,R 语言实现的 RPython、JIT 版本的 PyPy 等等。这里我们只讨论最常用的、官方的 CPython 实现。

阅读全文 »