写在前面,本文主要以李航老师的《统计学习方法》内容为主,穿插数据挖掘知识,持续更新ing!
机器学习是近20多年兴起的一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。机器学习算法是一类从数据中自动分析获得规律,并利用规律对未知数据进行预测的算法。因为学习算法中涉及了大量的统计学理论,机器学习与统计推断学联系尤为密切,也被称为统计学习理论。
一般意义上分为:监督学习,半监督学习,非监督学习和强化学习
监督学习(supervised learning)的任务是学习一个模型,使模型能够对任意给定的输入,对其相应的输出做出一个好的预测(注意,这里的输入、输出是指某个系统的输入与输出,与学习的输入与输出不同)
假设空间
(待补充ing)
方法 = 模型+策略+算法
模型
统计学习首要考虑的问题是学习什么样的模型。在监督学习过程中,模型就是所要学习的条件概率分布或决策函数。选啥模型,简单理解就是选择什么样的函数,比方说感知机用的就是 f(x) = sign(ω*x + b),knn用的是求取欧式度量,进而建立树来回溯。
策略:
简单来说,就是建立模型的时候,怎么表示我预测的和真实的之间的误差大小。包括损失函数(度量模型一次预测的好坏)和风险函数/期望损失(平均意义下模型预测的好坏)
经验风险最小化(ERM)
适用于大样本量,比如,极大似然估计(maximum likelihood estimation)就是经验风险最小化的一个例子。当模型是条件概率分布,损失函数是对数损失函数时,经验风险最小化就等价于极大似然估计。当样本容量很小时,经验风险最小化学习的效果未必很好,会产生“过拟合over-fitting”
结构风险最小化(structural risk minimization,SRM)
是为了防止过拟合而提出来的策略。结构风险最小化等价于正则化(regularization)。结构风险在经验风险上加上表示模型复杂度的正则化项(regularizer)或罚项(penalty term)。
这样,监督学习问题就变成了经验风险或结构风险函数的最优化问题
3 算法:
存在的作用就是用来求出,什么时候(模型参数为多少时)给的策略给的损失最小。对应上面说的0-1损失函数,那就是求出啥时候0最少,1最多。
训练误差: 训练数据集的平均误差
测试误差: 测试数据集的平均误差。测试误差小的具有更好的预测能力,将方法对于未知数据的预测能力称作是泛化能力。
1、分类问题
在监督学习中,当输出变量Y取有限个离散值时,预测问题便成为分类问题。
许多统计学习方法可以用于分类,包括k近邻法、感知机、朴素贝叶斯法、决策树、决策列表、逻辑斯谛回归模型、支持向量机、提升方法、贝叶斯网络、神经网络、Winnow等。
标注问题:
可以认为标注问题是分类问题的一个推广,标注问题又是更复杂的结构预测(structure prediction)问题的简单形式。标注问题的输入是一个观测序列,输出是一个标记序列或状态序列。标注问题的目标在于学习一个模型,使它能够对观测序列给出标记序列作为预测。
标注常用的统计学习方法有:隐马尔可夫模型、条件随机场。标注问题在信息抽取、自然语言处理等领域被广泛应用,是这些领域的基本问题.
精准率(precision)的定义:“预测为正例的那些数据里预测正确的数据个数”。
理论上二者越高越好,但实际中在某些情况下是矛盾的,因此需要在不同场合具体判断。
P-R曲线:以召回率R为横轴,P为纵轴,P-R曲线越靠近右上角越好。计算曲线面积AP分数可以比较不同模型的精度,但是不方便计算,后面设计了一些指标。
F1:是精确率和召回率的调和平均值。
F值可以泛化为加权调和
3 ROC和AUC
许多模型输出的是预测概率,需要设置一个判定阈值,当预测概率大于阈值时,判定为正预测,否则为负预测。因此需要引入一个超参数,并且超参数会影响的模型的泛化能力。
接收者操作特征(receiverOperating Characteristic,ROC)
ROC曲线与P-R曲线有些类似。ROC曲线越靠近左上角性能越好。左上角坐标为(0.1),即 FPR=0,TPR=1。根据FPR和TPR公式可以得知,此时FN=0,FP=0模型对所有样本分类正确。
绘制ROC曲线:
首先对所有样本按预测概率排序,以每条样本的预测概率为阈值,计算对应的FPR和TPR,然后用线段连接。当数据量少时,绘制的ROC曲线不平滑;当数据量大时,绘制的ROC曲线会趋于平滑。
2、回归问题(regression)
回归用于预测输入变量(自变量)和输出变量(因变量)之间的关系,回归模型正是表示从输入变量到输出变量之间映射的函数。
3、排序指标
过拟合Def:
一味的追求提高模型对训练数据的预测结果,所选模型的复杂度可能会更高,由此出现了对训练数据拟合效果很好,但对于未知的数据效果不一定好的现象,就称为过拟合。
过拟合的解决方法:
可以看这里:L1,L2正则化详解
1、结构风险 = 经验风险+正则化项,下面是结构风险最小化模型
正则化项r(d)可以采用数学里面的范数表示,以下是范数的概念。
2、 一般采用L1和L2范数进行正则,称为L1正则化和L2正则化
question:怎样才可以避免过拟合?
answer:
我们一般认为参数数值小的可以适用于更一般的模型,因为参数数值大的话,稍微一点数值干扰就会对结果造成很大的偏差,因此。参数越小的模型,就越简单。所以尽可能使得模型的参数降低。
question:为什么L1范数和L2范数可以避免过拟合?
answer:
加入正则化项就是在原来目标函数的基础上加入了约束。当目标函数的等高线和L1,L2范数函数第一次相交时,得到最优解。
L1范数:
L1范数符合拉普拉斯分布,是不完全可微的。表现在图像上会有很多角出现。这些角和目标函数的接触机会远大于其他部分。就会造成最优值出现在坐标轴上,因此就会导致某一维的权重为0,产生稀疏权重矩阵,进而防止过拟合。
L2范数:
L2范数符合高斯分布,是完全可微的。和L1相比,图像上的棱角被圆滑了很多。一般最优值不会在坐标轴上出现。在最小化正则项时,可以是参数不断趋向于0.最后活的很小的参数。
如果给定的样本数据充足,进行模型选择的一种简单方法是随机地将数据集切分成三部分,分别为训练集(training set)、验证集(validation set)和测试集(test set)。
但是,在许多实际应用中数据是不充足的。为了选择好的模型,可以采用交叉验证方法。交叉验证的基本想法是重复地使用数据;把给定的数据进行切分,将切分的数据集组合为训练集与测试集,在此基础上反复地进行训练、测试以及模型选择。
1 定义
学习方法的泛化能力(generalizationability)是指由该方法学习到的模型对未知数据的预测能力,是学习方法本质上重要的性质。
现实中采用最多的办法是通过测试误差来评价学习方法的泛化能力.事实上,泛化误差就是所学习到的模型的期望风险。
但这种评价是依赖于测试数据集的。因为测试数据集是有限的,很有可能由此得到的评价结果是不可靠的。统计学习理论试图从理论上对学习方法的泛化能力进行分析。
2 泛化误差上界
学习方法的泛化能力分析往往是通过研究泛化误差的概率上界进行的,简称为泛化误差上界(generalization error bound)。具体来说,就是通过比较两种学习方法的泛化误差上界的大小来比较它们的优劣。
特性:
下面给出一个简单的泛化误差上界的例子:二类分类问题的泛化误差上界。
考虑二类分类问题。已知训练数据集T={(x1,y 1),(x2,y 2),…,(xN,yN)},它是从联合概率分布P(X,Y)独立同分布产生的,X∊Rn,Y∊{-1,+1}。假设空间是函数的有限集合={f1,f2,…,fd},d是函数个数。设f是从 中选取的函数。损失函数是0-1损失。关于f的期望风险和经验风险分别是:
经验风险最小化(ERM)
泛化误差上界定理
对于二分类问题,假设空间是有限个函数的集合,对于任何一个函数,至少以1-delta的概率成立以下不等式:
其中:
生成方法根据数据学习联合概率分布P(X,Y),然后求出条件概率分布P(Y|X)作为预测模型。典型的生成模型有朴素贝叶斯和隐马尔科夫模型。
判别方法是直接学习决策函数F(x)或者条件概率分布P(Y|X) 作为预测的模型,即判别模型。主要关心对于给定的输出,应该预测怎样的输出问题。典型的判别模型有KNN,感知机,决策树,逻辑回归,最大熵模型,SVM,提升方法和条件随机场等等。
1、一句话定义:
给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的k个实例,这k个实例的多数属于某个类,就把该输入实例分为这个类。
2、三要素:距离度量,k值的选取,分类决策规则的选取。
实现k近邻法时,主要考虑的问题是如何对训练数据进行快速k近邻搜索。这点在特征空间的维数大及训练数据容量大时尤其必要。最简单是的就是线性扫描,但对于高维数据不可取,因此采用特殊的存储结构kd树进行搜索。
更多详情请见:kd树构建详解
kd树是二叉树,和分治法思想一样,利用已有数据进行空间切分。构造kd树相当于不断地用垂直于坐标轴的超平面将k维空间切分,构成一系列的k维超矩形区域。kd树的每个结点对应于一个k维超矩形区域。
需要注意的是,每一刀都要切在数据点上面。主要考虑切分域和切分点的选择(分别使用方差最大优先和中位优先)
算法流程:
对于例子:构造一个平衡kd树。
结果如下:
在kd tree 中,我们看到一个导致性能下降的最核心因素是因为kd树的平面是一个个的方形,求最近邻时使用的是圆形。方形平面跟圆形相交的可能性是极高的,如果方形的交汇点多的话,圆形和几个平面相交的可能性就变得更大。这样,凡是相交的平面,都需要进行检查,大大的降低运行效率。
为了解决这一个问题,ball tree抛弃了kd树画的方形,而建立球形,去掉棱角。简而言之,就是使用超球面而不是超矩形划分区域。
用目标数据在kd树中寻找最近邻时,最核心的两个部分是:
寻找近似点-寻找最近邻的叶子节点作为目标数据的近似最近点。
回溯-以目标数据和最近邻的近似点的距离沿树根部进行回溯和迭代。
贝叶斯分类算法是统计学的一种分类方法,其分类原理就是利用贝叶斯公式根据某对象的先验概率计算出其后验概率,然后选择具有最大后验概率的类作为该对象所属的类。
之所以称之为”朴素”,是因为贝叶斯分类只做最原始、最简单的假设:
由于这是一个较强的假设,朴素贝叶斯法也由此得名.
根据贝叶斯公式:
将条件独立性公式带入贝叶斯公式中:
于是,贝叶斯分类器可以表示为:
这就是朴素贝叶斯分类器。
用极大似然估计可能会出现所要估计的概率值为0的情况。这时会影响到后验概率的计算结果,使分类产生偏差。解决这一问题的方法是采用贝叶斯估计。
先验概率和类条件概率的贝叶斯估计为:
其中,等价于在随机变量各个取值的频数上赋予一个正数 namuda>0。当namuda =0时就是极
大似然估计。常取 1,这时称为拉普拉斯平滑(Laplace smoothing)。
优点:
缺点:
决策树解决分类问题的一般方法
定义:分类决策树模型是一种描述对实例进行分类的树形结构。决策树由结点(node)和有向边(directed edge)组成。结点有两种类型:内部结点(internal node)和叶结点(leaf node)。内部结点表示一个特征或属性,叶结点表示一个类。
可以将决策树看成一个if-then规则的集合。将决策树转换成if-then规则的过程是这样的:由决策树的根结点到叶结点的每一条路径构建一条规则;路径上内部结点的特征对应着规则的条件,而叶结点的类对应着规则的结论。
决策树的路径或其对应的if-then规则集合具有一个重要的性质:互斥并且完备。这就是说,每一个实例都被一条路径或一条规则所覆盖,而且只被一条路径或一条规则所覆盖。这里所谓覆盖是指实例的特征与路径上的特征一致或实例满足规则的条件。
决策树学习本质上是从训练数据集中归纳出一组分类规则,与训练数据集不相矛盾的决策树(即能对训练数据进行正确分类的决策树)可能有多个,也可能一个也没有。从另一个角度看,决策树学习是由训练数据集估计条件概率模型。基于特征空间划分的类的条件概率模型有无穷多个。我们选择的条件概率模型应该不仅对训练数据有很好的拟合,而且对未知数据有很好的预测。
决策树的损失函数是正则化的极大似然函数。当损失函数确定以后,学习问题就变为在损失函数意义下选择最优决策树的问题。因为从所有可能的决策树中选取最优决策树是NP完全问题,所以现实中决策树学习算法通常采用启发式方法,近似求解这一最优化问题。这样得到的决策树是次最优(sub-optimal)的。
决策树学习的算法通常是一个递归地选择最优特征,并根据该特征对训练数据进行分割,使得对各个子数据集有一个最好的分类的过程。这一过程对应着对特征空间的划分,也对应着决策树的构建。开始,构建根结点,将所有训练数据都放在根结点。选择一个最优特征,按照这一特征将训练数据集分割成子集,使得各个子集有一个在当前条件下最好的分类。如果这些子集已经能够被基本正确分类,那么构建叶结点,并将这些子集分到所对应的叶结点中去;如果还有子集不能被基本正确分类,那么就对这些子集选择新的最优特征,继续对其进行分割,构建相应的结点。如此递归地进行下去,直至所有训练数据子集被基本正确分类,或者没有合适的特征为止。最后每个子集都被分到叶结点上,即都有了明确的类。这就生成了一棵决策树。
以上方法生成的决策树可能对训练数据有很好的分类能力,但对未知的测试数据却未必有很好的分类能力,即可能发生过拟合现象。我们需要对已生成的树自下而上进行剪枝,将树变得更简单,从而使它具有更好的泛化能力。具体地,就是去掉过于细分的叶结点,使其回退到父结点,甚至更高的结点,然后将父结点或更高的结点改为新的叶结点。
决策树学习算法包含特征选择、决策树的生成与决策树的剪枝过程。决策树学习算法包含特征选择、决策树的生成与决策树的剪枝过程。
决策树学习常用的算法有ID3、C4.5与CART,下面结合这些算法分别叙述决策树学习的特征选择、决策树的生成和剪枝过程。
如果利用一个特征进行分类的结果与随机分类的结果没有很大差别,则称这个特征是没有分类能力的。通常特征选择的准则是信息增益或信息增益比。
条件熵
设有联合分布:
则条件熵为:在已知随机变量x的条件下随机变量Y的不确定性,定义为条件x下Y的条件概率分布的熵对X的数学期望。
当熵和条件熵中的概率由数据估计(特别是极大似然估计)得到时,所对应的熵与条件熵分别称为经验熵(empirical entropy)和经验条件熵(empirical conditional entropy )
信息增益
特征A对训练集数据D的信息增益:G(D,A)定义为集和D下的经验熵H(D)与特征A给定条件下D的经验条件熵H(D|A)的差值。
信息增益表示的是,在给定特征X的信息下,使得类Y的信息不确定性的减少程度。因此,对训练数据集(或集)D,计算其每个特征的信息增益,并比较它们的大小,选择信息增益最大的特征。信息增益越大,说明特征X对Y分类的不确定性影响程度也就越大,即可以有效的分类。
一般地,熵H(Y)与条件熵H(Y|X)之差称为互信息(mutual information)。决策树学习中的信息增益等价于训练数据集中类与特征的互信息。
信息增益值的大小是相对于训练数据集而言的,并没有绝对意义。在分类问题困难时,也就是说在训练数据集的经验熵大的时候,信息增益值会偏大。反之,信息增益值会偏小。使用信息增益比(information gain ratio)可以对这一问题进行校正。这是特征选择的另一准则。
定义:为其信息增益g(D,A)与训练数据集D关于特征A的经验熵H(D)之比
详见6.3.3.1
以信息熵为度量,用于决策树节点的属性选择,每次优先选取信息量最多的属性,亦即能使信息增益最大的属性(熵值变为最小),以构造一颗熵值下降最快的决策树,到叶子节点处的熵值为0。此时,每个叶子节点对应的实例集中的实例属于同一类。
由此出现了改进算法C4.5
整体思路和ID3区别不大,只是在处理连续数据特征和采用信息增益比作为特征选取的参数。
比如m个样本的连续特征A有m个,从小到大排列为a1,a2,…,am,则C4.5取相邻两样本值的中位数,一共取得m-1个划分点,其中第i个划分点Ti表示为:Ti=[a(i)+a(i+1)]/2。对于这m-1个点,分别计算以该点作为二元分类点时的信息增益。选择信息增益最大的点作为该连续特征的二元离散分类点。比如取到的增益最大的点为at,则小于at的值为类别1,大于at的值为类别2,这样我们就做到了连续特征的离散化。
剪枝:将已生成的树进行简化的过程。剪枝从已生成的树上裁掉一些子树或叶结点,并将其根结点或父结点作为新的叶结点,从而简化分类树模型。
CART模型由Breiman等人在1984年提出,是应用广泛的决策树学习方法。CART同样由特征选择、树的生成及剪枝组成,既可以用于分类也可以用于回归。以下将用于分类与回归的树统称为决策树。如果目标变量是类别,就是分类树;如果是是连续值,就是回归树。
基尼指数Gini(D)表示集合D的不确定性,基尼指数Gini(D,A)表示经A=a分割后集合D的不确定性。基尼指数值越大,样本集合的不确定性也就越大,这一点与熵相似。用基尼指数选择最优特征,同时决定该特征的最优二值切分点。
对于给定的集合D,基尼指数为:
下图显示二类分类问题中基尼指数Gini§、熵(单位比特)之半 H§和分类误差率的关系。横坐标表示概率p,纵坐标表示损失。可以看出基尼指数和熵之半的曲线很接近,都可以近似地代表分类误差率。
1.优点
2.缺点
逻辑斯谛回归(logistic regression,LR)是统计学习中的经典分类方法。最大熵是概率模型学习的一个准则,将其推广到分类问题得到最大熵模型(maximum entropy model)。本章首先介绍逻辑斯谛回归模型,然后介绍最大熵模型,最后讲述逻辑斯谛回归与最大熵模型的学习算法,包括改进的迭代尺度算法和拟牛顿法。
二者共处:
逻辑回归是一种广义的线性模型,虽然由回归二字,但确实经典的分类模型。通过对数概率函数将线性函数的结果进行映射,目标空间从(-无穷,+无穷)映射到了(0,1),从而可以处理分类问题。
线性回归在训练时在整个整数域对异常点的敏感性是一致的(见下图),因此一般不适用于处理分类问题。因此采用对数概率函数将线性函数的结果进行(0,1)映射,转换成概率输出。
1、 定义
X服从logistic分布是指有以下的分布函数和密度函数
曲线特性:曲线在中心附近增长速度较快,在两端增长速度较慢。形状参数r的值越小,曲线在中心附近增长得越快。
事件的几率:事件发生的概率与不发生的概率比值p/1-p。则该事件的对数几率(logit 函数):
由上面三个公式得到:
说明在逻辑斯蒂回归中,输出Y=1的对数几率是输入X的线性模型,此即logistic regression 模型。
设:
构造的似然函数为:
对数似然函数:
通过对L(w)取极大值,得到w的估计值。如果对数似然函数乘以-1/N,则转换为了一个极小值模型。
通过最速下降法和拟牛顿法可以得到w的极大似然估计值,那么学习到的逻辑斯蒂回归模型为:
以上是解决二分类的逻辑斯蒂模型,可以推广到多项逻辑斯蒂回归模型。
最大熵模型(maximum entropy model)由最大熵原理推导实现。首先叙述最大熵原理,然后最大熵模型的推导,最后给出最大熵模型学习的形式。
学习概率模型中,所有可能的概率模型里面,熵最大的概率模型是最好的模型。最大熵原理也可以表述为在满足约束条件的模型集合中选取熵最大的模型。
最大熵模型定义:
可以转换成最优化问题。学习过程等价于优化问题的求解
进一步,可以将带约束的优化问题转换为无约束的对偶问题,通过对偶问题求解原问题。
。。。。看着有点难推导了
总之,最大熵模型的学习问题就转换为具体求解对数似然函数极大化或对偶函数极大化的问题。
可以得到更一般形式的最大熵模型
其中:
总之,最大熵模型与逻辑斯谛回归模型有类似的形式,它们又称为对数线性模型(log linearmodel)。模型学习就是在给定的训练数据条件下对模型进行极大似然估计或正则化的极大似然估计。
逻辑斯谛回归模型、最大熵模型学习归结为以似然函数为目标函数的最优化问题,通常通过迭代算法求解。从最优化的观点看,这时的目标函数具有很好的性质。它是光滑的凸函数,因此多种最优化的方法都适用,保证能找到全局最优解。常用的方法有改进的迭代尺度法、梯度下降法、牛顿法或拟牛顿法。牛顿法或拟牛顿法一般收敛速度更快。
1、牛顿法定义
主要用在以下问题中:
a)求方程的根(函数比较复杂,没有求根公式)。
b)应用于最优化方法求解无约束问题的最优解(通常是求函数的极大极小值)
在求解无约束问题的最优解中,我们从二维和高维的情况下来学习牛顿迭代法
2、牛顿迭代法流程:
缺点是:Hessian矩阵引入的复杂性,使得牛顿迭代求解的难度大大增加。于是有了拟牛顿法。
参考自 拟牛顿法详细介绍,更多详情链接内查看。
3、Broyden算法
在每次更新中可以选择更新矩阵,这种选择具有一定的灵活性,由多种具体实现算法,下面介绍Broyden类拟牛顿算法。
4、 最大熵模型的学习方法——拟牛顿法
总结:
考虑如下图所示的二维特征空间中的分类问题。图中“○”表示正例,“×”表示负例。训练数据集线性可分,这时有许多直线能将两类数据正确划分。线性可分支持向量机对应着将两类数据正确划分并且间隔最大的直线。
1、函数间隔
对于给定的训练数据集T和超平面(w,b),定义超平面(w,b)关于样本点(xi,yi)的函数间隔为:
从上面可以看到,当w,倍数增加时,超平面不变,但是距离却倍数改变了,因此需要对w进行归一化,由此导出正例和负例的距离:
2、 几何距离
训练数据集的几何距离就是:
由此推出函数距离和几何距离的关系:
间隔最大化的直观解释是:对训练数据集找到几何间隔最大的超平面意味着以充分大的确信度对训练数据进行分类。也就是说,不仅将正负实例点分开,而且对最难分的实例点(离超平面最近的点)也有足够大的确信度将它们分开。这样的超平面应该对未知的新实例有很好的分类预测能力。
1、 最大间隔风格超平面
最大间隔超平面可以表示为:
根据函数距离和几何距离之间的关系,可以改写为:
进一步,取r尖=1,1/||w|| <===> 1/2*||w||^2。
这个问题可以表示为如下的凸二次规划问题
由此可以建立线性可分支持向量机的学习算法:
支持向量:在线性可分情况下,训练数据集的样本点中与分离超平面距离最近的样本点的实例。也意味着支持向量使得约束条件的等号成立。(因为r就是由支持向量决定的,所以必然相等)
为了求解上面的最优化问题(7.13-7.14公式),将其作为原始最优化问题,通过拉格朗日对偶性,通过求解对偶问题得到原始问题的解。这就是线性可分支持向量机的对偶算法。优点在于:
拉格朗日对偶算法看这里
首先构建拉格朗日函数:
在求得对偶问题的解后,根据KKT条件既可以求得原始问题的解。
则分超平面wx+b=0可以表示为:
分类决策函数f(x)=sgn(wx+b)表示为:
这个函数说明了分类决策函数只依赖于输入x和训练样本输入的内积。式(7.30)称为线性可分支持向量机的对偶形式。
对于线性可分问题,利用线性可分支持向量机(硬间隔最大化)可以完美的解决这个问题,当时现实中,训练数据往往是线性不可分的,即在样本中出现一定的噪声和异常点,因此需要更一般的算法。
线性不可分意味着训练数据出现了特异点,这些点不能满足函数距离>=1的约束条件。因此需要引入一个松弛变量,则约束条件为:
则线性不可分的线性支持向量机学习问题为:
由此定义线性支持向量机的分离超平面和分类决策函数:
学习问题的拉格朗日函数:
根据求解对偶问题,也就是拉格朗日的极大极小问题,即可以得出对偶问题的解,再由KKT条件的出原始问题的解。
线性支持向量机的学习方法还有另外一种解释,就是最小化以下的目标函数:
第一项被称作是经验损失(风险),第二项是L2正则项。
定义合页函数:
下标“+”表示以下取正值的函数,有:
也就是说当被分类正确时,合页损失为0,当时分类错误时,损失不为0.
合页损失函数图像:
图中还画出0-1损失函数,可以认为它是二类分类问题的真正的损失函数,而合页损失函数是0-1损失函数的上界。由于0-1损失函数不是连续可导的,直接优化由其构成的目标函数比较困难,可以认为线性支持向量机是优化由0-1损失函数的上界(合页损失函数)构成的目标函数。这时的上界损失函数又称为代理损失函数(surrogate loss function)。
图7.6中虚线显示的是感知机的损失函数[y i(w·xi+b)]+。这时,当样本点(xi,y i)被正确分类时,损失是0,否则损失是-yi(w·xi+b)。相比之下,合页损失函数不仅要分类正确,而且确信度足够高时损失才是0。也就是说,合页损失函数对学习有更高的要求。
对于线性可分数据,采用线性可分支持向量机;对于线性不可分数据的线性分类问题,从用线性支持向量机;当分类问题非线性时,就加入核技巧,用非线性支持向量机。
1、非线性可分问题
是指通过非线性模型才能有较好的分类效果。先看一个实例:
对于左图中的数据,需要用到一个椭圆方程才可以进行分类,这就是非线性模型,当时非线性问题往往不容易求解,可以将非线性问题变换为线性问题,通过解线性问题来求解原来的非线性问题。所以经过一个映射函数(如下),变换后就得到了新的空间。原来的椭圆变换成新空间中的直线。
在上面这个例子中,求解非线性问题分为两步。首先,通过一个非线性映射,将输入空间(欧氏空间)对应到一个特征空间(希尔波特空间:完备的内积空间,可以导出范数),使得输入空间中的超曲面模型可以对应到希尔伯特空间中的超平面模型。这样非线性问题就通过在特征空间内,通过支持向量机解决。
2、核函数定义
核函数的思路是:在学习与预测中只定义核函数K(x,z),而不显式地定义映射函数Ø。通常,直接计算K(x,z)比较容易,而通过Ø(x)和Ø(z)计算K(x,z)并不容易。一般特征空间是高维空间,甚至是无穷维的。
核函数在支持向量机的应用:
需要注意到,在线性支持向量机的对偶问题中,无论是目标函数还是决策函数都只涉及到输出实例与实例之间的内积。
已知映射函数Ø,可以通过Ø(x)和Ø(z)的内积求得核函数K(x,z),那么K(x,z)满足什么条件才可以成为核函数?分为以下过程:
1)定义映射,构造出向量空间S。
考虑由线性组合为元素的集合S, 由于集合S对加法和数乘运算是封闭的,S构成一个向量空间。
2)在S上定义内积,构成内积空间
3) 将内积空间完备成希尔伯特空间
正定核的充要条件:K(x,z)的Gram矩阵半正定。
常用核函数
SVM的血虚问题可以形式化为一个凸二次规划问题,对于这类新问题,有多种算法可以解决,当时当训练样本过大时,如何高效地SVM学习就变得尤为重要了。
SMO算法是一种启发式算法,其基本思路为:
1)如果所有变量都满足KKT条件,则得到解。
2)否则,选择两个变量,固定其他的变量,针对这两个变量构建出一个二次规划问题,称为子问题,通过解析方法井下看求解,提高速度。
其中,两个变量的选取:一个是违反KKT条件最严重的那个,另外一个是由约束条件自动确定。
SMO算法包括两个部分(1.求解两个变量的二次规划问题;2)选择变量的启发式算法)
未完待续
未完待续
在机器学习的有监督学习算法中,我们的目标是学习出一个稳定的且在各个方面表现都较好的模型,但实际情况往往不这么理想,有时我们只能得到多个有偏好的模型(弱监督模型,在某些方面表现的比较好)。集成学习就是组合这里的多个弱监督模型以期得到一个更好更全面的强监督模型,集成学习潜在的思想是即便某一个弱分类器得到了错误的预测,其他的弱分类器也可以将错误纠正回来。
集成学习在各个规模的数据集上都有很好的策略。
集成学习主要分两种::Boosting和Bagging.都是减少泛化误差的学习框架,不是具体的算法。
(1)模型之间彼此存在依赖关系,按一定的次序搭建多个分类模型,一般后一个模型的加入都需要对现有的集成模型有一定贡献,进而不断提高更新过后的集成模型性能,并借助多个弱分类器搭建出强分类器。代表有Boosting(AdaBoost)算法。该算法与第一种的随机森林主要区别在于每一颗决策树在生成的过程中都会尽可能降低模型在训练集上的拟合或训练误差
(2)模型之间彼此不存在依赖关系,彼此独立。利用相同的训练数据同时搭建多个独立的分类模型,然后通过投票的方式,以少数服从多数的原则做出最终的分类决策。例如:Bagging和随机森林(Random Forest).
集成学习可以分为三类:
强可学习:在概率近似正确(probably approximately correct, PAC)学习的框架中,一个概念(类),如果存在一个多项式的学习算法能够学习它,并且正确率很高,称这个概念是强可学习的。
弱可学习:如果存在一个多项式的学习算法能够学习它,学习的正确率仅比随机猜测略好,则称这个概念是弱可学习的。
对于分类问题而言,给定一个训练样本集,求比较粗糙的分类规则(弱分类器)要比求精确的分类规则(强分类器)容易得多。提升方法就是从弱学习算法出发,反复学习,得到一系列弱分类器(又称为基本分类器),然后组合这些弱分类器,构成一个强分类器。大多数的提升方法都是改变训练数据的概率分布(训练数据的权值分布),针对不同的训练数据分布调用弱学习算法学习一系列弱分类器。
在分类问题中,通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类的效果(三个臭皮匠顶个诸葛亮)。
1、Adaboost的提出
Adaboost如何解决两个问题?
3、Adaboost算法流程
4、 Adaboost的训练误差分析
定理:(Adaboost的训练误差界)最终的分类误差为:
结论:这表明在此条件下AdaBoost的训练误差是以指数速率下降的
5、 Adaboost算法的解释
提升树是以分类树或回归树为基本分类器的提升方法;提升树被认为是统计学习中性能最好的方法之一。
1、提升树模型
提升方法实际上就是采用加法模型(各种基函数的线性组合)和前向分步算法。以决策树模型为基函数的提升方法称为提升树(boosting tree)。对于分类问题,决策树就采用二叉分类树;对于回归问题,决策树就采用回归二叉树。提升树模型可以表示为:
其中,T(x;Θm)表示决策树;Θm为决策树的参数;M为树的个数。
2、 提升树算法
提升树采用的是前线分步算法,流程如下:
针对不同问题的提升树算法,使用的损失函数也有所不同。
对于二分类问题:提升树算法只需将AdaBoost算法8.1中的基本分类器限制为二类分类树即可,可以说这时的提升树算法是AdaBoost算法的特殊情况。
对于回归问题提升树:
提升树通过加法模型和前线分步算法实现学习得优化过程,当损失函数是平方损失和指数损失函数时,每一步的优化都是很简单的,但对于一般损失函数而言,往往每一步的优化并不那么容易,针对这一问题,freidman提出了梯度提升算法。
这是利用最速下降法的近似算法。关键是利用损失函的负梯度在当前模型的值作为回归问题的提升树算法中的残差的近似值,拟合出一个回归树。
GBDT与上述算法有所不同,可见:GB和GBDT
GBDT全称为梯度下降树,既可以做分类也可以做回归,使用CART决策树。通加法模型,不断减少训练过程中的残差来优化模型。
一些问题:
1、 GBDT怎样设置单棵树的停止生长条件?
2、GBDT的优缺点
优点:
缺点:
GBDT和XGBoost的比较:
传统GBDT以CART作为基分类器,xgboost还支持线性分类器,这个时候xgboost相当于带L1和L2正则化项的逻辑斯蒂回归(分类问题)或者线性回归(回归问题)。
节点分裂的方式不同,gbdt是用的gini系数,xgboost是经过优化推导后的.
传统GBDT在优化时只用到一阶导数信息,xgboost则对代价函数进行了二阶泰勒展开,同时用到了一阶和二阶导数。为什么xgboost要用泰勒展开,优势在哪里?xgboost使用了一阶和二阶偏导, 二阶导数有利于梯度下降的更快更准. 使用泰勒展开取得函数做自变量的二阶导数形式, 可以在不选定损失函数具体形式的情况下, 仅仅依靠输入数据的值就可以进行叶子分裂优化计算, 本质上也就把损失函数的选取和模型算法优化/参数选择分开了. 这种去耦合增加了xgboost的适用性, 使得它按需选取损失函数, 可以用于分类, 也可以用于回归。
Xgboost在代价函数里加入了正则项,用于控制模型的复杂度,降低了过拟合的可能性。正则项里包含了树的叶子节点个数、每个叶子节点上输出的score的L2模的平方和。
Xgboost工具支持并行。boosting不是一种串行的结构吗?怎么并行的?注意xgboost的并行不是tree粒度的并行,xgboost也是一次迭代完才能进行下一次迭代的(第t次迭代的代价函数里包含了前面t-1次迭代的预测值)。xgboost的是在特征粒度并行上的。我们知道,决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点),xgboost在训练之前,预先对数据进行了排序,然后保存为block结构,后面的迭代中重复地使用这个结构,大大减小计算量。这个block结构也使得并行成为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行。
Bagging也称为自举汇聚法(Boostrap aggregation)
Bagging基本流程:通过自助采样(有放回),采出T个含m个训练样本的采样集,然后基于每个采样集训练出一个基学习器,在将这些基学习器进行组合
模型的评估方法中有简单交叉验证(将数据集划分为两个互不相交的集合,一个做测试集,一个做训练集)和K折-交叉验证方法(将数据分成k个大小相似互不相交的子集,每次使用k-1个子集做训练集,剩下的一个子集做测试集,以此循环进行k次的训练和测试,最后返回k次测试结果的均值)
但是上述两种方法中都保留了一部分样本用于测试,所以实际模型所使用的训练集比源数据都要小,因此就会引入一些因训练样本规模不同而导致的估计偏差。另外一方面留一法受训练样本影响较小,但是计算复杂度又太高。因此为了解决减少训练样本规模不同造成的影响,同时还能比较高效地进行测试集的评估。自助法就是很好的解决方案。
随机森林就是建立很多决策树,组成一个决策树的“森林”,通过多棵树投票来进行决策。这种方法能够有效地提高对新样本的分类准确度。
随机森林在以决策树为基学习器构建Bagging集成(样本的随机选取)的基础上,进一步在决策树的训练过程中引入随机属性选择。具体来说,传统决策树在选择划分属性时是在当前节点的属性集合(假设有d个属性)中选择一个最优属性;而在RF随机森林中,对基决策树的每个节点,先从该节点的属性集合中随机选择一个包含K个属性的子集,然后在从这个子集中选择一个最优属性用于划分。K=d就是传统决策树,K=1则是随机选取一个属性用于划分,一般情况。
随机森林算法流程
1、对样本数据进行有放回的抽样,得到多个样本集。具体来讲就是每次从原来的N个训练样本中有放回地随机抽取N个样本(包括可能重复样本)。
2、从候选的特征中随机抽取m个特征,作为当前节点下决策的备选特征,从这些特征中选择最好地划分训练样本的特征。用每个样本集作为训练样本构造决策树。单个决策树在产生样本集和确定特征后,使用CART算法计算,不剪枝。
3、得到所需数目的决策树后,随机森林方法对这些树的输出进行投票,以得票最多的类作为随机森林的决策。
说明:
(1) 随机森林的方法即对训练样本进行了采样,又对特征进行了采样,充分保证了所构建的每个树之间的独立性,使得投票结果更准确。
(2)随机森林的随机性体现在每棵树的训练样本是随机的,树中每个节点的分裂属性也是随机选择的。有了这2个随机因素,即使每棵决策树没有进行剪枝,随机森林也不会产生过拟合的现象。
随机森林中有两个可控制参数:
森林中树的数量(一般选取值较大)
抽取的属性值m的大小。
随机森林的优点
随机森林简单、容易实现、计算开销小,被誉为“代表集成学习计数水平的方法”。可以看出随机森林只是对Bagging做了很小的改动。Bagging的多样性只是体现在样本的随机性,随机森林的基学习器的多样性不仅来自于样本的随机性,还来自于属性的随机性。随机森林随着学习器数目的增加,随机森林通常会收敛到更低的泛化误差。
(1)分类结果更加准确
(2)可以处理高维度的属性,并且不用做特征选择
(3)即使有很大部分数据遗失,仍可以维持高准确度**
(4)训练效率优于Bagging
(5)随机性只需要考虑一个属性子集,Bagging需要考察所有属性。
(6)容易实现并行化计算
(7)在训练过程中,能够检测到属性之间的相互影响
随机森林的缺点
(1)随机森林在解决回归问题时,并没有像它在分类中表现的那么好,这是因为它并不能给出一个连续的输出。当进行回归时,随机森林不能够做出超越训练集数据范围的预测,这可能导致在某些特定噪声的数据进行建模时出现过度拟合。(PS:随机森林已经被证明在某些噪音较大的分类或者回归问题上回过拟合)。
(2)对于小数据或者低维数据(特征较少的数据),可能不能产生很好的分类。(处理高维数据,处理特征遗失数据,处理不平衡数据是随机森林的长处)。
(3)由于随机抽样,模型的可解释性较差。
先训练多个模型(在每一个模型的训练中用到k-交叉验证),再用多个模型预测的结果作为组合模型(新模型)的输入,在训练模型,得到最终预测输入。实际上,常常使用LR作为最终的组合模型。
以上图讲解stacking的过程:
对于一个数据集,其Traindata有10000个,Testdata有2500个.在10000个Traindata数据中,使用5-折交叉验证,train_data:test_data=4:1.。得到五个model1,提取5个输出结果(2000*5)合并为10000个数据,记作A1。
同时,对原始2500个Testdata,使用这5个model1进行预测,得到5组输出结果(2500*5),平均得到2500个数据,记作B1。
同样的,使用其他模型,得到多组A2,A3,A4,A5.和B2,B3,B4,B5。
在最终的融合模型中,采用将A…作为Train,B作为Test,得到最终的预测输出结果。
在维度上,对应到初始2500个testdata的预测输出值。
优点:
不足:
参考:代码
EM算法就是在概率模型中寻找参数极大似然估计或者最大后验概率估计的算法,其概率模型依赖于无法观测的隐性变量。主要有两个步骤:
1、计算期望,利用对隐性变量的最大估计值,计算其最大似然估计值。
2、最大化期望,通过在第一步计算的最大似然估计值来计算参数值,找到的参数估计值用来计算下一轮的第一步,构成循环。
EM算法就是为了解决最大似然估计中更复杂的情况下的算法(比如出现了隐变量)。当我们知道了概率结果,就可以通过极大似然估计来估计概率分布的参数。但如果我们只知道了概率结果,但不知道该结果时由哪一个概率分布(隐变量Z)对应的,自然没法直接估计出参数。总结就是:
因此出现了EM算法。
Y:观测变量数据(已知数据)
Z:非观测变量数据(隐变量)
完全数据: P ( Y , Z ∣ θ ) P(Y,Z|\theta) P(Y,Z∣θ)
不完全数据: P ( Y ∣ θ ) P(Y|\theta) P(Y∣θ)
如果隐变量Z已知,就可以通过极大似然估计求解参数。
算法思想如下:
1. 随机初始化参数 θ \theta θ
2.(E步)根据观测数据和当前的参数,计算未观测数据(隐变量Z)的条件概率分布期望。
3.(M步)经过上一步得到Z之后,根据极大似然估计,计算最优的 θ i \theta^i θi
4.反复重复2,3,直到收敛。
算法流程:
迭代停止的条件:
∣ ∣ θ ( i + 1 ) − θ ( i ) ∣ ∣ < ε 1 o r ∣ ∣ Q ( θ ( i + 1 ) − Q ( θ ( i ) ) ) ∣ ∣ < ε 1 ||\theta^{(i+1)}-\theta^{(i)}||<\varepsilon_1\ \ \ \ or \ \\ ||Q(\theta^{(i+1)}-Q(\theta^{(i)}))||<\varepsilon_1 ∣∣θ(i+1)−θ(i)∣∣<ε1 or ∣∣Q(θ(i+1)−Q(θ(i)))∣∣<ε1
EM算法是如何近似实现对观测数据的极大似然估计?
通过极大化不完全数据Y关于参数 θ \theta θ的似然函数:
在隐变量给出之后,就可以通过逐步迭代了来优化极大似然估计参数 θ \theta θ,在每一步迭代中,我们希望: L ( θ ) > L ( θ i ) L(\theta)>L(\theta^{i}) L(θ)>L(θi)
两者差为:
根据Jason不等式有:
则选择:
逐步得到:
由此说明,通过期望最大可以近似求解最优参数。
生成模型:根据数据学习联合分布 P ( X , Y ) P(X,Y) P(X,Y),在结合先验概率。计算出后验概率。
在非监督数据中,可以认为X就是观测数据,Y就是非观测数据(无标签),非监督的训练数据认为是由联合分布产生的数据。EM的特点就是,即使有未观测数据(无标签),依然可以参数估计。
疑问:
收敛定理2:
EM算法的一个重要应用是高斯混合模型的参数估计。高斯混合模型应用广泛,在许多情况下,EM算法是学习高斯混合模型(Gaussian misture model)的有效方法
(高斯分布就正态分布,也叫常态分布)
高斯分布混合模型概括起来就是有多个高斯模型加权后的线性组合模型
(看的头大,不想总结了,晚上找一篇总结好的吧)
这篇就很不错,来自:高斯混合模型详解
EM算法还可以解释为F函数(F function)的极大-极大算法(maximizationmaximization algorithm),基于这个解释有若干变形与推广,如广义期望极大(generalized expectation maximization,GEM)算法。下面予以介绍
头大,有时间再看
头大,有时间再看
(终于会加分割线了,yes!!!)
1、隐马尔可夫模型是关于时序的概率模型,描述由一个隐藏的马尔可夫链随机生成不可观测的状态随机序列,再由各个状态生成一个观测而产生观测随机序列的过程。隐藏的马尔可夫链随机生成的状态的序列,称为状态序列(state sequence);每个状态生成一个观测,而由此产生的观测的随机序列,称为观测序列
(observation sequence)。序列的每一个位置又可以看作是一个时刻。