今天看了研究者July的文章,讲的是最恨对一个问题了解而不深入 ~ ~。切记,戒之。
在这篇文章中,我准备对数据挖掘的常用分类算法进行一一介绍,它们的实现,原理和适用问题及对比。首先补充一下监督学习,非监督学习和半监督学习的。
常用的分类算法包括:决策树分类算法、朴素贝叶斯分类算法、基于支持向量机的SVM算法、神经网络算法、k近邻算法、模糊分类算法等。随后我会对这些算法进行详细的介绍,在以后时间空闲的比较多的时候,作者会继续对这些进行更加深入的研究的。分类问题可以分为单分类和多分类模型,Ligistic Regression和lbsvm都可以输出样本属于某个分类的概率,方便使用多分类的,每次针对a 和 ^a进行分类,计算样本属于某个分类的概率,并且选取概率最大的为样本的分类。
在本文最后作者给出了分类算法的对比,和特性:
决策树
定义:决策树是自上而下来生成的,每个决策或者事件都可能引出两个或者多个事件,导致不同的结果。特别的在分类之中可以对不同特征值进行划分,选取划分的点和划分顺序可以建立一个树的。
按照决策树的定义。我们可以发现选取决策点和决策顺序的重要性。因此我们需要一个量化的方法,选取决策的划分点和划分顺序的。
ID3算法:ID3算法是一个由Ross Quinlan发明的用于决策树的算法。这个算法便是建立在上述所介绍的奥卡姆剃刀的基础上:越是小型的决策树越优于大的决策树(be simple简单理论)。
重要衡量标准:熵和信息增益。
熵(entropy),它刻画了任意样例集的纯度(purity)。给定包含关于某个目标概念的正反样例的样例集S,那么S相对这个布尔型分类的熵为。举个例子对于含有14个样例的集合,它包含9个正例和5个反例,那么S的焍可以计算为,如计算公式所示:
Entropy([9+,5-])=-(9/14)log2(9/14)-(5/14)log2(5/14)=0.940。
信息增益,可以定义为属性分类训练的效力的度量标准。我们选取一个划分后即可计算信息增益:
我们按照这个信息增益即可度量选择的划分节点是否好,及可选的划分顺序的。这就是ID3算法。
C4.5 算法:
可是ID3算法依然面临着一些问题,比如它更倾向于选择那些值较多的纬度进行划分,然后再取得划分后的节点。比如两种划分方法,一种将元素划分为均分的两份,另外一种将元素划分为1个和剩余的很多。显然情况都差不多的情况下,第二种更好的。(其实我的理解是,它还会对不均衡的划分进行惩罚的)
CART算法:
基尼指数,也是一种衡量不纯度的方法。计算划分的时候也是类似信息增益,计算两个划分带来的增益。
其实我们可以总结发现这些算法的特性:
信息增益倾向于选择多值属性,增益率倾向于选择不平衡的划分,基尼指数倾向于多值属性。
朴树贝叶斯分类器
定义:
贝叶斯分类的基础是概率推理,就是在各种条件的存在不确定,仅知其出现概率的情况下,如何完成推理和决策任务。使用统计概率和先验概率,预测事情发生的概率。而朴素贝叶斯分类器是基于独立假设的,即假设样本每个特征与其他特征都不相关。
理论模型:
先验概率:事情还没有发生,要求统计这件事情发生的可能性的大小。如全概率公式。
后验概率:事情已经发生,要求统计这件事情发生的原因是由某个因素引起的可能性的大小,是后验概率。贝叶斯公式执果寻因,以先验概率为基础计算后验概率。
P(h)即为先验概率。P(D|h)即为后验概率。全概率公式是计算先验概率的公式。
理论上朴素贝叶斯分类器是一个概率模型:
独立变量类别有若干类别,并且条件依赖于变量,,...,。但是问题在于如果特征数量n较大时每个特征值可以取得大量的值得时候,基于概率模型列出的概率表变得不现实。理想的概率计算公式为:
即为先验概率乘以可能概率,再除以已有的特征值的证明概率。其实上面的式子如果使用链式法则,我们可以继续推导:
。。。。。。
现在如果每个特征值相对于其他的特征值都是独立的,那么我们可以简化上面的式子的:
这意味着在上述假设下,变量C的分布可以表达为:
其中Z是一个只依赖于等的缩放因子。如果这是一个分类问题,且每个可以表达为个参数,于是相应的朴素贝叶斯模型有(k − 1) + n r k个参数。
特点:
1. 需要知道先验概率。
2. 按照获得的信息对先验概率进行修正。
3 决策存在错误率。
优缺点:
1. 可以进行样本修正,对于之前没有出现的类。这样它的概率肯定算出来时0,我们需要对这些进行修正的。
应用:垃圾邮件分类
后面针对垃圾邮件分类问题,其实大同小异。只是计算上有些更加明确的表示,远离一切相同的。其实可以引入TF-IDF来改进文本分类的。
应用:拼写纠正
k近邻:
定义:
KNN的思想简单,对一个位置分类的样本。查看它距离最近的K个样本的分类标注,来决定这个分类样本的分类。
优缺点:
优点:实现简单,支持增量计算。支持多边形复杂空间决策。
缺点:计算复杂。对于如果有一个分类很大的情况,KNN无法正确分类,而且对于空间分布不均匀的情况也无法正确分类。
支持向量机SVM:
定义:
SVM是Corinna Cortes和Vapnik8在1998提出的基于分类边界的数据集,使用支持平面上的两个类别,来分开超平面的向量点,建立分类超平面对数据进行有效分类的方法。它可以有效解决小样本、非线性及高维模式识别。
Maximum Marginal是使得边界点到决策平面的间隔最大。
支持向量:决策的边界平面
在线性分类器中,直线f(x)=w.x + b,这里w、x是向量。当x的纬度是3维时,f(x)表示3维空间的平面。当新来一个点来进行分类时,我们根据f(x)的正负结果来决定分类的结果。f(x)<0时,sgn(f(x))=-1,反之sgn(f(x))=1。
下图中,红色与蓝色分别为plus plane和minus plane,就是support vector machine所在的平面。红色与蓝色之间的线的距离就是我们要最大化分类的间隔。
这里我们可以直接给出M的式子:
另外支持向量位于wx+b=1与wx+b=-1的直线上,我们在前面乘上一个该点所属的类别y(还记得y就是1和-1么),就可以得到支持向量的表达式:y(wx+b)=1,这样就可以吧支持向量表示出来了。
为了方便求导和优化,我们将1/||w||转化为1/2||w||^2,
另外这个式子还有一些限制条件,完整的写下来,就如下:
这是一个带约束的二次优化问题。而且凸问题不会有局部最优解,有解的话一定是全局最优解(具体证明可以看wikipedia)。
对于这个问题的求解和优化,我们转化为对偶问题,并且使用拉格朗日乘子进行求解:
首先关于L让w, b最小化,分别零L关于w, b的偏导数为0得到原问题的一个表达式:
将两式待会L(w, b, a)得到对偶问题的表达式:
新问题加上其限制条件:
至此我们得到了最终优化的式子。并将线性可分问题转化为优化式子。这是一个凸优化的问题,以后我有时间了,会另外关于证明过程进行深入的研究。
求解这个式子,需要拉格朗日对偶性的相关知识。并且有一定的公式推导。(推导,请看:http://blog.pluskid.org/?p=682)
我觉得我就快可以手写svm推导了。啊啊,无语了。
问题延伸:
接下来我们也许发现我们前面的例子太理想化了,直接就可以找到一个最优平面,将待分类数据进行分类。可是很多情况下数据是有交叉的,另外一些情况是数据并不能直接找到分类平面,我们需要将数据转化到更高维的空间,再寻找划分平面。
软间隔(Soft Margin):
所以我们引入了软间隔(Soft Margin),以允许分类平面对一些数据错误的分类,但是我们会对这些错误的分类进行惩罚,并且根据新的优化式子进行继续优化。
引入软间隔之后的限制条件改进为:
公式中蓝色的部分为在线性可分问题的基础上加上惩罚函数的部分。显然当划分平面+和-之间的点是没有惩罚的,并且在距离划分平面距离ε以内的点计算惩罚函数。
接下来我们得到了原问题的对偶问题的表达式:
蓝色的部分是与线性可分的对偶问题的表达式的不同之处。在线性不可分的情况下得到的对偶问题,不同的地方就是α的区间进行了重新的划分的。从之前的[0, +∞),变为了[0, C],增加了惩罚因子ε。
核函数:
低纬度线性不可分的问题,可以转换到更高维度来寻找划分平面的问题。核函数的基本作用就是接收两个低纬空间的向量,能够计算出计算出经过某个变换之后在高维空间里的向量内积值。
目前已有的核函数有多项式核函数、径向基核函数、感知积核函数。
我们前面得到的对偶问题的表达式:
我们使用变换的方法将红色的部分进行改造,令:
常见的SVM核函数有线性核函数、多项式核函数、径向基核函数和高斯核函数。他们的公式分别如下:
其中(1). 径向基核函数可以将一个样本映射到更高纬度的空间 (2). 而且RBF需要确定的参数少,核函数的多少直接影响模型的复杂度 (3). 对于某些参数,RBF和sigmoid具有相似的性能。
多分类问题:
对于多分类问题,我们可以采取训练1vs n-1,也可以训练N(N-1)/2个分类器。分类器(i, j)判断某个点是属于i还是属于j。
知识储备线性分类:
线性分类器(也称为感知机,这里机表示还是一种算法)
分类标准:
这里我们考虑的是一个两类的分类问题。一个线性分类器就是在n维空间中找到一个超平面,它的方程可以表示为:
w Tx + b=0
分类类别使用1或者-1表示,分别代表两个不同的类。现在为何取得y为1或者-1呢?这个就和前面讲的逻辑回归
联系起来了,逻辑回归将取值范围映射到[0,1]之间。的值只与有关,>0,那么>0.5,g(z)只不过是用
来映射,真实的类别的决定权还是在的。此处的取值[-1,1]与[0,1]没有什么区别的。我们现在使用,
进一步,也就是说除了y=0变为y=-1没有什么区别的。
接着,我们可以令分类函数(提醒:下文很大篇幅都在讨论着这个分类函数):
f(x)= w Tx + b
下图就是一个线性分类器的示意图:显然对于所有f(x)<0的点y<0,对应于所有f(x)>0的点y=1。
那么后面求解问题即转化为了变量w和变量b的凸二次优化问题具体的:
1. 咱们就确定上述分类函数中w为法向量,b为截距。
2. 如何确定w和b呢?寻找边界端或者极端划分中线的最大间隔(之所以要寻最大间隔是为了能更好的划分
不同类的点)。下文你将看到为寻找最大间隔到处1/2||w||^w,继而引入拉格朗日函数和对偶变量a,化为
对单一因素对偶变量a的求解,从而最终确定最大分类间隔超平面和分类函数。
3. 从最大间隔出发,转化为求变量w和b的凸二次优化问题。
函数间隔:
我们定义函数间隔为:r=y(w^T+b)=yf(x)
接着,我们定义超平面(w,b)关于训练集T的函数间隔为超平面( w, b)关于T中所有样本点(xi,yi)的函数间隔最小值。
其中x是特征,y是结果标签。于是:
r=min ri (i=1,....,n)
然而与此同时问题就出来了,因为在选择分类超平面时,只有函数间隔远远不够,因为如果成比例的改变w和b,那么
如果将他们改编为2w和2b,虽然此时超平面没有改变,但函数间隔的值却变成了原来的4倍?其实我们可以对法向量
增加一些约束条件是的其在表面上看起来规范化,如此我们很快又近出真正的点到超平面的距离---几何间隔。
点到超平面的距离定义:
特别的对于二维空间中点到直线的距离:假设一条直线的方程为ax+by+c=0,点p的坐标是(x0,y0),则点到直线的距离为
|ax0+by0+c|/sqrt(a^2+b^2)。如下图所示
那么如果用向量表示,设w=(a,b),f(x)=wx+c,那么这个距离正是|f(p)|/||w||。
知识储备最小二乘和线性回归:
定义:
最小二乘法是一种数学优化技术,它通过最小化误差的平方和来寻找数据的最佳函数匹配。可用于线性拟合和求解未知数据。例如我们在研究两个变量(x,y)之间的相互关系时,通常可以得到成对的数据(x1,y1,x2,y2,...,xm,ym),将这些数据放到直角坐标系中我们可以使用一条直线对这些数据进行拟合。
假设:
yj=a0+a1*xi;
那么我们希望学习到a0和a1的取值,使得误差最小。对于最小二乘法优化方向为使得∑(Yj - a0-a1*xj)^2取值最小。那么我们将优化目标对a0和a1分别求偏导并取极值,可以得到两个等式:
将xi和yi的值,带入后在进行求解求解这个等式即可以求得a0和a1的值。
知识储备逻辑回归:
逻辑回归,Logistic回归模型,是人们为两分类的应变量做的一个回归方程,概率取值在0~1之间的。首先到线性分类模型,不适用于分类模型。因为Linear Regression对分类模型有很多的不适用的特性。因此引入了可以应用到分类的Logistic Regression模型的方法。
随着模型的发展,Logistic家族也逐渐人丁兴旺起来,除了最初的Logistic回归,还有配对Logistic模型,多酚类Logistic模型,随机效应的Logistic模型。
Lotistic模型的推导和使用见下图:
考虑具有p个独立变量的向量x=(x1,x2,.....,xp)。设条件概率P(Y=1|x)=p 为观测量对某个事件发生的概率。逻辑回归的模型可以表示为:
上式右侧形式的函数成为逻辑函数。下图给出了其函数图像。
其中。如果含有名义变量,将其变为dummy变量。一个具有k个取值的名义变量将其变为k-1个dummy变量。这样就可以得到
我们定义不发生的条件概率为:
那么发生和不发生的概率之比为:
这个比值被称为时间的发生比,简称odds。因为0 0。对odds取对数,即可得到线性函数。
Logistic回归就是学习到,使得整理的特征远大于0,负例的特征远小于0,强调在全部训练实例上达到这个目标。
知识储备核函数:
对于很多问题是现行不可分的,我们可以采用变换的方法。将数据映射到更高的维度,来进行计算的。常用的核函数有径向基和函数、线性核函数、多项式核函数。
知识储备Soft Margin:
神经网络:
定义:
知识储备梯度下降:
回归在数学上来说是给定一个点集,能用一条曲线去拟合之。如果这条曲线是直线那么就称为线性回归。如果这个曲线是一条直线,那么就称为回归。如果曲线是一条二次曲线,那么就称为二次回归。回归还有很多变种,如logistic 回归和locally weighted回归。这个我们在后面会进行讲解的。
梯度下降对参数求偏导,求得骗到的梯度下降方向,然后我们得到二阶的损失函数:
我们队损失函数对进行求偏导,就可以得到公式:
然后我们可以得到梯度下降的更新方式:
其中θi会随着梯度最小的方向进行减小。θi表示更新之前的值,后面的部分表示按照梯度见效的方向,α表示步长。也就是按照梯度减小的方向变化多少。梯度是有方向的对于一个向量θ,每个纬度分量θi都可以求出一个梯度的方向。我们就可以找到一个整体的方向。
注意梯度下降可能会陷入局部最优,而不是全局最优。
半监督学习
已有标记的数据不会改变。再次分类的时候,使用无标记数据帮助有监督分类,再次分类的时候使用这些数据作为已有标记的分类样本,再次进行分类。
分类算法的特性对比
1 贝叶斯分类器
优点:接受大量数据训练和查询时所具备的高速度,支持增量式训练;对分类器实际学习的解释相对简单
缺点:无法处理基于特征组合所产生的变化结果
2 决策树分类器
优点:很容易解释一个受训模型,而且算法将最为重要的判断因素都很好的安排在了靠近树的根部位置;能够同时处理分类数据和数值数据;很容易处理变量之间的相互影响;适合小规模数据
缺点:不擅长对数值结果进行预测;不支持增量式训练
3 神经网络
优点:能够处理复杂的非线性函数,并且能发现不同输入间的依赖关系;支持增量式训练
缺点:黑盒方法,无法确定推导过程;选择训练数据的比率与问题相适应的网络规模方面,没有明确的规则可以遵循,选择过高的训练数据比率有可能导致网络对噪声数据产生过渡归纳的现象,而选择过低的训练比率,则意味着除了已知数据,网络有可能不会再进一步学习了。
4 支持向量机
优点:通过将分类输入转化成数值输入,可以令支持向量同时支持分类数据和数值数据;适合大规模数据
缺点:针对每个数据集的最佳核变函数及其相应的参数都是不一样的,而且每当遇到新的数据集都必须重新确定这些函数及其参数;黑盒技术,由于存在高维空间的变换,SVM的分类过程更加难以解释。
5 K-最近邻
优点:能够利用复杂函数进行数值预测,同时又保持简单易懂的特点;合理的数据缩放量;在线(online)技术,新数据可以随时被添加进来,而不必重新进行训练。
缺点:要求所有训练数据都必须缺一不可;寻找合理的缩放因子比较乏味
参考文献:
研究者July某牛人写的分类算法讲解:http://blog.csdn.net/v_july_v/article/details/7577684
SVM向量基础:http://www.cnblogs.com/LeftNotEasy/archive/2011/05/02/basic-of-svm.html
回归与梯度下降:http://blog.sina.com.cn/s/blog_62339a2401015jyq.html
逻辑回归、极大似然函数、显著性检验和变量选择:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/18/2595410.html