目录
概率生成模型
分类问题实例
模型改进
生成模型步骤总结
后验概率的数学推导
逻辑回归
逻辑回归步骤
逻辑回归和线性回归的比较
为什么不使用MSE
判别模型 VS 生成模型
多分类
逻辑回归的限制
补充:生成式模型和判别式模型
概率生成模型,简称生成模型(Generative Model),是概率统计和机器学习中的一类重要模型,指一系列用于随机生成可观测数据的模型 。生成模型的应用十分广泛,可以用来不同的数据进行建模,比如图像、文本、声音等。比如图像生成,将图像表示为一个随机向量X,其中每一维都表示一个像素值。假设自然场景的图像都服从一个未知的分布pr(x),希望通过一些观测样本来估计其分布。也就是说,生成模型考虑的是:生成样本数据的模型是什么样的(也就是样本数据具体满足什么分布/样本会以多大的概率被生成)。生成模型可以和贝叶斯概率公式进行结合,用于分类问题。
假设训练数据中有两个类别,每个类别下有5个样本,想要知道新的测试样本x属于C1类别的可能性,根据贝叶斯概率公式可以得到下图所示的概率公式。
其中,P(C1)和P(C2)表示在训练数据中,随机采样得到C1或者C2的概率,即两个类别在训练数据中所占的比重,可以由训练数据中的统计结果计算得到。分母项P(x)表示生成数据x的概率,此处可以由生成模型计算得到:P(x) = P(x|C1)P(C1) + P(x|C2)P(C2),因为有两个类别,每个类别下的数据具有不同的规律,服从不同的分布,都有可能生成数据x,所以相加得到生成x的概率(这里计算生成样本数据x的概率就是生成模型在做的事情)。
难点在于如何计算P(x|C1)和P(x|C2)。这里使用的方法是:极大似然估计。
极大似然估计就是先假设生成数据(数据分布)的模型已知(比如高斯分布),但是模型的具体参数不知(不知道高斯分布中的均值和标准差),通过已有的数据,反推最有可能(最大概率)导致这样结果的参数值。经过极大似然估计之后,可以得到每个类别下的数据满足的规律(即每个类别下的数据满足什么样的分布),那么我们就可以知道在每个类别的分布下,分别生成新的测试数据x的概率,也就是P(x|C1)和P(x|C2)。因此,我们就可以计算得到新的测试数据x属于每个类别的概率P(C1|x)和P(C2|x)。
下面通过一个具体的问题情境,展示生成模型用于分类问题的过程。
给定一个神奇宝贝,判断其是 水系 的还是 一般系 的,每个神奇宝贝用一个向量来表示,向量的维度就是他们的各种特征,这个也叫做特征向量
1、使用两个类别的宝可梦构成训练数据,分别是水系(Water)和正常系(Normal),训练集中有79个水系的,61个一般系的。P(C1)和P(C2)被称为先验概率
2、根据贝叶斯概率公式,接下来需要计算P(x|C1)和P(x|C2),也就是分析每个类别下的数据分布规律。
把训练数据中水系宝可梦的防御力和特殊防御力的散点图画出来,每一个点代表一个水系的神奇宝贝,假设数据的分布符合高斯分布。
海龟是训练集中未出现过的,但是我们不能说从下面的分布中挑到海龟的概率P(xturtle|Water)是0。这个时候我们如何给出从水系的神奇宝贝里面挑到海龟的概率?我们可以认为训练集中的79个水系的神奇宝贝是从一个高斯分布中采样得到的,若能知道这个高斯分布我们就能给出 P(xturtle| Water),所以现在的问题变为如何通过训练集来找到这样的高斯分布。
3、由极大似然估计法,计算得到高斯分布的参数(均值和标准差)。
高斯模型是概率密度函数,跟概率成正比的,暂时可以理解为是概率,因为是二维的,所以原本是方差变成了协方差矩阵
不同的μ,∑会产生不同的分布,可以发现μ表示分布的偏移,也就是几率分布最高点不一样
而∑表示分布的形状,应该说是分散程度:
若是我们能从训练数据集中知道 μ和∑,如下图我们就能写出该分布的式子,那么任意给定一个x,我们都能拿到在该分布下采样出 x 的概率。黑色的New x就是海龟,虽然离的远,但是也是有概率,只是非常小,当然如果在中心,也就是 x = μ那就是最大的
这79个点可以从任何一个高斯分布中采样得到,比如下图的两个红圈,因为高斯分布中采样出的点可以是空间中的任何点,只是有些地方几率高有些地方几率低,但是不存在几率精确为0的地方。右上角的高斯分布也能抽样出这79个点,不过几率很低;左下角的分布抽样出这79个点的概率就比较高了。
怎么去估计 μ ,∑呢,就要用到极大似然估计,找到一个分布使得它抽样这79个点的概率最大。因为79个样本相互独立,所以这个概率就可以变成乘积的形式,假设这79个样本是来自参数为 (μ∗,∑∗)的高斯分布的可能性最大,取对数,然后求导=0,可以算出这两个的估计值
4、经过前面的几步,接下来就可以使用贝叶斯概率公式进行分类预测。
5、结果
下图给出了测试集上的结果,左边是训练集的分布图,蓝色点是水系,红色点是一般系,然后计算每一个点是C1水系的几率。但是效果不理想
通常的做法是不同的类别共享协方差矩阵 ,因为协方差的规模是和特征数量的平方成正比的,如果特征数量很大,协方差的尺寸也大,由于不同的高斯分布有不同的协方差矩阵,这样模型的参数就会很多,就会过拟合。如下图, 和 的计算和之前一样,还是在各自的类别里面做平均, 的计算方式在下图中给出。因此我们共享协方差,这样参数也少了。协方差矩阵按概率加权平均来算
共享 ,则分界线变成了直线了,像这种我们也称之为线性模型。考虑到所有的特征的时候准确率也提高了,在高维空间里貌似更容易线性可分:
总结一下,使用生成模型 + 贝叶斯概率分布 进行分类问题的三个步骤:首先我们找一堆高斯模型作为模型集,然后用极大似然估计来定义模型的好坏,即可选出最好的模型
为什么要先高斯模型呢,这个其实也不一定,看具体要求,简单的模型偏差大,方差小,复杂的模型偏差小,方差大。如果是二分类,其实可以用伯努利分布。
假设所有的特征产生的几率是独立的,每一个概率都是一维的高斯分布,此时协方差成为了对角矩阵,问题化为朴素贝叶斯模型
后验概率可以表示为sigmoid函数。下面看看 z 是啥
代入z中,并且考虑共享协方差:
得到P(x|C1)最终形式
可以把后验概率写作
这也就解释了为什么在共用协方差之后,变成了线性模型。在生成模型中,我们找到,就可以算出w和b
经过最终的化简计算可以知道,生成模型 + 贝叶斯概率公式 本质上是寻找参数w和b的过程,如果我们直接进行参数w和b的求解,是不是就可以简化前面那么复杂的计算过程?这也是逻辑回归算法
逻辑回归假设数据服从伯努利分布(即数据的标签为0或者1),通过极大化似然函数的方法,运用梯度下降来求解参数,来达到将数据二分类的目的。
逻辑回归的公式:
每个特征xi都有一个权重,然后加上偏置,输入到sigmoid函数里,输出值为(0,1)之间,如果结果大于等于0.5,则认为是类1,否则是类2
逻辑回归中,用1代表类别1,用0代表类别2。所有样本的交叉熵总和作为损失函数。而线性回归中,是一个真实的数。
有一组训练集:
假设我们的数据都来自后验概率模型Pw,b(C1∣X)生成的,记做fw,b(x)。假设我们的样本是独立同分布的,可以计算这一组w和b产生N组训练数据的几率:
根据最大似然原理,要找到一组参数w∗,b∗,使得 L(w,b)的值最大
求最大可以转换为求最小的负对数L(w,b),取对数对函数增减性没影响,即
−lnL(w,b)乘积形式就可以转化为每一个相加的形式,用1表示x属于类别1,0表示x属于类别2。
即推导出:
最下面的式子其实就是交叉熵,代表两个分布有多接近
比如下图两个二项分布,p是真实的分布,q是我们的预测模型分布,我们希望这两个分布越近越好,如果交叉熵为0,,那我们的模型的分布就等同于真实分布了:
使用梯度下降法,求偏微分。
sigmoid函数的微分可以直接记为σ(z)(1-σ(z))
于是
使用梯度下降法进行更新,式子如下:
可见真实和预测之间的差距越大,更新幅度也越大
第一步:目标输出不同。逻辑回归的输出是0-1之间的。
第二步:损失函数不同。逻辑回归中,用1代表类别1,用0代表类别2。所有样本的交叉熵总和作为损失函数。而线性回归中,是一个真实的数。
第三步:参数更新方式相同。紫色部分的值不一样,一个是0到1,一个是任意数
如果我们在损失函数部分,使用和线性函数一样的均方误差作为损失函数,那么参数wi的更新过程如下
问题在于:
也就是说,y^=1的时候,预测为1,离目标很近,导数是0,这是对的,但是另外一种情况,我们预测为0,应该离目标很远,按道理应该有比较大的导数,居然也是0。
无论是结果离目标很远或者很近,偏微分都可能取到0,所以均方差损失函数貌似对分类不合适,下面是他们的损失函数的三维图,可以看到均方差在离最低点的很远的时候有平坦的地方,导数可能为0,而交叉熵没有,交叉熵越远,导数越大,更新幅度越大:
用逻辑回归的方法生成的模型叫做判别模型,用高斯公式描述后验概率称为生成模型。逻辑回归和生成模型用的一样的模型。前者直接在训练数据的特征空间进行学习,直接找出w,b,后者会考虑数据的生成情况,即每个类别下的数据分布规律,用概率分布算出w和b
虽然是同一个函数,但是用两种方法得到的w和b结果是不同的。因为在生成式模型中,我们对概率分布是有假设的,假设是高斯分布或伯努利分布。
事实上,判别式模型找出的参数更好。如图,蓝色区域代表水系宝可梦,红色区域代表一般系宝可梦。我们都使用7个特征进行判别,生成式模型的准确率不如判别式模型的准确率高。
举例说明:
假设有一组训练数据,有两个类别,每一条数据有两个特征,共1+4+4+4=13条训练数据。第一笔数据的两个特征值均为1;接下来的4笔数据第一个特征值为1,第二个特征值为0;接下来的4笔数据第一个特征值为0,第二个特征值为1;最后4笔数据的两个特征值均为0。我们给四种数据的标签分别为类别1,类别2,类别2,类别2。
假设给出一条测试数据,两个特征值均为1,那么我们直观的预测这条数据属于类别1。
用朴素贝叶斯方法进行判别,假设特征之间是相互独立的:
然后用朴素贝叶斯方法估测这条数据是来自类别1的概率,算出来小于0.5,所以对于朴素贝叶斯方法而言,这样的测试数据会被识别为是类别2。因为生成模型有某种假设,所以他会进行脑补,可以推测出这样的样本会是Class2的。
生成式模型和判别式模型的差别就在于生成式模型做出了一些假设,假设符合高斯分布或伯努利分布,假设朴素贝叶斯。脑补到底好不好呢,生成式模型也是有一定优势的:
①训练数据很少(判别式模型的结果受到数据量的影响很大,只要数据够多,效果就越好,如果数据少,生成模型可能会比较好点,受到数据量影响小,因为它可以自行做出一些假设)
②数据有噪声(数据有噪声意味着标签本身有可能就是有问题的,因为生成式模型可以做出一些假设,反而可以忽视掉数据中有问题的部分)
③由于判别式模型是直接假设一个后验概率,然后再求解这个后验概率的参数,但是生成式模型是把整个公式拆解成先验概率和类的概率这两项,这样先验概率和类的概率这两项是可以来自不同的来源的。比如语音识别,其实他是个生成模型,判别模型只是一部分,还有有部分是一个先验概率,就是说出某句话的概率,是从很多语句里面统计出来的概率
假设有三个类别,每个类都有自己的权重和偏置,w代表一个向量,b代表一个常数。输入要分类的对象x,每个类别z关于每个输入x都有一个权重w,用w*x+b得到3个z。把求出来的3个z输入到一个Softmax函数,最终结果如图所示。Softmax的作用是对大的值做强化,使得大的值和小的值差别更大。
输出的y可以看成是一个概率分布,我们的真值也是一个概率分布,我们要做的就是让他们的概率分布越小越好,于是可以用到交叉熵,即两个分布的差异。3个类别的目标分别用one-hot向量表示,防止用1,2,3表示的话,不同的类别之间有了远近关系(实际上并没有)。
多分类的交叉熵是极大似然估计转换得到的,很直觉的也可以理解为极大似然估计就是要找到最像真实分布的预测分布,也就是希望预测分布和真实分布差异小,也就是交叉熵越小越好,就等价于优化交叉熵了。可以参考Goodfellow 花书学习笔记-机器学习基础_iwill323的博客-CSDN博客
假设我们要用逻辑回归来分下面的例子,逻辑回归的分界线始终是一条直线,一条直线始终无法把红色的点和蓝色的点分成两个类别。
如果还是要用逻辑回归的话,这个时候就可以用到特征空间的转换,把x1′设为某点到(0,0)的距离,x2′设为某点到(1,1)的距离,刚好红线可以分割:
但是很多时候我们是不知道要怎么要转换的,希望机器可以自己学着去转换,可以把很多个逻辑回归组合起来。上面的例子我们可以用两个逻辑回归的,刚好转换到两个新坐标上,然后再接一个逻辑回归来进行线性分类:
把一个逻辑回归叫做一个神经元,这些神经元形成的网络称为神经网络。
这个教程最大的好处,可能是说明了神经网络对于输入的特征的学习
生成式模型:学习得到联合概率分布P(X,Y),然后再求条件概率分布。能够学习数据的生成机制。例如隐马尔可夫模型,朴素贝叶斯,LDA等。(学习多个模型)
计算思路:学习全部样本的先验和条件概率分布求出后验概率。
优点:①可以通过联合概率分布获取其他信息 ②收敛速度快(适用数据多) ③能应付存在隐变量的情况(高斯模型) ④可以进行异常检测
缺点:①联合概率计算量大
判别式模型:学习条件概率分布。例如SVM,感知机,决策树,KNN,CRF等。(学习一个模型)
计算思路:直接学习得到条件概率分布。
优点:①节省计算资源 ②需要的样本数量小 ③准确率较高
缺点:①得到的信息少
参考:
分类:概率生成模型 - 李宏毅机器学习笔记_一杯敬朝阳一杯敬月光的博客-CSDN博客
李宏毅 机器学习(2017)学习笔记——5-逻辑回归_xixi_twinkle的博客-CSDN博客_李宏毅2017教程逻辑回归分类:概率生成模型 - 李宏毅机器学习笔记_一杯敬朝阳一杯敬月光的博客-CSDN博客李宏毅 机器学习(2017)学习笔记——5-逻辑回归_xixi_twinkle的博客-CSDN博客_李宏毅2017教程逻辑回归【人工智能】史上最易懂的人工智能讲解 女算法工程师教你生成式模型与判别式模型_哔哩哔哩_bilibili
LeeML-Notes