Classification
Probabilistic Generative Model
在概率论中,我们学习过贝叶斯公式,他是说当一件事情 发生了,这件事可能有 个原因 ,那么在 发生的条件下,事情是由 引起的概率记为 ,这个概率等于在 发生的概率乘以 的条件下 发生的概率除以 发生的概率。即:
其中, 发生的概率又等于各个原因的造成 发生的概率的和,即 。所以贝叶斯公式的公式是:
回到我们的分类任务,假设我们只需将数据分为两类,即 ,而分类任务就是给了你一组特征值向量 ,你需要给出他是属于第一类 还是第二类 的,那么按照概率的思想,我们就可以去求这个向量是 的概率和是 的概率。哪个概率大我们就认为他是哪类的。也就是去求 和 ,他两的和是为 1 的,所以只需要求一个 ,若大于 就分类为 ,否则就分类为 。根据贝叶斯公式:
所以在这个二分类问题中,我们的目标就是去求解 这四个概率。这四个参数是用训练集的参数求出的。首先来看怎么求 ,这两个其实就是 在实际中发生的概率,但是我们没法知道全体样本中这两类的概率分别是多少,我们只能根据数据集来估测这两个概率。假设我们的数据集有 个样本,其中 个是 ,其余 是 ,那么我们能够得到这个样本集的概率就是:
按照极大似然估计的思想,这件事发生的概率最大时,即 最大时, 的值就最可能是全体样本中 发生的概率。对两边取自然对数再求导:
因为对 取自然对数不会改变 的单调性,所以 取最值点时的 也就是 求最值时的点。所以上式等于 0 时为极值点,求解得:
上面这个是当分类类别只有两个的时候的结果,其实当有多个类别的结果也是一样的,也就是 的极大似然估计是样本集中,属于 的样本的个数 除以样本集的总个数 :
上面对分类结果的分布其实是假设其服从的伯努利分布来计算的。因为类别的结果只可能是给定的几个类,比如记为 而不可能是其他取值,比如说 等等,所以这个假设是合理的。至此,我们解决了前面所要计算的 的值,接下来我们来解决 ,以 为例,这个是说,在类别标签为 的样本中,他的特征参数的形式为 的概率。基于不同的模型我们计算出的概率的方式和结果是不同的。比如说 的取值也是离散分布的,比如在一个水果类别分类任务中,我们的特征属性可能是水果的颜色、形状,颜色的取值假设只有红色、黄色、绿色、蓝色这四种,形状只有圆形、方形、弯月型这几种。那么用伯努利分布去估测 是合理的。估测的方法也和上面一样,就是样本集会缩小,比如在估测 的时候,只取样本集中类别为 的样本,然后再在这个条件下的样本子集中取计算 。但是当样本属性为长度、温度等连续值属性时,再使用伯努利分布就不合理了,因为样本集中不可能将所有的结果都取到,因为连续值有无穷种可能,那么在预测的时候,再用伯努利分布来计算 的话,几乎都是 的,因为基本不可能取到和样本集中一模一样的参数,那就没法来预测了。这个时候,我们可以用高斯分布来估测 。
Gaussian Distribution
我们假定属于某一类的数据集中各个属性的取值是服从高斯分布的,一个高斯分布是由均值 和协方差 决定的,他的公式为,其中 为 的维数:
那么我们所做的就是用某一类的样本数据去找到这个类的分布函数,即找到对应的 和 。继续上面的例子,我们要找的分别是 和 的高斯分布函数 和 ,就是要去算 。以 为例,依旧采用极大似然估计的思想来估计 这两个参数。假设数据集里类别为 的数据为 共 个,假设每个样本之间是相互独立的,则这 个样本被采集到的概率为各自被采集到的概率的乘积:
求解的结果是, 最大时:
由此,我们就能够得到 这个 的高斯分布,因此当给定一个新的 时,我们就能代入到 就能求得 , 同理。至此,我们的贝叶斯公式的所有的值都知道了,我们就可以分别求得一个属性取值为 的样本分别属于每个类的概率是多少,取其中最大的概率的结果所对应的类为我们的分类结果就完成了分类任务。
同 假设
上面的高斯分布模型中,我们为不同类别的数据分别训练了不同的高斯分布,我们还可以假设他们的 是相同的,即分布的形状是相同的,只是均值不同,即中心点不同。这样可以减少参数的个数,在一些情况下分类的表现也可能比分开好。在同 假设下,依旧采用极大似然估计来估计模型的参数。还是假设属于类别 的参数有 个,属于 的有 个。则这个样本被采集到的概率为:
取最大值时, 的推导过程不在这里推导了,其结果是,均值和原来一样,协方差变为:
按照这个假设得到的分类边界是一个线性的边界。
Naive Bayes Model
在概率论中,我们学过,当各个事件之间相互独立的时候,他们同时发送的概率等于各自发生的概率的乘积,即:
而在贝叶斯分类公式中,上面所讨论的是各个属性之间是有关联的条件下的结果,那么当假设其无关联的时候,贝叶斯分类就变成了朴素贝叶斯分类,假设 是一个 维向量,则:(PS:这里的写法可能会和上面的写法冲突引起误解。上面的 的下标表示的是属于第 的第 个样本的取值向量,比如有 个向量就是 维的,而下面的下标表示 这个 维向量的第 维度上的取值)
在朴素贝叶斯下,上面的 为的高斯分布也就变成了 个一维高斯分布的乘积了。
Posterior Probability
下面来解释为什么同 下,分类边界会是线性的。首先让我们对贝叶斯公式进行一下变换:
令 ,则有:
其中 是 sigmoid function 。我们来看 这一项。变换一下可得:
其中,后面那一项是一个常数,接下来看前面这一项,我们将高斯分布代进去:
其中 , ,所以有:
将上式代回去:
其中, 是一个常数,记为 , 也是一个常数,记为 ,则上式就变成了 ,可以看到这是一个线性函数。而我们的分类边界是 ,即:
所以是一个线性的分类边界。既然我们去算均值,去算协方差,最后其实就是去算 和 ,那么为什么不直接去算 和 呢?其实也是有这种方法的,也就是后面要讲的 Logistic Regression。
Logistic Regression
Logistic Regression 是从线性函数 出发来进行分类的分类模型,虽然名字中有 Regression,但实际不是用来做回归任务的,而是做分类任务的。让我们先从线性回归模型来讲起,让我们忘掉我们前面所讲的概率生成模型,忘记贝叶斯,假设我们只学过最开始学的线性回归模型,现在有一个数据集让我们来做一个二分类任务。那么容易想到的一点是,我们可以把两类样本的标签分别记为 0 和 1 来进行线性回归模型的训练。但是我们的线性回归模型的输出值是连续的,也就是说一般不会正好为 0 或 1 ,那么我们就让结果大于0.5时认为是1,小于 0.5 时认为是 0 ,这样我们就能用线性回归模型来做这个分类任务了。
然而,直觉也能让我们感觉到,这么做是会有问题的。因为我们的模型的目标是要输出结果尽可能接近 0 或 1 ,如果对于一个标签为 1 的数据,模型输出结果远大于 1 的话也会被认为是不好的,然而实际我们应该认为这是很好的,因为他离 0 更远了。所以可以想到,我们可以在与 1 比较前对线性函数的输出做一个变换,让他的值域缩小到 [0,1] 范围内,并且当线性函数的结果越大,变换后的结果应该越接近 1 ,否则应该越接近 0 。那么一个可以使用的变换就是 sigmoid function :
所以我们的分类模型即为
Goodness of a function
那么我们怎么来评价我们所找到的参数 的好坏呢?我们知道,对于属于类别 1 的数据 我们是希望他的输出 是尽可能接近 1 的,反之则尽可能接近 0 。所以可以定义所有样本的结果的乘积为整体模型的好坏的数值上的评价,即:
其中,当 时,乘积项是 ,否则是 。我们的目标就是得到使 最大时的 值。对两边取对数,依然不改变结果,
将两边取负号,记 ,将问题转化为求 最小时的 ,即
将 写成求和形式,有
仔细分析 和 的结果,可以发现上面两个式子是一样的, 也被称为损失函数,用于度量模型的损失值。所以我们的目标就是最小化损失,即:
Find the best
寻找 最小时的 依然可以采用梯度下降的方法,其中需要计算梯度,下面推导梯度的计算公式:
其中 , ,则由链式法则(复合函数求导法则):
将两个式子代回去,得到
如果还记得的话,这个求偏导后的结果的形式和线性回归中的是一样的,只是 的计算公式不同。
Why not square error
上面的目标函数都是从最大化下面这个函数出来的,而这个函数又是我们自己定义的
那么一个很自然的想法就是,为什么我们不用线性回归中的最小化差值的平方的均值来找 呢?我们可以来尝试一下,如果用这个的话,我们的损失函数就变成了:
那么求偏导后的结果就是:
那么假设训练集中有一个数据,他的分类标签是 1 ,但是经过 后得到的结果是 0 ,也就是说这个模型分类的结果非常错,按理说应该会狠狠的更新一下 ,但是将这两个参数带进偏导公式可以得到偏导是 0 ,也就是说不会更新。
让我们把两种损失函数的取值与 的取值的图画出来,最上面的那种计算损失的方式也叫交叉熵。可以看到在红色的平面上,有些地方是非常平的,在我们的梯度下降中,就会造成基本不更新参数而被误认为已经到达了极值点。
Multi-class Classification
多分类任务其实可以通过训练多个函数,每个类对应一个函数,如果属于这个类,则标签设为 1 ,否则设为 0 。这样多个函数就会有多个结果,假设有 个,记为 。经过一个 Softmax function 得到属于第 类的概率:
网友评论