Stanford机器学习课程笔记2-高斯判别分析与朴素贝叶斯

AI summary
本文介绍了高斯判别分析和朴素贝叶斯算法的基本原理和实现。高斯判别分析通过高斯分布建模特征,使用最大似然估计来求解参数;而朴素贝叶斯算法假设特征条件独立,通过先验概率和似然概率进行建模,适用于文本分类等任务。文中还提供了相应的Python实现和拉普拉斯平滑的处理方法,以解决特征未出现时的零概率问题。
Tags
Machine Learning
Implementation in Programming
Gaussian Discriminant Analysis Principles
Last edited time
Sep 23, 2024 02:28 PM
Last edited by

判别学习算法和生成学习算法

  • 判别学习算法:直接学习,即直接通过输入特征空间x去确定目标类型{0,1},比如Logistic Regression和Linear Regression以及感知学习算法都是判别学习算法。
  • 生成学习算法:不直接对建模,而是通过对建模。比如,y表示目标是dog(0)还是elephant(1),则表示大象的特征分布,表示狗的特征分布。下面的高斯判别分析和朴素贝叶斯算法都是生成学习算法。
生成学习算法通过学习,一般都要通过贝叶斯公式转化为来进行预测。
最大释然估计也可以转换为联合概率的最值。

高斯判别分析(Gaussian Discriminant Analysis)

对于输入特征x是连续值的随机变量,使用高斯判别分析模型非常有效,它对使用高斯分布建模。
,其中p为先验概率
依据前面对生成学习算法的分析,求联合概率的最大似然估计,
求得4个参数值及其直观解释为:
直观含义:类目1的样本数占总样本数的比例,即先验概率,类目0的先验概率刚好是
直观含义:类目0每个维度特征的均值,结果是nx1的向量,n为特征维度
直观含义:类目1每个维度特征的均值,结果是nx1的向量
下面随机产生2类高斯分布的数据,使用高斯判别分析得到的分界线。分界线的确定:
notion image

朴素贝叶斯算法(Naive Bayesian)

相较于高斯判别分析,朴素贝叶斯方法的假设特征之间条件条件,即有:
特别注意:特征之间条件独立是强假设。比如文本上下文的词汇之间必然存在关联(比如出现’qq’和’腾讯’这两个词就存在关联),只是我们的假设不考虑这种关联,即使如此,有时候Bayesian的效果还是非常棒,朴素贝叶斯常用语文本分类(比如最常见的垃圾邮件的检测)。下面是一份非常直观的以实例的方式介绍贝叶斯分类器的文档(如果显示不出来请换用Chrome浏览器,我后面的python代码也将用文档中的数据做example),
看完上面的文稿,我们再来说明理论点的建模。Naive Bayesian对先验概率和似然概率进行建模,不妨设 , 则又联合概率的似然函数最大,
求解得到先验概率和似然概率:
直观含义:类目1中出现特征xj的频率,实际实现时只要通过频次进行计数即可
直观含义:类目0中出现特征xj的频率,实际实现时只要通过频次进行计数即可
直观含义:类目1的样本数占总样本数的比例,即先验概率,类目0的先验概率刚好是 ,这个和GDA的结果是相同的。
这里有个Trick,为什么不要对“证据因子”建模呢,(1)首先,可以通过似然概率和先验概率求得;(2)其次,的作用主要是起到概率归一化的效果,我们可以直接在程序中对最后的进行归一化就得到了。有了上面的结论,即已知先验概率和似然概率,很容易求的。比较p(的大小,若则分类到类目1,则分类为类目0。下面是我用python实现的Naive Bayesian(今后还是少用Matlab,多用python吧,毕竟Matlab只适合研究不能成产品。。。),
我们将上面的python代码保存为bayesian.py文件,下面是python代码的Example测试实例(example.py):
输出结果:
notion image

拉普拉斯平滑(Laplace smoothing)

当某个特征未出现时,比如 , 则由于独立条件必然使 , 这样就造成贝叶斯公式中的分子为0。我们不能因为某个特征(词汇)没在训练数据中出现过就认为目标出现这个特征的概率为0(正常情况没出现的概率应该是1/2才合理)。为了应对这种情况,拉普拉斯平滑就能应对这种贝叶斯推断中的0概率情况。
上面的python源代码中就考虑了Laplace smoothing。
Loading...