博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
机器学习笔记(5):Classification
阅读量:2079 次
发布时间:2019-04-29

本文共 4130 字,大约阅读时间需要 13 分钟。

机器学习笔记(5):Classification

与其它的机器学习问题相同,分类问题的本质也是去寻找一个模型(function),它可以接收一个特征向量,然后输出一个类别。

从表面上看,分类问题与回归问题十分类似,那么可不可以用处理回归问题的思想去处理分类问题呢?

比如一个3分类问题,我把模型的输出标签分别设置为1、2、3。在训练时,如果输入的真实类别为1,那么我就训练使模型的输出往1靠拢,其它的也是如此。然后在测试时,判断模型的输出与哪一个类别值(1,2,3)接近,最接近的就是输入的类别。

看上去似乎很合理,但是这样处理其实会存在两个问题:

  • 对于右下图,当输入数据位于图中的右下角区域时,模型的输出会远远大于1。那么在训练时,为了减少训练误差,就会使模型往右下角偏移,如下图的紫色直线。 显然,紫色分类器的分类效果会比绿色分类器差;

在这里插入图片描述

  • 对于多分类问题,使用1、2、3来表示类别,其实已经在潜在的暗示:相比于类别1和类别3,类别1与类别2更加接近。但事实上,这种暗示往往是没有道理的。

综上所述,我们不能用处理回归问题的思想来处理分类问题。

那么应该如何处理分类问题呢?下面会介绍一些方法。

1.概率生成模型(Probabilistic Generative Model,PGM)

PGM的核心算法就是贝叶斯公式,比如一个二分类问题,类别分别为 ( C 1 , C 2 ) (C_1,C_2) (C1,C2),输入向量为x,则PGM的输出可以写成以下形式:

P ( C 1 ∣ x ) = P ( x ∣ C 1 ) P ( C 1 ) P ( x ∣ C 1 ) P ( C 1 ) + P ( x ∣ C 2 ) P ( C 2 ) (1) P(C_1|x)=\frac{P(x|C_1)P(C_1)}{P(x|C_1)P(C_1)+P(x|C_2)P(C_2)} \tag1 P(C1x)=P(xC1)P(C1)+P(xC2)P(C2)P(xC1)P(C1)(1)
若输出大于0.5时,则输入x被分为 C 1 C_1 C1,反之则被分为 C 2 C_2 C2。也就是说, P ( C 1 ∣ x ) = 0.5 P(C_1|x)=0.5 P(C1x)=0.5就是PGM产生的区分两个类别的boundary。

那么具体 P ( C 1 ∣ x ) P(C_1|x) P(C1x)应该如何计算呢?

关于式(1),我们需要计算两个部分,分别为 P ( C 1 ) , P ( x ∣ C 1 ) P(C_1),P(x|C_1) P(C1),P(xC1)。前者就是所谓的先验概率(Prior),后者就是所谓的似然值(Likelihood)。这两个值都需要通过训练数据来进行大概的估计。

1.1.Prior

在这里插入图片描述

先验概率的计算比较简单。简单来说,就是分别计算训练集中每一个类别出现的频率。这里就不再赘述。

1.2.Likelihood

似然值的计算相对比较复杂。简单的说,计算似然值需要我们先确定数据集的概率分布形式;然后根据训练集,对该概率分布的参数进行估计。这也是为什么我们需要假设训练集和测试集是独立同分布的原因,否者模型的预测能力就会很不准确。

通常,我们会假设数据是满足高斯分布的。当然,也可以假设数据是符合其它分布的,这并没有什么限制。只要我们假设的概率分布与实际情况越符合,那么最后生成的模型的预测能力就会越精确。

这里我们假设数据是满足高斯分布的,多维高斯分布的函数形式如下:

f μ , Σ ( x ) = 1 ( 2 π ) n 2 ∣ Σ ∣ 1 2 exp ⁡ { − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) } (2) f_{\mu,\Sigma}(x)=\frac{1}{(2\pi)^{\frac{n}{2}}|\Sigma|^{\frac{1}{2}}} \exp\{ -\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu) \} \tag2 fμ,Σ(x)=(2π)2nΣ211exp{
21(x
μ)TΣ1(xμ)}(2)
上式中,输入是一个n维的特征向量 x = ( x 1 , . . . , x n ) T x=(x_1,...,x_n)^T x=(x1,...,xn)T μ \mu μ是也是一个n维的向量,而 Σ \Sigma Σ则是一个n维的矩阵。

显然,上式的高斯分布含有的未知参数就是 ( μ , Σ ) (\mu,\Sigma) (μ,Σ)。前者表示概率分布的均值,后者表示概率分布的协方差矩阵。由此,计算似然值的问题就变成了参数 ( μ , Σ ) (\mu,\Sigma) (μ,Σ)的估计问题。

关于似然函数的参数估计,一个常用的方法就是**极大似然估计**。简单来说,就是找到一组可以使得训练数据集中的所有数据出现的概率最大的参数 ( μ , Σ ) (\mu,\Sigma) (μ,Σ)。如下图的两个红色闭合曲线分别代表了两个具有不同 ( μ , Σ ) (\mu,\Sigma) (μ,Σ)的高斯分布,显然相较于右侧的高斯分布,左侧的高斯分布可以使得训练集的出现概率更高。

在这里插入图片描述

极大似然估计的函数形式如下所示:

L ( μ , Σ ) = f μ , Σ ( x 1 ) f μ , Σ ( x 2 ) . . . f μ , Σ ( x N ) (3) L(\mu,\Sigma)=f_{\mu,\Sigma}(x_1)f_{\mu,\Sigma}(x_2)...f_{\mu,\Sigma}(x_N) \tag3 L(μ,Σ)=fμ,Σ(x1)fμ,Σ(x2)...fμ,Σ(xN)(3)
上式中,N表示训练集属于某一类的数据个数。有了式(3),接下来的步骤就很明显了。我们只需要计算式(3)的极值点,找到一组使得式(3)数值最大的参数即可。

在这里插入图片描述

使得式(3)结果最大的一组参数 ( μ , Σ ) (\mu,\Sigma) (μ,Σ)如上图所示。需要注意的是,这只是对于概率分布假设为高斯分布的结果。如果假设的概率分布不是高斯分布,则需要另外计算。

对于二分类问题,我们可以使用上述方法分别计算这两类的先验概率和似然值,然后使用式(1)就可以得到输入数据的分类结果。

在这里插入图片描述

1.3.Modifying Model

通常在使用PGM时,为了减少模型参数量,我们会假设不同类之间的协方差矩阵相同,如下图所示。如此对于二分类问题,我们只需要估计三个参数 ( μ 1 , μ 2 , Σ ) (\mu_1,\mu_2,\Sigma) (μ1,μ2,Σ)即可。

在这里插入图片描述

L ( μ 1 , μ 2 , Σ ) = f μ 1 , Σ ( x 1 ) . . . f μ 1 , Σ ( x N 1 ) × f μ 2 , Σ ( x N 1 + 1 ) . . . f μ 2 , Σ ( x N 1 + N 2 ) (3) L(\mu^1,\mu^2,\Sigma)=f_{\mu^1,\Sigma}(x_1)...f_{\mu^1,\Sigma}(x_{N^1}) \times f_{\mu^2,\Sigma}(x_{N^1+1})...f_{\mu^2,\Sigma}(x_{N^1+N^2}) \tag3 L(μ1,μ2,Σ)=fμ1,Σ(x1)...fμ1,Σ(xN1)×fμ2,Σ(xN1+1)...fμ2,Σ(xN1+N2)(3)

为了使得上式结果最大,估计得到的 ( μ 1 , μ 2 ) (\mu^1,\mu^2) (μ1,μ2)与模型修改前相同,协方差矩阵计算如下:
Σ = N 1 N 1 + N 2 Σ 1 + N 2 N 1 + N 2 Σ 2 (4) \Sigma=\frac{N^1}{N^1+N^2}\Sigma_1+\frac{N^2}{N^1+N^2}\Sigma_2 \tag4 Σ=N1+N2N1Σ1+N1+N2N2Σ2(4)
在这里插入图片描述

上图是李宏毅老师使用上述两种模型对宝可梦的属性估计结果图。左图使用的是未修改的概率模型,右图使用的是修改后的概率模型。值得注意的是,修改后的概率模型生成的分类边界是线性的,说明它是一个线性分类器。

为什么修改后的概率模型是一个线性分类器呢?下面来简要分析一下它的表达式。

对于贝叶斯公式进行一个简单的等效变换,我们可以得到如下图的形式。

在这里插入图片描述

对z进行推导,由于我们假设两个类别的协方差矩阵相同,最后可以得到下式:

在这里插入图片描述

根据训练集,我们可以计算 ( μ 1 , μ 2 , Σ ) (\mu^1,\mu^2,\Sigma) (μ1,μ2,Σ),就是说这些参数都可以视为常数。如此,修改后的模型就可以表示为以下形式:

P ( C 1 ∣ x ) = σ ( z ) ,    z = W T x + b (5) P(C_1|x)=\sigma(z), \; z=W^Tx+b \tag5 P(C1x)=σ(z),z=WTx+b(5)
上式就是一个标准的线性分类器的形式。

除了上述两种形式PGM之外,还有一个更加简单的概率模型,称为Naive Bayes Classifier。这种形式的概率模型假设特征向量的所有元素都是独立且同分布的。以高斯分布为例,该模型会假设特征向量的所有元素都是满足一维高斯分布的。

P ( x ∣ C 1 ) = P ( x 1 ∣ C 1 ) P ( x 2 ∣ C 1 ) . . . P ( x N ∣ C 1 ) (6) P(x|C_1)=P(x_1|C_1)P(x_2|C_1)...P(x_N|C_1) \tag6 P(xC1)=P(x1C1)P(x2C1)...P(xNC1)(6)
上式中, x = ( x 1 , x 2 , . . . , x N ) x=(x_1,x_2,...,x_N) x=(x1,x2,...,xN),其各个元素均满足一维高斯分布。

2.判别模型(Discriminative Model,DM)

待续。。。

转载地址:http://jsuqf.baihongyu.com/

你可能感兴趣的文章
Intellij IDEA使用(三)——在Intellij IDEA中配置Tomcat服务器
查看>>
Intellij IDEA使用(四)—— 使用Intellij IDEA创建静态的web(HTML)项目
查看>>
Intellij IDEA使用(五)—— Intellij IDEA在使用中的一些其他常用功能或常用配置收集
查看>>
Intellij IDEA使用(六)—— 使用Intellij IDEA创建Java项目并配置jar包
查看>>
Eclipse使用(十)—— 使用Eclipse创建简单的Maven Java项目
查看>>
Eclipse使用(十一)—— 使用Eclipse创建简单的Maven JavaWeb项目
查看>>
Intellij IDEA使用(十三)—— 在Intellij IDEA中配置Maven
查看>>
面试题 —— 关于main方法的十个面试题
查看>>
集成测试(一)—— 使用PHP页面请求Spring项目的Java接口数据
查看>>
使用Maven构建的简单的单模块SSM项目
查看>>
Intellij IDEA使用(十四)—— 在IDEA中创建包(package)的问题
查看>>
FastDFS集群架构配置搭建(转载)
查看>>
HTM+CSS实现立方体图片旋转展示效果
查看>>
FFmpeg 命令操作音视频
查看>>
问题:Opencv(3.1.0/3.4)找不到 /opencv2/gpu/gpu.hpp 问题
查看>>
目的:使用CUDA环境变量CUDA_VISIBLE_DEVICES来限定CUDA程序所能使用的GPU设备
查看>>
问题:Mysql中字段类型为text的值, java使用selectByExample查询为null
查看>>
程序员--学习之路--技巧
查看>>
解决问题之 MySQL慢查询日志设置
查看>>
contOS6 部署 lnmp、FTP、composer、ThinkPHP5、docker详细步骤
查看>>