概率论在机器学习中的迁移运用,手把手建一个垃圾邮件分类器

开发 开发工具
本文让我们将目光高度聚焦在概率论在机器学习中扮演的角色,通过从头开始构建一个垃圾邮件分类器。

[[203536]]

翻轴 | 曾维新,chelle,马卓群

校对 | Jenny,Sophie

大家好,我是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)”】

     大数据文摘二维码

 

戳这里,看该作者更多好文

责任编辑:赵宁宁 来源: 51CTO专栏
相关推荐

2017-07-20 10:23:20

pythonscikit-lear垃圾邮件过滤

2019-10-29 15:46:07

区块链区块链技术

2022-06-28 15:29:56

Python编程语言计时器

2022-08-26 08:01:38

DashWebJavaScrip

2021-06-22 10:43:03

Webpack loader plugin

2022-11-07 18:36:03

组件RPC框架

2013-05-14 09:27:13

垃圾邮件LinuxSendmail

2009-07-02 18:55:11

2014-09-29 16:52:00

2022-09-22 12:38:46

antd form组件代码

2020-12-15 08:58:07

Vue编辑器vue-cli

2019-08-26 09:25:23

RedisJavaLinux

2011-01-24 14:36:26

2009-10-27 09:32:45

垃圾邮件管理策略邮件管理

2009-06-02 15:38:36

eclipse streclipse开发steclipse str

2014-04-22 10:44:34

垃圾邮件盈世绿色邮箱

2018-11-22 09:17:21

消息推送系统

2021-08-31 10:02:10

KubernetesLinux集群

2017-02-09 18:50:42

深度学习机器计算机

2016-11-01 09:46:04

点赞
收藏

51CTO技术栈公众号