ML_决策树

参考blog 和onenote 2016-summer总结 及一个ppt

决策树

  • 如何构建决策树
    • 如何分裂
      • 分裂属性
      • 离散/连续变量处理
    • 如何停止
      • 节点为纯
      • 节点样本数量小于阈值
      • 没有属性进行分割
  • 如何判定
    • 对应的样本数在叶子节点中最多

随机森林

  • 构建树:构建k个决策树,每棵树按照如下方式生长
    • 选择构建树数据
      • sample N cases at random ­ but with replacement, from the original data
    • 如何分裂
      • 在每个节点,随机选择m个特征,选择分裂属性最好的特征进行分裂。
      • 每棵树无剪枝生长
  • 如何判定
    • 综合k棵树的结果

分裂属性

  • 信息增益(information gain、KL divergence)
  • 增益比率Gain Ratio

基于信息增益进行属性选择有一个很大的缺陷,它会倾向于选择属性值多的属性。一个较为极端的例子是某种属性将预测属性完全分割,也就是在该属性分割后预测属性在每个分割集中,只有一种可能,分割后的预测属性的不确定性很小。但这样的分割方式往往没有任何意义,缺乏泛化能力。

信息增益比率对上面的情况进行了改进,它引入了一个分裂信息

$SplitInfo_R(D) = -\sum_{j=1}^{k} \frac{|D_j|}{|D|} * lg(\frac{|D_j|}{|D|})$

  • Gini指标
信息增益 用父节点信息熵-子节点的条件信息熵,选择下降最多的一个。 信息,即熵,用于衡量系统带有的信息多少(混乱程度)。越是混乱,其值越高$H(p)=-\sum_i {p_i}*lg({p_i})$
增益比率
Gini指标 Gini纯度,用于衡量节点内样本是否单一性。$Gini(D) = 1 - \sum_i{P_i}^2$ 在CART(分类回归树)算法中, 基尼不纯度表示一个随机选中的样本在子集中被分错的可能性。总体内包含的类别越杂乱,GINI指数就越大(跟熵的概念很相似)

An Overview of Multi-Task Learning in Deep Neural Networks

3 深度MTL的两种方式

hard parameter sharing vs. hard parameter sharing

3.2 Soft parameter sharing

每个任务有独立的模型,但是这些模型的参数受到一些限制条件的约束,以鼓励模型参数相似。这些约束来自于其他模型。

4 MTL为什么会有效?

  1. 隐式的数据扩增
  2. 注意力机制
  3. 窃听机制
  4. 表征偏差(representation bias)
  5. 正则化

5 非神经网络模型的MTL

回顾 线性模型、核方法、贝叶斯方法中的多任务学习方法。具体的说,我们将讨论多任务学习中两个普遍存在的重要思想:1)通过norm正则化强制在task间稀疏性 对任务间的不同强制加稀疏性约束的正则化项(enforcing sparsity across tasks through norm regularization);(2)对任务间的关系进行建模。值得注意的是,文献中的多任务方法大多是处理同质的场景,即他们认为所有任务都与单一的输出相关。例如,MNIST数据集上的多分类问题转换为10个二分类问题来求解。近年来的工作更多的是处理异质场景:每个任务都对应不同的输出。

5.1 对块进行稀疏正则化

现有的许多方法都对模型参数的稀疏性做了一些假设。

文献8认为所有的模型共享特征的一个小的子集,落实到参数上面就是A的大部分行为0。To enforce this idea, 推广了L1范正则化方式:首先计算A的每一行的$l_q$范(对应着每一个特征维度),得到一个向量$b=[ |a_1|_q, …, |a_2|_q]$, 然后再计算此向量的$l_1$范。藉此来使得某些行为0。这种混合使用1范数和q范数的方法被称为$l_1/l_q$ norm。它们也被称为 block-sparse regularization, as they lead to entire rows of A being set to 0.

有的人使用$l_1/l_{inf}$,有的人使用$l_1/l2$ (known as group lasso)。

Group Lasso的优化不是凸的,但是通过惩罚tr(A) 可以将问题转换为凸的。tr(A)使得A的A的秩较低,因此使得A 的列向量存在一个低维空间中。

尽管这个block-sparse regularization 直觉上是可行的,但是这与任务间在多大程度上共享特征是相关的。08年一篇论文证明了如果特征没有重叠过多,这样的正则化方式会使得它的效果较正常情况更差。在此基础上, [Jalali et al., 2010] improve upon block-sparse models by proposing a method that combines block-sparse and element-wise sparse regularization。它们分解参数矩阵A=B+S B is then enforced to be block-sparse using 1/ regularization, while S is made element-wise sparse using lasso.

5.2 学习任务间的关系

group稀疏性约束可以强制模型仅关注一些特征,使得这些特征被所有任务共享。已有的所有方法假设多任务学习中所有任务之间是彼此紧密相关的。然而,事实并非如此,不是每个任务都与其他任务紧密关联。在这些场景中,与不相关的任务共享信息有可能会对性能造成伤害。这种现象称为负迁移(Negative Transfer)。除了稀疏性之外,我们更想要的是使用某种先验知识来表明与一些任务是相关的,而与另一些任务是无关的,在这种情况下,对任务的聚类约束显得更为合适。文献[15]提出了一种聚类约束来同时惩罚列向量及其方差的正则化:

$\Omega=||mean(a)||^2 + \lambda/ T\sum_{t=1}^{T}||a·,t - mean(a)||^2 $

$Mean(a) = (\sum_{t=1}^{T}a·,t) / T $ , 这个正则化强制使得T个模型的参数向它们的均值靠近,这个强度由lambda控制。论文中他们把这个方法用于核方法,但是这个方法也适用于线性模型。

[Jacob et al., 2009] 对把潜在的聚类正则化更加显示,通过formalizing 聚类的constraint on A,并假设聚类的类别C提前已知的。他把这个惩罚分解为三个部分 norms。

  • A global penalty which measures how large our column parameter vectors are on average
  • A measure of between-cluster variance that measures how close to each other the clusters are.
  • A measure of within-cluster variance that gauges how compact each cluster is.

Final constraint is the weighted sum of the thress norms.

As this constraint assumes clusters are known in advance, they introduce a convex relaxation of the
above penalty that allows to learn the clusters at the same time.

在另外一个场景中,tasks可能不是以簇的形式出现,而是树的结构。[kim and Xing, 2010]扩展了group lasso以处理树结构的tasks。[Chen et al.,2010]将group lasso应用于图结构的tasks。

除了前面的对模型关系进行建模的方法都采用norm regularization,也有其他的方法不采用正则化方式[Thrun and O’Sullivan, 1996]是第一批利用KNN进行tasks聚类的人,while [Ando and Tong, 2005]
learn a common structure from multiple related tasks with an application to semi-supervised learning半监督学习。

更多的其它学习多任务学习的tasks的关系使用的是贝叶斯方法:[Heskes, 2000]提出了对MTL的贝叶斯神经网络,通过对模型参数放置一个先验来鼓励tasks间的类似参数。

[Lawrence and Platt, 2004] extend Gaussian processes (GP) to MTL by inferring parameters for a shared covariance matrix.相同的协方差矩阵。As this is computationally very expensive, they adopt a sparse approximation scheme that greedily selects the most informative examples. [Yu et al., 2005] also use GP for MTL by assuming that all models are sampled from a common prior.

[Bakker and Heskes, 2003]在每一个task的layer上面放置一个高斯分布的先验。为了鼓励不同tasks间的相似,他们提出让参数的均值与task相关,并且用混合分布来对tasks进行聚类。需要注意的是,这个方法要求task的特性(定义聚类和mixtures的数量)提前指定。

基于这个方法, [Xue et al., 2007] 从狄利克雷过程采样来获得这个分布,并让模型具有学习tasks间的相似性以及聚类数量的能力。They then share the same model among all tasks in the same cluster.[Daumé III, 2009] 提出了一个层次贝叶斯模型来学习潜在的tasks层次结构,while [Zhang and Yeung, 2010]使用GP-based正则化for MTL并且扩展了之前GP-based方法以在大setting下计算可行。

其他的方法聚焦在在线多任务学习的设置:[Cavallanti et al., 2010]修改了存在的MTL方法以解决在线学习,他们也提出了一个正则化的感知机 的 MTL扩展,它以矩阵的形式编码了tasks的相关性。他们使用不同形式的正则化方式来bia this task relatedness matrix, e.g.也就是task的特性向量的临近度或者the spanned subspace’s dimension.需要注意的是,和前面的某些方法一样,它需要提前提供 构成这个矩阵的任务特性。 [Saha et al., 2011] then extend the previous approach by learning the task relationship
matrix.

[Kang et al., 2011] assume that tasks form disjoint groups and that the tasks within each group lie
in a low-dimensional subspace. 每个组内的tasks共享同样的特征表征,他的参数和group assignment matrix一起学习,using an alternating minimization schema.然而,组间的完全不相关的假设并不是理想的方式,因为tasks也许总会共享一些对预测有利的特征。

允许来自两个groups的两个tasks重叠,假设存在着一些 潜在的基任务。然后他们对每一个任务t的参数向量a_t建模 $a_t = Ls_t$ where$L R^{k*d}$ 是k个基任务的参数向量$s_t \in R^{k}$是线性组合的系数。此外,他们限制了线性组合为稀疏的,两个任务间的稀疏模式重叠度控制两个任务共享量。

最后,[Crammer and Mansour, 2012] 学习了一个共享假设集的池子,然后映射每一个task到一个hypothesis. learn a small pool of shared hypotheses and then map each task to a single hypothesis.

6 深度学习领域的MTL

它们都采用的是 hard and soft parameter sharing.

6.1 Deep Relationship Networks

shared cnn + task specifc fc layers, they also impose matrix priors on the fully connected layers, 让模型能够学习任务间的关系。

6.2 完全适应 特征共享

6.3 十字形网络

6.4 低层次监督

NLP中低层次的监督,比如speech中的部分标注,具名实体识别,都可以作为低层级的监督标签,以额外任务的方式加入main task.

6.5 联合的多任务模型

基于6.4的发现,[Hashimoto et al., 2016]预定义了一个包含多个NLP任务的层次模型。可以被视为一个多任务的联合模型。

6.6 不确定性 损失加权 Weighting losses with uncertainty

(*) must read.

Instead of learning the structure of sharing, [Kendall et al., 2017] take an orthogonal approach by considering the uncertainty of each task. They then adjust each task’s relative weight in the cost function by deriving a multi-task loss function based on maximizing the Gaussian likelihood with task-dependent uncertainty.

6.7 MTL的张量分解

[类似于矩阵分解,把张量进行分解为共享参数与与具体任务相关的参数]

6.8 Sluice Networks 水闸网络

Finally, we propose Sluice Networks [Ruder et al., 2017], a model that generalizes Deep Learning-based MTL approaches such as hard parameter sharing and cross-stitch networks, block-sparse regularization approaches, as well as recent NLP approaches that create a task hierarchy. The model,
which can be seen in Figure 8, allows to learn what layers and subspaces should be shared, as well as what layers the network has learned the best representations of the input sequences.

6.9 模型应该共享些什么?What should I share in my model?

MTL历史上的模型都关注在不同tasks都来自相同的分布。尽管这一点有助于共享,但却不是总是成立。为了为MTL开发更为稳健的模型,我们需要应对来自不相关或者弱相关的任务的情况。

尽管早期的MTL研究都预先定义好不同任务在网络的哪一层来共享,但这种方式并不能扩展并且很大程度上依赖于MTL架构。硬参数共享到现在仍然是MTL的范式,但是如果任务不是紧密相关的,它的效果会迅速下降。因此,近年的方法着重关注在 学习共享什么并且一般都比硬参数共享带来的效果提升大。此外,让模型具有学习tasks的层次关系非常有用,特别是需要不同的粒度的时候。

MTL中让模型能够学习tasks彼此交互的方式对最终的效果有益。

7 额外tasks Auxiliary Tasks

related task Adversarial Hints Focusing attention Quantization smoothing Predicting inputs Using the feature to predict the present Representation Learning What auxiliary tasks are helpful?

for examples, predict class and coordinates

7.2 Adversarial 对抗

7.3 Hints 提示

对于目标任务来说,我们可以通过学习一些对最终效果有帮助的辅助任务。比如预测句子的sentiment,可以把句子是否含有positive negative sentiment单词作为辅助任务。

7.4 Focusing attention

额外的任务可以用于让模型关注在图片中某个部分,否则在main task上面可能会忽视这一部分。

7.5 Quantization smoothing

Using less quantized auxiliary tasks might help in these cases, as they might be learned more easily due to their objective being smoother.

7.6 Predicting inputs

7.7 Using the future to predict the present

7.8 Representation learning

特征选择

feature selection

  • Filter Methods: assess the relevance of features by looking only at the intrinsic properties of the data.

    •Principal Component Analysis

    •Independent Component Analysis

  • Wrapper Methods: embed the model hypothesis search within the feature subset search.

    •Deterministic

    •Randomized

  • Embedded Methods: Features relevance is assessed using the learning classifier.

    •The MDA error estimation embedded in the RF classifier

    •The feature selection algorithm embedded in Support Vector Machines

特征重要性

可基于随机森林算法预测特征重要性

  • permutation importance: 将特征m打乱,每棵树再预测OOB样本,打乱前后预测正确的样本数量值会有一个Δ。Δ在所有树中的均值作为特征m的重要性
  • gini importance:每颗树在特征m处分裂所带来的gini decrease

Python爬虫

Python得益于其简单的语法和丰富的库,在爬数据时非常方便。在爬虫这一块,有Scrapy这个库封装了爬虫涉及的各方面,是工业级爬虫的一个选择。但在只爬取一次的数据的时候,使用request beautifulsoup要方便很多。本文记录了一些自己在爬数据方面的一些总结。

阅读更多