大家好,我是Siraj。
让我们将目光高度聚焦在概率论在机器学习中扮演的角色,通过从头开始构建一个垃圾邮件分类器。
数学概念在生活中的应用
生活中充满了不确定性,我们尝试一些自己觉得会成功的事情,但我们无法确定,比如今天是否会下雨,或者在众人注视下跳舞是否合适,亦或是我是否该在这段感情中投入更多。概率论给我们搭建了一个大的框架来进行上述的决策,而通过这么做, 我们能做出更有效的决策。
数学的一些分支理论方法,能够在我们有完整信息时帮助我们做出决定,但是概率论能够训练我们,在规律性与不确定性并存时做出决定。就像我们真实的生活,它是用来衡量某事发生的可能性。
而分析服从一定概率分布的事件规律这一学科,叫做统计学。一个简单的例子便是抛硬币,只会存在两种结果,即正或者反,我们可以对正面出现的概率进行建模,因为我们知道两个要素,即事情可能发生的方式以及总共能出现的结果,在这个例子中便是50%。
就像蓝牙的工作频率一样,这是一个随机的变量,它代表着一件我们无法确定的事,无法确定的事并无法像代数那样用变量进行表述。相反的,它有一组可能的取值,也称作样本空间,以及这组里的每一个取值可能发生的概率是通过这样表示的。它们既可以是离散的,只表示一定数量的值,也可以是连续的,能够取到一定范围内的任何值。
假设现在有两件可能发生的事情 A和B,比如,我们抛一枚硬币,以及掷一枚六面的骰子。我们可以用三种方式来衡量它们的可能性,即当硬币是正面时,骰子是4的概率,这便是条件概率。
我们也可以对两件事情同时发生的概率建模,比如说,硬币落在正面同时骰子落在4的概率是什么,这便是联合概率。而如果我们想要知道某种特定结果的概率,比如说,仅仅只是硬币或者仅仅只是骰子的投掷概率,这种便被称为边际概率。
贝叶斯统计
在机器学习中我们做了很多类似的假设,有些时候它们是错的(一家公司),现在十分流行使用贝叶斯定理,它构建于条件概率的原理之上。
它之所以被称为定理,是因为我们可以通过逻辑来证明它的真实性。理论中说道,对于两个事件A和B,如果我们知道在A已知的条件下B发生的条件概率,以及A事件发生的概率,我们能计算得到已知B事件的条件下A发生的条件概率。
换句话来说,已知B的条件下,A发生的后验概率,能够通过下述方法计算得到,即将已知的可能性乘以先验概率,并将乘积除以已知的概率值,事件的先验概率 (the prior是英文中对先验概率的简称),它是利用已有的信息计算得出的概率。
某一天有雨的事前概率可以计算为0.6,在过去的100年里这个日期60%都有雨,我们从一个事前概率入手,现在我们得到了新的信息,从而更准确的重新估计此概率。
如贝叶斯统计学家Lindley所言,掏出枪,当你看到...(此处为2pac Hit'em Up歌词),等等...他说的是今天的事后概率就是明天的事前概率,我们可以利用这个定理,根据新的知识来更新概率。
如果木板断裂,这个小车而坠毁的概率是多少?木板断裂的概率为0.3,小车坠毁的概率为0.5。利用贝叶斯定理,坠毁几率为20%,事故避免啦,那么如何将此应用于机器学习中呢?
有这么一个线性分类器的家族,它们基于贝叶斯定理,被称为朴素贝叶斯分类器,它们往往表现得非常好,尤其是对于小样本来说,因此它们要优于其他更强大的替代品。
实战上手垃圾电子邮件的分类
朴素贝叶斯分类器广泛应用于一系列不同的领域,从诊断疾病,到情绪分析,到我们接下来要做的垃圾电子邮件的分类。
它们对数据做了两个很大的假设,***个假设,样本是独立且同分布的,它们是两两相互独立的随机变量,是从相近的概率分布中得出的;第二个假设,特征的条件独立性,这意味着样本的概率,可以从训练数据中直接估计得出,而不是去评估X的所有可能性。因此给定一个N维特征向量,我们可以计算类条件概率,意思是说有多大可能性可以观测到这个特定模式,假定它属于类别Y的话,在实践中,这种假设被违反了相当长的时间,尽管它们的表现还是很不错的。
***个假设
第二个假设
为了使用朴素贝叶斯做一个预测,我们将计算属于每个类别中的情况的概率,并使类值达到***,对朴素贝叶斯分类器来说,这种分类数据是一个很好的用例。首先我们来加载数据文件,它是CSV格式,所以我们可以使用流行的数据处理模块pandas打开文件,并利用其读取功能将每一行存储在数据框中,每个电子邮件都标记为垃圾或非垃圾邮件。
我们可以将数据分割成一个测试我们模型的训练集,和一个评估其预测能力的测试集,对于我们在贝叶斯定理背景下的垃圾邮件分类问题,我们可以将A设为电子邮件是垃圾邮件的概率。而B设为电子邮件的内容,因此如果电子邮件是垃圾邮件的概率,大于它不是垃圾邮件的概率,那么我们将其分类为垃圾邮件,否则我们就不会由于贝叶斯定理在两种情况下都会导致B的概率作为除数。
因此可以将其从我们的比较方程中约去,计算A和非A的概率很简单,它们不过是我们的训练集中,垃圾邮件和非垃圾邮件的百分比,更为困难的部分是计算,A的条件下B的概率和非A的条件下B的概率,为了做到这个,我们需要“词袋”模型(BOW)。意思是我们把一段文字作为一组无重复词群来提取,忽略每个单词的顺序。
对于每个单词,我们计算出它出现在垃圾邮件中 和非垃圾邮件中的百分比,如果要计算一封完整邮件的另一种条件概率,我们就看邮件中出现的每个单词的之前的条件概率相乘之后的结果,这个是在分类中进行, 而不是在训练时。
我们可以构造自己的分类函数,这类函数在碰到每封邮件的时候就会启用,并且使用我们之前定义的方程去对它们进行分类,这个就是全部现在我们能很容易地对新邮件进行分类 把他们分成垃圾或者非垃圾邮件。
如果我们想要分类的邮件中的单词,不在我们的训练集里呢?不管怎样,我们要解决这个极端例子的问题。解决的方法是用一种叫,它可以让我们将代码就作为”Alpha“变量输入,这个意味着每一次我们加1,所以它永远不会是零,因为如果不是这样操作的话,他会把某个单词的概率设定成零 (比如说”警察“),这样的话 整个邮件的概率也变成了零,不管这封邮件中出现了多少个其它垃圾性词组,我们至今都还没有好的答案。
就是如果我们把模型自己变成随机会怎么样,的意思是像结构中的嵌入随机变量,变分自动编码器,很棒的一篇论文,我会发你的,请务必,我们或许还能把我们的模型造得和你一样变幻莫测,我很多变的,对于我们的模型有没有什么我们可以改进的地方?
当然啦!我们本可以用一些更有效率的技术,而不是词袋,并且用egram而不是数每个单词,但是朋友们,今天这个视频已经内容够多的了。
总结一下,概率论将有助于我们正式地将生活中的不确定因素用模型建立出来,这简直太棒啦,贝叶斯定律描述一件事情的概率是基于,之前所有可能和这个事件相关的条件,朴素贝叶斯分类器,将带有独立性假设的贝叶斯定律应用于各种特征之中。
来源:https://www.youtube.com/watch?v=PrkiRVcrxOs&t=6s
【本文是51CTO专栏机构大数据文摘的原创译文,微信公众号“大数据文摘( id: BigDataDigest)”】