机器学习

发现之前课上学的机器学习太粗糙了,自己学的也不咋样,想好好整理一下。

1.逻辑回归(Logistic regression)

Logistic Regression最常见的应用场景就是预测概率。比如知道一个人的 年龄、性别、血压、胆固醇水平、体重,想知道这个人患心脏病的概率。首先很容易想到通过线性回归,根据这一组值来计算得到一个分数。

计算得到的分数越高,风险越大,分数越低,风险越小。s的取值是[−∞,+∞][−∞,+∞]的值,但是我们想要的是一个[0,1][0,1]之间的值。因此需要一个转换函数来把这个分数转换成[0,1][0,1]之间的值。这个函数称为Logistic 函数,Logistic函数是一个S形的函数。

先看一个分类问题:

我们可以用线性回归计算得到的值,使用sigmoid函数映射到0-1之间,不能直接使用线性回归得到的值来表示P(Y|X),因为这是一个概率值,并且概率和为1,因此最后得到的逻辑回归表示式如下:

那么逻辑回归是线性还是非线性的分类器呢,这个取决于它的决策边界。那么如何确定决策边界的表达式呢,有个简单的方法,在二分类问题在决策边界上的点属于两个类的概率都是0.5,就用这个来求出决策边界。

很明显,这个是一个线性的表达式,因此线性或非线性主要取决于决策边界而不是其本身的表达式。

接着是逻辑回归的目标函数,使用的是极大似然估计(MLE),这个还有其他的估计方法以及比较后面会说。在这里比较简单直接上图,

还有一个问题,当训练数据线性可分时,会导致参数W会变得无限大。为什么呢?

这也很好理解,如对于二分类情况下,当然是正例的概率为1,负例概率为0,而看表达式,如果w无穷大,正好满足了一个为1一个为0,这样损失也最小,因此只要线性可分的条件下就会导致这一现象。这也是一种过拟合,解决办法就是正则化。

这样可以有效的限制w,还有一个参数是λ,λ其实非常重要,一般通过交叉验证来确定这个值。一般λ大说明更重视后面一项,λ小真实为0说明更关心前面的目标函数。如何选择正则项以及正则项的比较在另外一篇文章中会写。

2.朴素贝叶斯

朴素贝叶斯公式的形式就不写了,比较简单,主要想记录一下推导以及优化的过程,以及有什么值的启发的。介绍:带你彻彻底底搞懂朴素贝叶斯公式

也是直接看图,看起来不太清晰,解释一下,这是一个用朴素贝叶斯求文本分类的例子,在求最关键的P(X|Y)时,假设X中的每一项都相互独立,这才是真正用到朴素贝叶斯的地方,图中最下方有两种求法,a是求解文档中每个词在文档中的概率,j是从1-mj的,但是b算法是用词库中的所有词考虑进去,用nij表示词在文档中出现的次数。为什么要这样呢,计算不是更加复杂吗?当然是有原因的。

个人感觉这一段李文哲老师讲得非常精彩,本来觉得朴素贝叶斯很简单,可其实想的太少,使用log为了计算简便,分为k类,是为了后面的参数,最后变成了求θ和pi的问题,θkj指的是单词j在k类中出现的概率,可以统计得出,也可以采用别的方法,pi是类别k的概率,同理也可计算,为了遵循严格的数学推导。有句话说的很有道理,朴素贝叶斯能很快统计出我们要的参数是因为它简单,如果复杂的工程或者目标函数,我们还是要一步步严格的推导啊。

3.SVM

将实例的特征向量(以二维为例)映射为空间中的一些点,它们属于不同的两类。那么 SVM 的目的就是想要画出一条线,以“最好地”区分这两类点,以至如果以后有了新的点,这条线也能做出很好的分类。

学习SVM,这篇文章就够了!(附详细代码)

SVM推导比较简单,但是其目标函数跟我们的需求,可以用hard或者soft的constraint,其中线性的SVM中,hard就是要求分类的样本不能出现在中间的区域,soft则可以用一个参数调节,并将这一项加入损失函数,将二者结合,得到一个Hinge loss,如图:

我们可以用梯度下降算法优化目标函数,但是由于max的存在,我们可能需要做一些小小的调整,用SGD来学习参数w和b:

拉格朗日在等式限制条件下的求解过程以及原因:

拉格朗日在不等式条件下的求解过程:

这个推导过程比较重要,尤其是拉格朗日在不等式限制条件下的最优解的解法。之后结合拉格朗日在等式限制条件下的优化求解方法,从而引出SVM的KKT条件。下面看一下KKT条件和SVM的KKT条件:

简单解释一下,这个目标函数的第一项ω2是SVM的基本目标函数,原来的是2/|ω|,但是原来的是最大化边距,这个是最小化倒数而已,第二项其实是一个拉格朗日的不等式约束的形式。仔细理解,对这块的理解会更加深刻的。得到这个,我们呢就需要考虑如何把它变成对偶的问题(Dual problem,在我看过的一篇实体对齐的论文就是用了dual和primal的思想去解决)。

为啥要把primal问题转化为dual问题呢?一方面primal问题可能比较难以解决,另一方面在dual问题上可能会有新的思路。在遇到新的问题的时候,要善于有这种思想。

这个从primal到dual的转换已经有点数学知识劝退了,我是想不到,并且为了在高维空间中计算与低维空间复杂度相同,引入了kernel trick,它可以使得在高维空间中计算的复杂度降低。举个例子:

转换高维空间,但是计算复杂度与低维空间相同。最重要的是,在Dual的Loss函数里,核心一个内积计算。那我们目标就是找到这样一个φ函数,使得高维空间的内积计算变得很容易,复杂度很低。这就是kernel trick的由来。


  转载请注明: April 机器学习

 上一篇
依存句法分析简介 依存句法分析简介
依存句法我们人在理解一个句子的时候,一般有两种方式,一种是句法分析,主谓宾啊等等等,另一种就是凭感觉,说起来可能有点搞笑,但却是大部分都是凭感觉。凭感觉在NLP里面就是语言模型,一个词搭配什么词比较连贯,接下来是什么,这就是语言模型建模的依
2020-03-18
下一篇 
机器学习优化算法 机器学习优化算法
越来越觉得做机器学习有关的时候思维才是最重要的,这和你使用什么算法其实没有什么关系,也不是一个调用一个牛逼的算法就能解决问题,方法还是得人想,问题也得人来发现,数据处理和特征工程有时候也很重要。想用一些博客记录一下学习的过程,也想练一下自己
2020-03-13
  目录