统计学习方法总结

0. 相关知识点

统计学习(statistical learning)是关于计算机基于数据构建概率统计模型并运用模型对数据进行预测与分析的一门学科。统计学习的对象是数据(data),它从数据出发,提取数据的特征,抽象出数据的模型,发现数据中的知识,又回到对数据的分析与预测中去

统计学习关于数据的基本假设是同类数据具有一定的统计规律性(例如概率分布),这是统计学习的前提。对数据的预测与分析是通过构建概率统计模型来实现的,统计学习总的目标就是考虑学习什么样的模型和如何学习模型,以使模型能够对数据进行准确的预测与分析,同时也要尽可能地提高学习效率

统计学习的方法是基于数据构建统计模型从而对数据进行预测与分析,统计学习由下列几种学习方法组成

1. 监督学习(supervised learning)
2. 非监督学习(unsupervised learning)
3. 半监督学习(semi-supervised learning)
4. 强化学习(reinforcement learning)

0x1: 监督学习

在监督学习中,统计学习的方法可以概括如下:

1. 从给定的、有限的、用于学习的训练数据(training data)集合出发(训练集是人工给定的、已知label的数据集),假设数据是独立同分布产生的;
2. 并且假设要学习的模型属于某个函数的集合(称为假设空间 hypothesis space);
3. 应用某个评价标准(evaluation criterion)从假设空间中选取一个最优的模型,使他对已知训练数据及未知测试数据(test data)在给定的评价准则下有最优的预测;
4. 最优模型的选取由算法实现

这样,统计学习的方法包括模型的假设空间、模型选择的准则、以及模型学习的算法,称为统计学习方法的三要素,简称模型(model)、策略(strategy)、算法(algorithm)

实现统计学习的方法的步骤如下

1. 得到一个有限的训练数据集合,包括样本特征的抽取;
2. 确定包含所有可能的模型的假设空间(即学习模型的集合),对应判别模型和生成模型的训练中,就是建立目标模型的数学公式描述
3. 确定模型选择的准则,即学习的策略
4. 实现求解最优模型的算法,即学习的算法,这块常常是学习策略的具体数学化表示,算法作为策略实现的手段
5. 通过学习方法选择最优模型,这部分又可以分为直接求出解析最优解、和逐步迭代求每轮的局部最优解从而逼近全局最优解(例如SGD)
6. 利用学习的最优模型对新数据进行预测或分析

监督学习(supervised learning)的任务是学习一个模型(包括生成模型和判别模型),使模型能够对任意给定的输入,对其相应的输出做出一个好的预测

1. 模型假设空间

监督学习的目的在于学习一个由输入到输出的映射,这一映射由模型来表示。模型属于由输入空间到输出空间的映射的集合,这个集合就是假设空间(hypothesis space)。监督学习的模型可以是概率模型或者非概率模型(决策函数)

概率模型:在学习的过程中,监督学习假设输入与输出的随机变量X和Y满足联合概率分布,这是监督学习的基本假设,即数据本身的规则必须确实存在,建模训练才能有效

决策函数(decision function):由 Y = f(X)表示

2. 生成模型与判别模型的联系与区别

生成的联合概率和决策函数又可以称为生成方法(generative approach)和判别方法(discriminative approach),训练得到的模型分别称为生成模型(generative model)和判别模型(discriminative model)

生成方法:由数据学习学习联合概率分布,然后求出条件概率分布作为预测的模型,即生成模型:。这样的方法之所以称为生成方法,是因为模型表示了给定输入 X 产生输出 Y 的生成关系,典型的生成模型有:朴素贝叶斯法和隐马尔科夫模型

向生成方法输入X,生成模型的条件概率会给出整个概率分布上所有类别Y的概率,我们根据argmax取概率最大的那一类作为预测结果

 

判别方法:由数据直接学习决策函数或者条件概率分布作为预测的模型,即判别模型。判别模型关心的对给定的输入X,应该预测什么样的输出Y。典型的判别模型包括:K近邻法、感知机、决策树、逻辑斯蒂回归模型、最大熵模型、支持向量机、条件随机场等

向判别方法输入X,判别方法会得出一个Y,然后拿这个Y与一个阈值比较,根据比较的大小结果得到属于哪个类

 生成算法尝试去找到底这个数据是怎么生成的(产生的),然后再对一个信号进行分类。基于你的生成假设,那么那个类别最有可能产生这个信号,这个信号就属于那个类别。判别模型不关心数据是怎么生成的,它只关心信号之间的差别,然后用差别来简单对给定的一个信号进行分类

直接学习条件概率分布 P(Y | X)或决策函数 Y = f(X)的方法为判别方法,对应的模型是判别模型。感知机、k近邻、决策树、逻辑斯蒂回归、最大熵模型、支持向量机、提升方法、条件随机场是判别方法;

首先学习联合概率分布 P(X,Y),从而求得条件概率分布 P(Y | X)的方法是生成方法,对应的模型是生成模型。朴素贝叶斯法、隐马尔科夫模型是生成方法。

下图给出了部分模型之间的关系

在监督学习中,生成方法和判别方法各有优缺点,适合于不同条件下的学习问题

1. 生成方法的特点:
    1) 生成方法可以还原出联合概率分布P(X,Y),而判别方法则不能
    2) 生成方法的学习收敛速度更快,即当样本容量增加时,学到的模型可以更快地收敛于真实模型
    3) 当存在隐变量时,生成方法仍可以学习,此时判别方法则不能用
    4) 生成模型的模型数学定义更困难,例如常用高斯模型需要假设样本数据特征满足高斯分布,但是我们知道实际问题中,样本的特征分布规律是十分复杂有时候难以用一个直观的数学表达式进行描述
    5) 生成方法学习联合概率密度分布P(X,Y),所以就可以从统计的角度表示数据的分布情况,能够反映同类数据本身的相似度。但它不关心到底划分各类的那个分类边界在哪。

2. 判别方法的特点:
    1) 判别方法直接学习的是条件概率P(Y|X)或决策函数f(X),直接面对越策,往往学习的准确率更高
    2) 由于直接学习P(Y|X)或f(X),可以对数据进行各种程度上的抽象(例如DNN多层抽象、SVM升维扭曲)、定义特征并使用特征,因此可以简化学习问题
    3) 判别模型由于不存在模型数序定义的问题,因此适合于复杂问题的场景,当样本中的规律分布不是十分明显满足某个已知概率分布的时候,可以尝试用判别模型训练分类器
    4) 判别方法直接学习的是决策函数Y=f(X)或者条件概率分布P(Y|X)。不能反映训练数据本身的特性。但它寻找不同类别之间的最优分类面,反映的是异类数据之间的差异

从生成模型可以推导出判别模型,但是从判别模型无法反向推导。换句话,训练样本满足生成模型的概率分布是一个强假设,这个强假设可以推导出一个弱假设,例如一个训练集满足高斯判别模型(生成模型),则这个训练集一定能用逻辑斯蒂回归判别模型进行分类,反之则不行

例如也是两类w1和w2,那么我们通过生成模型求得了P(w1|X)和P(w2|X),那么实际上判别函数就可以表示为Y= P(w1|X)/P(w2|X),如果Y大于1或者某个阈值,那么X就属于类w1,如果小于阈值就属于类w2

本质上,分类器的设计就是在给定训练数据的基础上估计其概率模型P(Y|X)。如果可以估计出来,那么就可以分类了。但是一般来说,概率模型是比较难估计的,实际问题中样本背后的概率分布数学模型(数学建模)往往是十分复杂的,我们很难或者需要花费很大精力来进行建模,所以就有了不依赖概率模型直接设计分类器呢,分类器就是一个决策函数(或决策面),它能够从要解决的问题和训练样本出发直接求出判别函数,就不用估计概率模型了

例如支持向量机,我已经知道它的决策函数(分类面)是线性的了,也就是可以表示成Y=f(X)=WX+b的形式,那么我们通过训练样本来学习得到W和b的值就可以得到Y=f(X)了

还有一种更直接的分类方法,它不用事先设计分类器,而是只确定分类原则,根据已知样本(训练样本)直接对未知样本进行分类。包括近邻法,它不会在进行具体的预测之前求出概率模型P(Y|X)或者决策函数Y=f(X),而是在真正预测的时候,将X与训练数据的各类的Xi比较,和哪些比较相似,就判断它X也属于Xi对应的类。

举一个由高斯生成模型推导逻辑回归判别模型的例子

这里我们来讨论一个简单的例子,高斯生成模型,也即每个类别的数据分布都可以由高斯模型进行建模

类别概率为伯努利分布(即二类概率分布),在这个问题中,所涉及到的未知参数包括:ϕ,Σ,μ0,μ1,参数的求解可以通过最大化联合概率分布求得,即

最终求得的各个参数计算公式为:

我们以图示来说明,其中,圆圈和叉号分别表示两类数据,分别使用高斯模型对两类数据分布进行建模,由于两个高斯模型的协方差参数是一致的,所以这两个高斯分布的形状是一样的,只是中心位置不一致

图示中的直线表示的是高斯模型生成的决策面,表示p(y=1|x)=p(y=0|x)=0.5,表示属于两个类别的概率大小是一样的,否则的话,根据数据属于两个类别的概率大小(阈值)决定数据所属于的类别,这就是生成模型的预测方式

接下来,我们继续推导,值得注意的是,高斯生成模型中,p(y=1|x;ϕ,μ0,μ1,Σ)是可以表示为输入变量 x 的函数的,即:


而这个形式恰好是逻辑回归的基本模型!这说明,我们在使用高斯模型对每一类别的特征数据进行建模时,其生成式p(y|x)是符合逻辑回归模型的,但是如果满足有p(y|x)符合逻辑回归模型,并不能一定得到数据特征分布是高斯分布这个结论,所以反向推导是不成立的!

实际上,当类别数据特征分布满足如泊松分布(Poisson Distribution)时,也可以得到p(y|x)是满足逻辑回归模型的,同样反向推导不成立

总的说来,GDA(高斯生成算法)对数据分布进行了一定的假设(假设数据分布是高斯分布的),当数据确实符合或近似符合高斯分布时,这种计算方法是比较高效准确的;但是当数据并不符合高斯分布时,这种计算方法的效果并不是很好,而逻辑回归并不存在这样的假设,所以当数据不满足高斯分布时,逻辑回归分类的效果要更好一些
这也就是说判别模型更适合对样本数据概率分布未知(难以建模)的情况,判别模型能自动进行特征抽象和分类

3. 学习策略

有了模型的假设空间,统计学习接着要考虑的是按照什么样的准则学习或选择最优的模型,统计学习的目标在于从假设空间中选取最优模型

损失函数和风险系数 - 期望风险体现当前选择模型对待推导规律的拟合程度

监督学习问题是在假设空间中选取模型作为决策函数,对于给定的输入X,由给出相应的输出Y,这个输出的预测值与真实值Y可能不一致,因此统计学习用一个损失函数(loss function)或代价函数(cost function)来度量预测错误的程度,损失函数是和Y的非负实值函数,记作

统计学习常用的损失函数有以下几种:

(1)0-1损失函数(0-1 loss function):

(2)平方损失函数(quadratic loss function):

(3)绝对值损失函数(absolute loss function):

(4)对数损失函数(logarithmic loss function)或对数似然损失函数(loglikelihood loss function):

不管损失函数的形式如何,但本质来说,它们的目的都是一样的,即损失函数值越小,模型就越好。由于模型的输入、输出(X,Y)是随机变量,遵循联合分布P(X,Y),所以损失函数的期望是:

这是理论上模型关于联合分布P(X,Y)的平均意义下的损失,称为风险函数(risk function)期望损失(expected loss)

理论上来说,统计学习的目标就是选择期望风险最小的模型,但是联合分布P(X,Y)是未知的,事实上,联合分布也正是我们需要通过机器学习去求得的结果(某种程度上来说,联合分布就是规律本身)。因此,期望风险就只能是一个理论值,不具有实际工程化价值,我们需要引入经验风险的概念

经验风险 - 反映当前选择的模型对样本的拟合程度

给定一个训练数据集:,模型关于训练数据集的平均损失称为经验风险(empirical risk)或经验损失(empirical loss):,期望风险是模型关于联合分布的期望损失,经验风险是模型关于训练样本集的平均损失。根据大数定律,当样本量趋于无穷时,经验风险无限趋近于期望风险,所以我们可以近似地用经验风险估计期望风险。但是在实际中样本数目往往是有限的甚至较少的,所以直接用经验风险估计期望风险就会遇到不准确的问题(例如过拟合),这对需要对经验风险进行一定的矫正,这就引出接下来要讨论的2个策略:经验风险最小化和结构风险最小化

经验风险最小化

在假设空间、损失函数以及训练数据集确定的情况下,经验风险函数可以唯一确定。经验风险最小化(empirical risk minimization ERM)的策略认为,经验风险最小的模型就是最优的模型,根据这一策略,按照经验风险最小化求最优模型就是求解最优化问题: 。当样本量足够大时,经验风险最小化能保证有很好的学习效果,例如极大似然估计(maximum likelihood estimation)就是经验风险最小化的一个例子

当时,当样本容量很小时,经验风险最小化学习的效果就会产生误差,甚至出现“过拟合(over-fitting)”的现象

结构风险最小化 

结构风险最小化(structural risk minimization SRM)就是为了防止过拟合而提出的策略。结构风险最小化等价于正则化(regularization)。结构风险在经验风险之上加上了表示模型复杂度的正则化项(regularizer)或惩罚项(penalty term):,式中为模型的复杂度,是定义在假设空间,模型 f 越复杂,复杂度就越大。复杂度表示了对复杂模型的惩罚。是系数,用以权衡经验风险和模型复杂度

模型复杂度是一个泛函

1. 在生成模型中,它往往是先验概率分布
2. 在判别模型中,它往往和模型原子单元(例如决策树结点或神经元)

结构风险最小化的策略认为结构风险最小的模型就是最优的模型,所以求最优模型,就是求解最优化问题:,这样,监督学习问题就变成了经验风险或结构风险函数的最优化问题。

不同算法模型中使用的损失函数在思想的一致

1)判别模型

学习策略需要通过损失函数来数学化表示。在二分类的监督学习中,支持向量机、逻辑斯蒂回归、最大熵模型、提升方法各自使用的损失函数为:

1. 支持向量机:合页损失函数
2. 逻辑斯蒂回归:逻辑斯蒂损失函数
3. 最大熵模型:指数损失函数
4. 提升方法:和基函数有关

这3种损失函数都是0-1损失函数的上界,具有相似的形状,如下图所示:

所以,可以认为支持向量机、逻辑斯蒂回归、最大熵模型、提升方法使用不同的代理损失函数(surrogate loss function)表示分类的损失,定义经验风险或结构风险函数,实现二类分类学习任务。学习的策略是优化以下结构风险函数:

第一项为经验风险(经验损失),第二项为正则化项,为损失函数,为模型的复杂项,为系数。

支持向量机用 L2 范数表示模型的复杂度。原始的逻辑斯蒂回归与最大熵模型有没正则化项,可以给它们加上 L2 范数正则化项。提升方法没有显式的正则化项,通常通过早停止(early stopping)的方法达到正则化的效果。

2)概率模型

概率模型的学习可以形式化为极大似然估计或贝叶斯的极大后验概率估计。这时,学习的策略是极小化对数似然函数或极小化正则化的对数似然损失。对数似然损失可以写成:

极大后验概率估计时,正则化项是先验概率的负对数

4. 分类问题与回归问题

监督学习中,根据输入变量和输出变量的数据类型,对预测任务分为以下几类

1. 回归问题:输入变量与输出变量均为连续变量的预测问题
2. 分类问题:输出变量为有限个离散变量的预测问题
3. 标注问题:输入变量与输出变量均为变量序列的预测问题

但是这里需要补充一句,分类问题和回归问题的分解并不是那么绝对, 分类模型和回归模型本质一样,分类模型可将回归模型的输出离散化,回归模型也可将分类模型的输出连续化

下面举例说明它们之间的转换关系

1. Logistic Regression 和 Linear Regression:
    1) Linear Regression: 输出一个标量 wx+b,这个值是连续值,所以可以用来处理回归问题
    2) Logistic Regression:把上面的 wx+b 通过 sigmoid 函数映射到(0,1)上,并划分一个阈值,大于阈值的分为一类,小于等于分为另一类,可以用来处理二分类问题
    3) 更进一步: 对于N分类问题,则是先得到N组w值不同的 wx+b,然后归一化,比如用 softmax 函数,最后变成N个类上的概率,根据argmax取概率最大的那一类为最后的预测结果,可以处理多分类问题 

2. Support Vector Regression 和 Support Vector Machine: SVR:
    1) SVR:输出 wx+b,即某个样本点到分类面的距离,是连续值,所以是回归模型 
    2) SVM: 把这个距离用 sign(·) 函数进行离散化处理,距离为正(在超平面一侧)的样本点是一类,为负的是另一类,所以是分类模型 

3. Naive Bayes 用于分类 和 回归: 
    1) 用于分类: y是离散的类别,所以得到离散的 p(y|x),给定 x ,输出每个类上的概率 
    2) 用于回归: 对上面离散的 p(y|x)求期望 ΣyP(y|x)(即得到概率密度),就得到连续值

4. 前馈神经网络(如 CNN 系列) 用于 分类 和 回归: 
    1) 用于回归: 最后一层有m个神经元,每个神经元输出一个标量,m个神经元的输出可以看做向量 v,然后全部连到一个输出神经元上,则这个神经元输出 wv+b,是一个连续值,可以处理回归问题,跟上面 Linear Regression 思想一样 
    2) 用于N分类: 现在这m个神经元最后连接到 N 个神经元,就有 N 组w值不同的 wv+b,同理可以归一化(比如用 softmax )变成 N个类上的概率,然后取概率最大的那一类作为N分类的预测结果
    3) 用于多标签: 如果不用 softmax,而是每个 wx+b 用一个 sigmoid,就变成多标签问题,跟多分类的区别在于,样本可以被打上多个标签

5. 循环神经网络(如 RNN 系列) 用于分类 和 回归:
    1) 用于回归 和 分类: 跟 CNN 类似,输出层的值 y = wv+b,可做分类可做回归,只不过区别在于,RNN 的输出跟时间有关,即输出的是 {y(t), y(t+1),...}序列

回归问题和分类问题的本质区别在于它们采用的策略不同:

1. 回归问题的策略是:模型的拟合函数和样本点的距离要尽可能近,优化的方向也是朝着不断靠近的方向优化的
2. 分类问题的策略是:模型的分界面(本质也是一个函数)和样本点的距离尽可能远,优化的方向是朝着不断远离的方向优化的

5. 利用模型进行预测和分析

在学习过程中,,学习系统利用给定的训练数据集,通过学习(或训练)得到一个模型,表示为条件概率分布或决策函数,条件概率分布或决策函数描述输入与输出随机变量之间的映射关系

在预测过程中,预测系统对于给定的测试样本集中的输入,由模型给出相应的输出

0x2:模型评估与模型选择

1. 训练误差与测试误差

统计学习的目的是使学到的模型不仅对已知数据而且对未知数据都能有很好的预测能力。训练误差的大小,对判定给定的问题是不是一个容易学习的问题是有意义的,它表明了模型对训练数据的拟合程度,但本质上并不重要。测试误差反映了学习方法对未知的测试数据集的预测能力,是学习中的重要概念,通常将学习方法对未知数据的预测能力称为泛化能力(generalization ability)

2. 过拟合与模型选择

当假设空间含有不同复杂度(例如不同的参数个数)的模型时(例如深度深度网络的神经元个数、或决策树的结点个数),就要面临模型选择(model selection)的问题。我们希望选择或学习一个合适的模型,如果在假设空间中存在“真”模型,那么所选择的模型应该逼近真模型。如果一味追求提高对训练数据的预测能力,所选模型的复杂度则往往会比真模型更高,这种现象称为过拟合(over-fitting)。过拟合是指学习时选择的模型所包含的参数过多,以致于出现这一模型对已知数据预测得很好,但对未知数据预测得很差的现象

下图描述了训练误差和预测误差与模型的复杂度之间的关系。当模型的复杂度增大时,训练误差会逐渐减小并趋向于0;而测试误差会先减小,达到最小值后又增大。当选择的模型复杂度过大时,过拟合现象就会发生。

这样,在学习时就要防止过拟合,进行最优的模型选择,即选择复杂度适当的模型,以达到使测试误差最小的学习目的。达到这个目的需要借助一些数学工具和工程化方法

0x3:正则化与交叉验证 - 缓解过拟合的发生

1. 正则化 - 结构风险最小化策略的一种具体实现

模型选择的典型方法是正则化(regularization),正则化是结构风险最小化策略的实现,是在经验风险上加上一个正则化项(regularizer)或惩罚项(penalty term)。正则化项一般是模型复杂度的单调递增函数,模型越复杂,正则化值就越大。正则化是对经验风险函数的一种扩展,一般具有如下形式:

第一项是经验风险,第二项是正则化项,为调整两者之间关系的系数。

我们在学习具体算法的时候会频繁看到这个函数形式或其变体,正则化是机器学习算法常用甚至标配的一种损失函数形式。值得注意的是,上面的公式是正则化项的泛表达式,根据损失函数的不同正则化项可以取不同的形式,例如回归问题中,损失函数是平方损失,正则化项可以是参数向量的L2范数:

正则化项符合奥科姆剃刀(Occam;s razor)原理:

在所有可选的模型中,能够很好解释已知数据并且十分简单才是最好的模型,也就是应该选择的模型
1. 从贝叶斯估计的角度来看,正则化项对应模型的先验概率,可以假设复杂的模型有较大的先验概率,简单的模型有较小的先验概率
2. 从线性分类器的角度来看,正则化项对应模型的参数个数,可以假设复杂的模型有较多的参数个数,简单的模型有较少的参数个数

注意,正则化不产生新的模型,它只是帮助我们在模型空间中选择一个尽量好的模型

2.  交叉验证

另一种常用的模型选择方法是交叉验证(across validation),在很多实际应用中我们的训练数据往往不够充分,为了选择好的模型,可以采用交叉验证方法,它的基本思想是:重复地使用数据,把给定的数据进行切分,将切分的数据集组合为训练集与测试集,在此基础上反复地进行训练、测试以及模型选择

简单交叉验证

1. 首先将数据分为两部分,一部分作为训练集(70%),另一部分作为测试集(30%);
2. 然后用训练集在各种条件下(例如不同的参数个数)训练模型,从而得到不同的模型;
3. 在测试集上评价各个模型的测试误差,选出测试误差最小的模型

S折交叉验证(S-fold cross validation)

1. 首先随机地将数据切分为S个互不相交的大小相同的子集;
2. 然后利用 S-1 个子集的数据训练模型,利用余下的 1 个子集测试模型;
3. 将这一过程对可能的 S 种选择重复进行(即进行S次);
4. 最后选出 S 次测评中平均测试误差最小的模型

留一交叉验证

S 折交叉验证的特征情况是 S = N(N是给定数据集的容量),称为留一交叉验证(leaver-one-out cross validation),往往在数据缺乏的情况下使用

0x4:学习算法

统计学习的问题有了具体的形式之后,就变成了纯数学上的最优化问题。

有时,最优化问题比较简单,解析解存在,最优解可以由公式简单计算。

但在多数情况下,最优化问题没有解析解,需要用数值计算或启发式的方法求解。

朴素贝叶斯法与隐马尔科夫模型的监督学习,最优解即极大似然估计值,可以由概率计算公式直接计算;

感知机、逻辑斯蒂回归与最大熵模型、条件随机场的学习无法直接求得解析解,需要用到梯度下降法、拟牛顿法进行迭代优化。这些都是一般的无约束最优化问题的解法;

支持向量机学习,可以解凸二次规划的对偶问题。有序列最小最优化算法等方法;

决策树学习是基于启发式算法的典型例子,可以认为特征选择、生成、剪枝是启发式地进行正则化的极大似然估计;

提升方法利用学习的模型是加法模型、损失函数是指数损失函数的特点,启发式地从前向后逐步学习模型,以达到逼近优化目标函数的目的;

EM算法是一种迭代的求解含隐变量模型参数的方法,它的收敛性可以保证,但是不能保证收敛到全局最优;

0x5:监督学习中的典型问题场景

1. 回归问题

回归(regression)是监督学习中的一个很重要的问题。回归用于预测输入变量(自变量)和输出变量(隐变量)之间的关系,特别是当输入变量发生变化时,输出变量的值随之发生的变化。回归模型正是表示从输入变量到输出变量之间映射的函数。

回归问题的学习等价于函数拟合:选择一条函数曲线使其很好地拟合已知数据且很好地预测未知数据

回归问题按照输入变量的个数,分为一元回归和多元回归;按照输入变量和输出变量之间关系的类型即模型的类型,分为线性回归和非线性回归

回归问题最常用的损失函数是平方损失函数(也可以用其他损失函数),在此情况下,回归问题的求解就是最小二乘法(least squares)求解

2. 分类问题

分类问题是监督学习的一个核心问题,在监督学习中,当输出变量Y取有限个离散值时,预测问题便成了分类问题,这时输入变量X可以是离散的,也可以是连续的。监督学习从数据中学习一个分类模型或分类决策函数(分类器 classifier)

3. 标注问题

标注(tagging)也是一个监督学习问题,可以认为标注问题是分类问题的一种推广,同时标注问题又是更复杂的结构预测(structure prediction)问题的简单形式。标注问题的输入是一个观测序列,输出是一个标记序列或状态序列。

标注问题的目标在于学习一个模型,使它能够对观测序列给出标记序列作为预测,需要注意的是,可能的标记个数是有限的,但其组合所成的标记序列的个数是依序列长度呈指数级增长的。

所以,可以认为分类问题是标注问题的特殊情况,分类问题中可能的预测结果是二类或多类,而标注问题中可能的预测结果是所有的标记序列,其数目是指数级的。

Relevant Link:

http://open.163.com/movie/2008/1/A/R/M6SGF6VB4_M6SGHMFAR.html
http://blog.csdn.net/u014791046/article/details/51762888
http://blog.csdn.net/daijiguo/article/details/52218207
http://www.jdon.com/bigdata/a-tour-of-machine-learning-algorithms.html
https://www.zhihu.com/question/38677354?sort=created
https://www.zhihu.com/question/21329754 
http://blog.csdn.net/zouxy09/article/details/8195017
http://blog.csdn.net/Fishmemory/article/details/51711114
https://www.zhihu.com/question/22374366/answer/21224060
https://segmentfault.com/q/1010000000687677?_ea=963786
http://blog.csdn.net/zouxy09/article/details/8195017
http://blog.csdn.net/wolenski/article/details/7985426
http://www.jianshu.com/p/d195b887a32e
http://www.cnblogs.com/fanyabo/p/4067295.html

 

1. 各类算法横向对比

这章节对所有算法的适用场景,模型特点,学习策略等进行框架性的横向对比,之后的章节再深入到细节中进行细致考量

0x1: 监督学习算法适用的场景

监督学习可以认为是学习一个模型,使它能对给定的输入预测相应的输出。监督学习包括分类标注回归

1. 分类

分类问题是从实例的特征向量到类标记的预测问题。常见的分类方法有

1. 感知机
  1)针对二分类的,可以将其扩展到多类分类
  2)具有模型直观、方法简单、实现容易等特点
2. k近邻法
  1)常用语多分类问题
  2)具有模型直观、方法简单、实现容易等特点
3. 朴素贝叶斯法
  1)可以解决二分类、多类分类问题
  2)具有模型直观、方法简单、实现容易等特点
4. 决策树
  1)可以解决二分类、多类分类问题
  2)具有模型直观、方法简单、实现容易等特点
5. 逻辑斯蒂回归
  1)可以解决二分类、多类分类问题
  2)模型更复杂但更有效的分类方法,往往分类准确度更高
6. 最大熵模型
  1)可以解决二分类、多类分类问题
  2)模型更复杂但更有效的分类方法,往往分类准确度更高
7. 支持向量机
  1)针对二分类的,可以将其扩展到多类分类
  2)模型更复杂但更有效的分类方法,往往分类准确度更高
8. 提升方法

2. 标注

标注问题是从观测序列到标记序列(或状态序列)的预测问题。可以认为分类问题是标注问题的特殊情况。分类问题中可能的预测结果是二类或多类,而标注问题中可能的序列预测结果是所有的标记序列,其数目是指数级的(序列的顺序性本身也是预测的范围,所以是类别数的指数次方)

常见的标注方法有

1. 隐马尔可夫模型
2. 条件随机场

3. 回归

回归问题是实例的特征向量到一个连续性值结果的预测问题,可以认为分类问题是回归问题的一种离散化特例

0x2: 模型特点

undone

Relevant Link:

https://www.zhihu.com/question/26726794

https://zhuanlan.zhihu.com/p/25327755 

 

3. 感知机

感知机(perceptron)是二类分类的线性分类模型,其输入为样本实例的特征向量,输出为实例的类别,是一种判别模型,感知机得到的超分类面并不能表达出训练样本包含的概率分布,它只是能“尽可能好地”完成对训练样本的二分类任务

0x1: 适用场景

感知机模型基于超平面将实例分到超平面的某一边,所以感知机只能用于二分类的场景

0x2: 模型特点

假设输入空间(特征空间) 是,输出空间是(二分类)。由输入空间到输出空间的如下函数:称为感知机。其中,w(权值向量)和b(偏置)称为感知机模型参数,表示w和x的内积,sign是符号函数,即:

感知机是一种线性分类模型,属于判别模型。感知机模型的假设空间是定义在特征空间中的所有线性分类模型(linear classification model)或线性分类器(linear classification),即函数集合:

感知机有如下几何解释:

线性方程对应于特征空间中的一个超平面S,其中 w 是超平面的法向量,b 是超平面的截距。这个超平面将特征空间划分为两个部分,位于两部分的点(特征向量)分别被分为正、负两类。因此,超平面 S 称为分离超平面(separating hyperplane)

关于权重向量w和偏置b的内在含义我们还需要深入思考下

1. 如果说w和b两个参数确定一个超平面的话,w决定的就是这个超平面的方向,即这个超平面“倾向于”哪个维度的特征
2. 而截距b决定了分界面的数值位置,即分界点选在特征值的哪里

0x3: 学习策略

假设训练数据集是线性可分的,感知机学习的目标是:

求得一个能够将训练集正实例和负实例点完全分开的分离超平面,只要分对了就行,甚至都不关注被分对的那些样本是不是太靠近分界面了(太靠近分界面意味着模型的泛化能力可能不足,预测的时候特征有一些扰动就可能产生误报)。从这点上来看,SVM的寻找分界面的策略要优于感知机

为了找到这样一个超平面,即确定感知机模型参数w和b,需要确定一个学习策略,即定义(经验)损失函数,并将损失函数极小化(学习策略是抽象的,我们需要数学化的定量描述)

1. 损失函数的一个可能的选择是误分类点的总个数,但是这样的损失函数是一个离散函数,不是参数w和b的连续可导函数,不易进行迭代优化
2. 损失函数的另一个选择是误分类点到超平面S的总距离,这是感知机所采用的(这意味着损失函数需要是一个连续可导且存在极值的函数)

 我们首先定义输入空间中任一点到超平面S的距离:,这里,是w的L2范数。然后,对于误分类的数据来说,,因此,误分类点到超平面S的距离是:。这样,假设超平面S的误分类点集为M,那么所有误分类点到超平面S的总距离为:,不考虑就得到了感知机学习的损失函数数学公式,这种纯粹基于样本推导得到的损失函数也叫做经验风险函数,同时,给定训练集T,损失函数是w,b的连续可导函数

感知机算法求损失函数最小值(经验风险最小)寻找分界面的本质和极大似然求解是一样的,都是在寻找一个有最大概率产生当前观察样本的模型

0x4: 学习算法

感知机寻找最优超分界面的问题转化为了求解损失函数最优解的问题,它们是等价的。感知机的损失函数是一个非常光滑的连续曲线, 因此最优化的方法是随机梯度下降法(stochastic gradient descent)

感知机学习算法是误分类驱动的,首先,随机选取一个超平面w0、b0,然后用梯度下降法不断地极小化目标函数

在一轮梯度下降迭代中,假设误分类点集合M是固定的,那么损失函数的梯度由:给出

可以看到,权重w的调整和样本特征以及分类结果共同决定并调整,偏置b的调整只和分类结果决定

随机选取一个误分类点,对w,b进行更新:,式中是步长,在统计学习中又称为学习率(learning rate)。这样,通过迭代可以让损失函数不断减小

这样的算法过程在直观上有如下解释:当一个实例点被误分类,即位于分离超平面的错误一侧时,则调整w,b的值,使分离超平面向该误分类点的一侧移动,以减少该误分类点与超平面间的距离,直至超平面越过该误分类点使其被正确分类

 

4. K近邻法

K近邻法(k-nearest neighbor KNN)是一种数据驱动(基于实例的算法(Instance-based Algorithms))的分类回归方法。它属于一种判别模型

基于实例的算法(有时也称为基于记忆的学习)是这样学习算法,不是明确归纳概率分布或者分界面,而是将新的问题例子与训练过程中见过的例子进行对比,这些见过的例子就在存储器中。
之所以叫基于实例的算法是因为它直接从训练实例中建构出假设。这意味这,假设的复杂度能随着数据的增长而变化:最糟的情况是,假设是一个训练项目列表,分类一个单独新实例计算复杂度为 O(n)

0x1:适用场景

1. 多分类问题场景

在多分类问题中的k近邻法,k近邻法的输入为实例的特征向量,对应于特征空间的点;输出为实例的类别。k近邻法假设给定一个训练数据集,其中的实例类别已定,分类时,对新的实例,根据其k个最近邻的训练实例的类别,通过多数表决等方式进行预测。因此,k近邻法不具有显示的学习过程,k近邻法实际上利用训练数据集对特征向量空间进行划分,并作为其分类的“模型”

2. 回归问题的场景

KNN算法不仅可以用于分类,还可以用于回归。通过找出一个样本的k个最近邻居,将这些邻居的属性的平均值赋给该样本,就可以得到该样本的属性。更有用的方法是将不同距离的邻居对该样本产生的影响给予不同的权值(weight),如权值与距离成正比

0x2:模型特点

输入训练数据集,其中为实例的特征向量,为实例的类别。根据给定的距离度量,在训练集中找出与 x 最邻近的 K(需要人工设定调参) 个点,在由这 K 个点组成的邻域中根据分类决策规则决定 x 的类别 y

k近邻法的特殊情况是k=1的情形,称为最近邻算法,即对于输入的实例点(特征向量)x,最近邻法将训练数据集中与x最邻近的类作为x的类

k近邻法没有显示的学习过程,作为判别模型的一种,k近邻法的判别函数的具体形式也不是很明显

k近邻法使用的模型实际上对应于特征空间的划分,某种意义上来说,k近邻的模型就是样本特征空间本身。在k近邻法中,当训练集、距离度量、k值、分类决策规则确定后,对于任何一个新的输入实例,它所属的类唯一地确定。这相当于根据上述基本要素将特征空间划分为一些子空间,确定子空间里的每个点所属的类

特征空间中,对每个训练实例点x1,距离改点比其他点更近的所有点组成一个区域,叫作单元(cell)。每个训练实例点拥有一个单元,所有训练实例点的单元构成对特征空间的一个划分

k近邻很好地体现了判别式模型的思想,k近邻不生成概率分布函数,它只是通过三个基本要素尽可能地“捕捉”训练样本中的概率密度特征。
之所以输入样本会被分到不同的类别,其本质就在于在训练样本中存在不均匀的概率密度分布,即某一个区域某一个类别密度占比比其他的类多

模型由三个基本要素 - k值选择距离度量分类决策规则组成,下面我们逐个讨论

1. K值选择

K值的选择会对k近邻法的结果产生重大影响。

1. 如果选择较小的K值,就相当于用较小的邻域中的训练实例进行预测
    1)“学习”的近似误差(approximation error)会减少,只有与输入实例较近的(相似的、Lp距离较小的)训练实例才会对预测结果起作用
     2)但缺点是“学习”的估计误差(estimation error)会增大,预测结果会对近邻的实例点非常敏感,如果近邻的实例点恰巧是噪声,预测就会出错,可以理解为模型的容错性较差
换句话说,k值的减小就意味着整体模型变得复杂(因为搜索范围小了,所以总的需要的搜索结果的存储单元就变多了),容易发生过拟合

2. 如果选择较大的K值,就相当于用较大邻域中的训练实例进行预测
     1)优点是可以减少学习的估计误差,即不容易受到近邻点的波动影响
     2)但缺点是学习的近似误差会增大,这时与输入实例较远的(不相似的)训练实例也会对预测其作用,使预测发生错误
总体来说,K值的增大就意味着整体模型变得简单

近似误差和估计误差的核心区别在于是假设临近点的噪音扰动比较多还是远点的噪音扰动比较多。在实际应用中,k值一般选取一个比较小的数值,即我们基本上认为近邻点的相关性是比较大的,而原点的相关性比较小

在实际项目中,K值的选择和样本中的概率密度分布有关,并没有一个定式的理论告诉我么该选什么样的K值,好在的是这个K值的搜索空间并不是很大,通常我们可以采取一个for循环交叉验证来搜索所有可能的K值,通过重复进行多次实验,每次随机选取不同的train set和validate set,查看KNN模型对train set和validate set的拟合和泛化能力来选择一个最好的K值

2. 距离度量

特征空间中两个实例点的距离是两个实例点相似程度的反映。K近邻模型的特征空间一般是n维实数向量空间,计算两个向量之间的距离有很多种方法,注意这不是KNN独有的算法,向量间距离模型是数学中的基础概念

设特征空间是n维实数向量空间的Lp距离定义为:

P = 1:曼哈顿距离(Manhattan distance):

P = 2:欧式距离(Euclidean distance):

P = 正无穷:各个坐标距离的最大值:

下图给出了二维空间中p取不同值时,与原点的Lp距离为1(Lp = 1)的点的集合图形

这张图很好地说明了取不同的距离策略对于KNN对于紧邻点的搜索范围是不同的,进而影响随后的判别分类结果

有一个例子说明由不同的距离度量所确定的最近邻点是不同的。已知二维空间的3个点,我们来对比一下在p取不同的值时,Lp距离下X1的最近邻点

P值 和X2距离 和X3距离
1 4 6
2 4 4.24
3 4 3.78
4 4 3.57

可以看到,p = 1/2时,X2是X1的最近邻点;P >= 3,X3是X1的最近邻点

3. 分类决策规则

k近邻法中的分类决策规则往往是多数表决,即由输入实例的k个临近的训练实例中的多数的label决定输入实例的类

多数表决规则(majority voting rule)有如下解释:如果分类的损失函数为0-1损失函数,分类函数为:,那么误分类的概率是:。对给定的实例,其最近邻的 k 个训练实例点构成集合,如果涵盖的区域的类别是Cj,那么误分类率是:

,要使误分类率最小,即经验风险最小,就要使最大,即模型对训练样本的预测准确度(拟合程度)最大。所以多数表决规则等价于经验风险最小化

KNN中的多数表决思想和朴素贝叶斯中选择最大后验概率的类作为实例的类的思想是一致的,都等价于期望风险最小化

关于朴素贝叶斯法预测过程中选择最大后验概率作为预测类别和期望风险最小化的等价推导,请参阅这篇文章(0x1:期望风险最小化)

0x3:学习策略

KNN的学习策略很简单,就是在训练集中寻找最近邻的K个实例点,并进行voting,选择最多类别的那个,即经验风险最小化。这同样体现了极大似然估计的核心思想

0x4:学习算法

KNN的策略非常直观易理解,算法要解决是具体的工程化问题,即如何在高维空间中选出 k 个近邻点,当维度很高且样本量很大的时候,如果不采取一些高效的算法而直接暴力搜索的话是非常耗时的

解决该问题的思路就是利用特殊构造的存储数据结构以及特殊的搜索方法来完成

1. KD树(kd tree)

kd树是一种对k维空间中的实例点进行存储以便对其进行快速检索的树形数据结构。kd树是二叉树,表示对k维空间的一个划分(partition),构造kd树相当于不断地用垂直于坐标轴的超平面将k维空间切分,构成一系列的k维超矩形区域。kd树的每个结点对应于一个k维超矩形区域

构造平衡kd树

输入:k维空间数据集(样本数量是N),每个样本的维度是k,

(1)构造根节点,根节点对应于k维空间中包含所有实例点的超矩形区域

 (2)选择为坐标轴,以数据集T中所有实例的坐标的中位数做i为切分点,将根节点对应的超矩形区域切分为两个子区域,切分由通过切分点并与坐标轴垂直的超平面实现。由根节点生成深度为1的左,右子节点:左子结点对应坐标小于切分点的子区域,右子节点对应于坐标大于切分点的子区域

(3)重复过程(2),对深度为 j 的结点,选择为切分的坐标轴,(取模循环不断根据每个维度进行二叉切分),以该节点的区域中所有实例的坐标的中位数作为切分点,将该结点对应的超矩形区域切分为两个子区域。切分由通过切分点并与坐标轴垂直的超平面实现。由该结点生成深度为 j + 1 的左、右子节点:左子节点对应坐标小于切分点的子区域;右子节点对应坐标大于切分点的子区域;将刚好落在切分超平面上的实例点保存在该结点

(4)直到两个子区域没有实例存在时停止(即所有实例点都在超平面上),从而形成kd树的区域划分,最后一次切分得到的左、右子矩形空间就是叶节点

用一个例子来说明kd树构造过程 ,给定一个二维空间的数据集:

(1)根节点对应包含数据集 T 的超矩形区域

(2)选择轴,6个数据点的坐标的中位数是7,以平面将空间分为左、右量子子矩形(子结点)

(3)接着,左矩形的第二个维度的中位数是4,所以以再分为两个子矩形;右矩形以分为两个子矩形

(4)继续切分,知道所有的实例点都被分到一个超平面上,所切出的空间是一个不包含任何实例点的纯超矩形空间为止,最后一次切分得到的左、右子矩形空间就是叶节点

搜索kd树

完成了kd树建树后,接下来讨论如何利用kd树进行k近邻搜索

输入:根据train set构造的kd树;目标点x
输出:x的最近邻

1. 在kd树中找出包含目标点x的叶节点,叶子节点寻找的过程是:从根节点出发,递归地向下访问kd树,若目标点x当前维的坐标小于切分点的坐标,则移动到左子结点,否则移动到右子节点,直到子节点为叶子节点(某个不含训练实例的超矩形区域)为止

2. 包含目标点的叶节点对应包含目标点的最小超矩形区域,以此叶节点的实例(落在切分超平面上的点)暂时作为“当前最近点“,注意这里说暂时是因为不一定该叶节点的实例点就真的是最近邻点了,理论上目标点的最近邻一定在以目标点为中心并且圆周通过当前最近点的超球体内部(局部最优原理),接下来的逆向回溯的目的就是尝试寻找在这个超球体区域内是否还存在其他叶节点内的实例点比“当前最近点”更近

3. 以此叶节点为"当前最近点"递归的向上回退,在每个结点(父节点)进行以下操作
    1) 如果该结点保存的实例点比当前最近点距离目标点更近,则已该实例点为"当前最近点"
    2) 如果该结点的另一子结点的超矩形区域与超球体相交(可能存在另一个局部最优),那么在相交的区域内寻找与目标点更近的实例点。如果存在这样的点,将此点作为新的当前最近邻点,算法转到更上一级的父节点
    3) 如果父节点的另一个子结点的超矩形区域与超球体不相交,说明另一个分支不存在另一个局部最优,则继续该分支的逆向回溯

4. 重复此过程,依次回退到根节点,搜索结束,最后查看存储的"当前最近点"即为x的最近邻点

在回退的过程中,不断查找与目标点最邻近的结点,当确定不存在更近的结点时终止。这样搜索就被限制在空间的局部区域上,效率大为提高了(这也是二叉树的核心思想 - 分而治之)

用下图来说明kd树的搜索过程,根节点为A,子节点是B,C,D,E,F,G;目标实例点S,求S的最近邻

1. 首先在kd树中正向搜索,定位到最右下角那个矩形区域,随后开始逆向回溯过程
2. 该矩形区域的实例点是D,所以暂时以D作为近似最近邻。但是理论上最近邻一定在以点S为中心通过点D的圆的内部(局部最优),因此需要继续逆向回溯 
2. 然后返回节点D的父节点B,在节点B的另一子结点F的区域内尝试搜索,但是因为节点F的区域与超圆不相交,不可能有最近邻点
4. 继续返回上一级父节点A,在节点A的另一子节点C的区域内尝试搜索,结点C的区域与圆相交,在超矩形区域在园内的实例点有点E,点E比点D更近,因此成为新的最近似点
5. 最后得到点E是点S的最近邻

2. Ball Tree搜索

kd tree的思想非常精妙,但是也存在一些问题, 形并不是用到这里最好的方式。偏斜的数据集会造成我们想要保持树的平衡与保持区域的正方形特性的冲突。另外,矩形甚至是正方形并不是用在这里最完美的形状,由于它的角。为了解决这些问题,引入了ball tree,即使用超球面而不是超矩形划分区域

ball tree就是一个k维超球面来覆盖训练样本点,上图(a)显示了一个2维平面包含16个观测实例的图,图(b)是其对应的ball tree,其中结点中的数字表示包含的观测点数。树中的每个结点对应一个圆,结点的数字表示该区域保含的观测点数,但不一定就是图中该区域囊括的点数,因为有重叠的情况,并且一个观测点只能属于一个区域。实际的ball tree的结点保存圆心和半径。叶子结点保存它包含的观测点。

构造ball tree

ball tree的建树过程和kd tree大体上一致,区别在于ball tree每次的切分点都是当前超球体的圆心,选择一个距离当前圆心最远的观测点i1,和距离i1最远的观测点 i2,将圆中所有离这两个点最近的观测点都赋给这两个簇的中心,然后计算每一个簇的中心点和包含所有其所属观测点的最小半径,这样,左、右子节点又构成了新的超球体

搜索ball tree

使用ball tree时,先自上而下找到包含target的叶子结点,从此结点中找到离它最近的观测点。这个距离就是最近邻的距离的上界。检查它的兄弟结点中是否包含比这个上界更小的观测点,和kd tree一样,检查的标准就是兄弟的超球体和当前结点的超球体是否有交集,如果没有交集,则这个兄弟结点不可能包含“更近邻点”

kdtree和balltree的区别和联系

kd-tree基于欧氏距离的特性:\Vert x - y \Vert \ge \Vert x_i - y_i \Vert
balltree基于更一般的距离特性:\Vert x - y \Vert + \Vert y - z \Vert \ge \Vert x - z \Vert
因此:
kd-tree只能用于欧氏距离,并且处理高维数据效果不佳。
balltree在kd-tree能够处理的数据范围内要慢于kd-tree。

Relevant Link:

http://blog.csdn.net/pipisorry/article/details/53156836

 

5. 朴素贝叶斯法

朴素贝叶斯(naive Bayes)法是基于贝叶斯定理与特征条件独立假设的分类方法。对于给定的训练数据集,首先基于特征条件独立假设学习输入/输出的联合概率分布;然后基于此模型,对给定的输入x,利用贝叶斯定理求出后验概率最大的输出y

0x1:适用场景 

朴素贝叶斯法可以基于最大后验概率argmax进行多分类,它适用于样本集中不同维度之间相关性较小的情况,即大致符合条件独立性假设的情况

0x2: 模型特点

http://www.cnblogs.com/LittleHann/p/7199242.html

0x3: 学习策略

1. 模型学习过程

经验风险最小化(最大似然估计MLE)和结构风险最小化(最大后验概率估计MAP)

2. 根据模型进行判断预测

期望风险最小化

朴素贝叶斯法预测过程中根据最大后验概率argmax的结果作为预测结果的思想和KNN中选择K近邻的结果作为类预测结果的思想是一致的

0x4:学习算法

朴素贝叶斯法的学习算法有三种(可能不只,我了解到的只有3种),极大似然估计、贝叶斯估计、最大后验估计(可以理解为正则化的极大似然估计),详细的讨论我在另一篇文章已经讨论了

 

6. 决策树

决策树(decision tree)是一种基本的分类与回归方法。决策树模型呈树形结构(二分类思想的算法模型往往都是树形结构)

0x1:适用场景

因为它能够生成清晰的基于特征(feature)选择不同预测结果的树状结构,数据分析师希望更好的理解手上的数据的时候往往可以使用决策树。同时它也是相对容易被攻击的分类器。

这里的攻击是指人为的改变一些特征,使得分类器判断错误。常见于垃圾邮件躲避检测中。因为决策树最终在底层判断是基于单个条件的,攻击者往往只需要改变很少的特征就可以逃过监测。

受限于它的简单性,决策树更大的用处是作为一些更有用的算法的基石。

0x2:模型特点

在分类问题中,表示基于特征对实例进行分类的过程,它可以被看作是if-then的规则集合;也可以被认为是定义在特征空间与类空间上的条件概率分布

关于决策树的模型特点,这里说一些我自己在实践中的理解:

1. 我们的原始数据集有很多不同的字段,因为每条日志都代表了一个事件,单独看一条记录不一定包含有足够的有价值信息,所以很多时候我们需要进行group by聚类处理;
2. group by聚类背后体现的就是以一个特征为索引,得到该特征在不同label的的概率密度分布数值,聚类的结果label就是特征label,count就是其概率分布数值
3. 我们可以逐一循环所有特征进行group by,从而得到所有特征的概率密度分布数值,然后根据一个主键将其多路join merge到一个宽表中
4. 之后的判断就很接近决策树的思维方式了,从不同特征进行超平面切分,对所有特征进行综合判断,得到分类器

0x3:学习策略  

决策树的建树过程遵循了经验风险最小化原则。决策树的剪枝过程体现了结构风险最小化

0x4:学习算法

决策树的学习算法,即工程化实现有ID3、C4.5、CART算法等。具体可以参阅另一篇文章

 

7. 逻辑斯蒂回归与最大熵模型

0x1:适用场景

多类分类问题,因为逻辑斯蒂回归的二项分类模型(二项条件概率)可以推广到多项逻辑斯蒂回归(多项条件概率)

0x2:模型特点

特征条件下类别(label)的条件概率分布,它本质上是一个对数线性模型

值得注意的是,逻辑斯蒂模型并没有学习到特征和类别label的联合概率密度分布,它是一个判别模型

详细讨论可以参阅这篇文章

0x3:学习策略 

极大似然估计;或正则化的极大似然估计(例如L1惩罚)

0x4:学习算法

1. 损失函数

逻辑斯蒂回归的损失函数采用了逻辑斯蒂损失, 即对数损失,对数损失是用于最大似然估计的。一组参数在一堆数据下的似然值,等于每一条数据的概率之积。
而损失函数一般是每条数据的损失之和,为了把积变为和,就取了对数。再加个负号是为了让最大似然值和最小损失对应起来。

可以把logloss分解成真实分布的熵+真实分布与预测分布的相对熵(KL散度),前半部分是固定的,所以最小化logloss相当于在最小化真实分布与预测分布之间的差异

2. 优化算法

改进的迭代尺度算法,梯度下降,拟牛顿法

Relevant Link:

https://www.zhihu.com/question/47744216?from=profile_question_card

 

7. 支持向量机

支持向量机(support vector machine SVM)是一种二类分类模型。它的基本模型是定义在特征空间(feature space)上的间隔最大线性分类器

因为SVM加入了间隔最大这项约束,所以SVM有别于别的感知机,即有唯一最优解(这一约束使其具备了结构化风险最小策略特性);除此之外支持向量机还包括核技巧,这使它成为实质上的非线性分类器。

支持向量机的模型是支持向量和超分类面的距离,学习策略就是间隔最大化,求解最优解的过程的算法根据待分类问题数据集的线性性决定是否需要用到kernel trick进行非线性求解,但总的来说,求解过程即求解凸二次规划(convex quadratic programming)问题,也等价于正则化的合页损失函数的最小化问题

0x1:适用场景 

支持向量机方法论可以用于二类分类,也可以进行无监督异常outerlier检测(one-class svm)

0x2: 模型特点

http://www.cnblogs.com/LittleHann/p/5717892.html

0x3: 学习策略

分离超平面 -> 硬/软间隔最小化策略;

核技巧

0x4:学习算法

序列最小最优化算法(SMO)

 

8. 提升方法

提升(boosting)方法是一种常用的统计学方法,在分类问题中,它通过逐轮不断改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类的性能。

0x1:适用场景 

提升方法论可以用于二类分类,也可以用在回归拟合问题中

0x2: 模型特点

http://www.cnblogs.com/LittleHann/p/7512397.html

0x3: 学习策略

极小化加法模型的指数损失,但是也可以用MSE损失和一般化损失函数,只是优化过程会有所变化

0x4:学习算法

前向分布加法算法(forward stagewise algorithm)

 

9. EM算法

EM算法是一种迭代算法,1977年由Dempster等人总结提出,用于含有隐变量(hidden variable)的概率模型参数的极大似然估计,或极大后验概率估计。EM算法的每轮迭代由两步组成:E步(求期望 expectation);M步(求极大似然),所以这一算法称为期望极大算法(expectation maximization algorithm EM算法)

0x1:适用场景 

在包含隐变量的概率模型中,进行参数估计。

0x2: 模型特点

http://www.cnblogs.com/LittleHann/p/7565525.html
http://www.cnblogs.com/LittleHann/p/8446491.html

0x3: 学习策略

E(极大似然估计)、M(极大后验概率估计)交替进行

0x4:学习算法

迭代算法

 

10. HMM(隐马尔可夫模型)

隐马尔可夫模型是关于时序的概率模型,描述有一个隐藏的马尔柯夫链随机生成不可观测的状态随机序列(隐状态序列),再由各个状态生成一个观测结果而产生观测随机序列(可见状态序列)的过程

0x1:适用场景

解码问题场景(例如语音解码)、标注问题(求隐状态序列)、似然概率求解(概率预测)

0x2: 模型特点

http://www.cnblogs.com/LittleHann/p/7609060.html

观测序列与状态序列的联合概率分布模型

0x3: 学习策略

极大似然估计、极大后验概率估计

0x4:学习算法

概率计算公式、以及EM算法

Copyright (c) 2017 LittleHann All rights reserved

posted @ 2017-11-06 22:21 骑着蜗牛逛世界 阅读(...) 评论(...) 编辑 收藏