视频学习笔记之一(贝叶斯)

来源:互联网 发布:php开发简历自己缺点 编辑:程序博客网 时间:2024/06/05 08:25

机器学习

Python编程

统计学(统计学 推论统计学)

无人驾驶汽车是一个重要的监督分类问题,监督表示你有很多样本,你了解这些样本的正确答案。我们训练了汽车,并向汽车展示了正确的行为,Autobahn挑战赛,它很仔细的观察驾驶员是怎么开车的,并模拟我们的行为。

 

监督分类:supervised  classification

推荐系统是

交易异常并不是,因为我们没有给出交易异常的明确定义,没有例子来说明它的含义,它属于非监督学习的例子。聚类也属于非监督学习,对于学生分类这个问题来说,你并没有大量已经知晓正确答案的样本数据。

 

在机器学习中,特征feature作为输入,然后尝试生成标签labels,我们提取特征,对于音乐来说,可能就是,强度,歌曲节奏或者流派声音性别等,那人的大脑就会把它处理为两个类别中的一个,喜欢和不喜欢。


 


 

地形分析:

选取两个特征,坡度(平地还是陡坡)和平整性(车内可以实际测量的汽车上下抖动的情况)然后学习并帮助汽车决定快走还是慢走。使用监督机器学习。

 

关于散点图:

我们往往不直接读取原始数据,而是把数据绘制成散点图再看。

 

这些数据有两个维度,而且被分成了两类,而且出现了一个新的数据点。在机器学习中很重要的问题就是:对于一个全新的数据点你能了解多少?考虑已有数据,根据你的直觉,我们认为它是属于蓝色分类中的。


对于这个新的黑色的数据点,我们无法确定!

 

 

那么,机器学习可以干什么呢?它们可以定义决策面,决策面通常位于两个不同的类之间的某个位置上。

 

它将一类和另一类分开,并且能泛化到之前从未见过的数据点上。

当决策面为直线的时候我们称之为线性决策面。

 

下图画出了三个决策面,选出其中有且仅有的一个最能针对新数据进行泛化的线性决策面。

 

机器学习算法所做的事:获取数据(data),并将其转化成一个决策面(DS)。这适用于以后的所有情况。

 

朴素贝叶斯等价:Bayes

是一个常见的寻找这样的决策面的算法。

 

监督分类:使用的是驾驶数据集,散点图上已经画了750个点,我们的目的是绘制一条决策边界,帮助我们分辨需要减速的地形和可以告诉运行的地形。这意味着可以绘制一条类似于此处所示的边界,进而将地形分为两类,对于任意点我们都可以立即将其分类为需要减速或者高速运行的地形。

 

有一个python库经常被用到,scikit-learn 经常缩写成sklearn,在goole搜索sklearn naive bayes,将会给到朴素贝叶斯公示的推导过程和大量的用法,包括高斯朴素贝叶斯。

进入高斯朴素贝叶斯的文档页面:sklearn.naive_bayes.GaussianNB,这就是刚才编写那个分类器所用的算法。页面内有大量的实例,可以把实例代码在自己的python解释器里运行一边,查看能不能运行成功,几乎所有代码都能正常运行。

第一行重要的代码:

 

上面的代码只是用来生成一些可以利用的训练点而已。重要的是这个import语句,这个语句的作用是把外部模块引入你编写的代码里,这样就没有必要每次都完全重新实现所有代码,你可以使用他人编写好的代码,我们从sklearn.naive_bayes引入GaussianNB模块,接下来,我们用一下内容创建分类器:把GaussionNB赋值给clf(分类器)

 

如果你上面忘记了inport语句,运行这一行的时候就会报错!如果你看到某些错误显示无法识别这个函数,问题就很有可能出在你的import语句上。然后创建好了分类器,代码也可以投入使用了,接下来要做的就是调整这些代码:

 

我们已经使用fit替换了train,这里是我们实际提供训练数据的地方,它会学习各种模式,然后就形成了我们刚刚创建的分类器,我们在分类器上调用fit函数,接下来将两个参数床递给fit函数,一个是特征X,一个是标签Y,在监督分类中这个过程都是如此,即先调用此fit函数,然后依次获得特征和标签,最后我们让已经完成训练的分类器进行一些预测,我们为它提供新的点(-0.8,-1),我们想知道这个特顶点的标签是什么?它属于什么类?在这个分类器中将该点归在了“1”这个分类下,换成其他数据它也可能归在“2”类上,总之,就是先训练好分类器,才能调用分类器上的预测函数,因为使用数据训练的过程就是它实际学习模式的过程,然后分类器能利用学得模式来进行预测。

 

from sklearn.naive_bayes import GaussionNB引入语句

clf = GaussionNB()创建分类器

clf.fit(features_trian,labels_train)使用训练特征和训练标签填充它

pred = clf.prediction(feature_test)使用分类器上的预测功能创建预测向量,pred

 

代码实例;

 

最后就是评估分类器效果:计算分类器进行分类的准确率,因此我们要确定分类器效果的度量值,准确率。准确率是指分类器正确分类的数据点个数占测试集中的所有被分类点的比率,

Accuracy= no. Of points classified correctly /all points (in test set)

可以用两种方法来计算,第一,将这里的预测值和测试集中的特征进行比较

###method1 #1:write code that compares predictions to y_test,element-by-element

或者你可以直接回到scikit-learn文档中,看看是否可以应用某些scikit-learn函数来计算准确率。

###method2 #2:goole “sklearn accuracy” and go from there

 

训练数据和测试数据:

有一项操作在两个不同的数据机上进行测试和训练,实际上,在机器学习中,始终是在不同的数据集上测试非常重要,如果不这样做很有可能会造成过拟合,你可能会高估你对情况的了解程度。因为一般你需要泛化在某些方面存在差别的新数据。一个算法如果只记住所有数据,使用相同数据作为训练数据进行测试这样就能始终获得100%的正确率。但它不知道如何泛化新数据,因此我们始终要做的工作就是保存10%的数据并将其用作测试集。

 

Bayes rule:贝叶斯规则

癌症的例子:假如一种特定癌症发生率为人口的1%,P(C)=0.01

对于癌症的检查:如果得了癌症,检查结果90%可能是呈阳性的:这通常叫做测试的敏感性

有时候并没有患病检查结果仍然呈阳性,我们假设,若没患病,有90%的可能性是呈阴性,这通常叫做特异性。

那么问题是,假如没有任何症状的情况下进行检查,检查结果呈阳性,那么你认为换上这种病的概率是多少?那先来画个图:

1%的人患病,99%的人不患病,有一个检查会告诉患不患病,正确诊断率为90%,


有一些先验概率,就是在检验之前就得到的概率,prior probability

然后会从测试本身获得一些证据evidence

这些都会引导你获取后验概率:postenisy probability;二者之间更像乘法运算,根据贝叶斯法则是将测试中的某些证据假如你的先验概率中,以便获得后验概率。

 

 

归一分为两步:我们只需要把这些数字归一比例保持不变,但是确保它们相加和为1。

0.009和0.099 计算两个数字的和,0.108,严格的说,也就是刚才标记的圆圈的面积,也就是两个事件的总和0.108。

 

 

贝叶斯法则可以用于很多方面:其中一个就是学习文档或文本,我们所知道的方法通常被称为朴素贝叶斯方法,naive bayes,他并不朴素,不如贝叶斯法则本身朴素,下面使用安然电子邮件数据集进行练习。假如现在有两个人,一个叫chris一个叫sara,两个人都写了很多电子邮件,为了简单起见我们假设这些电子邮件仅包含三个词语:爱、交易、生活。二者的区别在于,他们使用三个词语的频率不一样,假设chris喜欢交易这个词,他的词语中有80%设计交易,他谈论生活和爱的概率为0.1。。。


这是一个简化示例,可以使用朴素贝叶斯方法基于随机邮件确定邮件的发送人。

假设有一封邮件谈及爱喝生活,但并不知道是谁发送的,为了能弄清楚是谁发送的,假设事先认定发送人是chris或sara的概率各为50%,先验概率各为0.5.

 

这样看来的话,是sara写的邮件的概率更高。那如果有一封邮件谈及生活和交易,那会是谁写的呢?

 

下面呢就是计算后验概率

 

为什么叫朴素贝叶斯呢?我们所说的未知的概念就是我们的标签labels,目标标签,假如有labelA,labelB, 他们隐藏起来了,他们使用词语的概率不同,你看到的某个词语会为你提供证明是A或是B的证据,而你要做的是把你看到的每个词语的所有证据相乘,这将是很大的数据,用相应的先验概率,得出乘积时可以判断出这个人是A还是B的概率,这就叫做朴素贝叶斯,它能让你从文本源中鉴别这个标签更有可能来自于A还是B,你可以使用这个方法判断人或新闻资源,你可以问,比如这篇文章是莎士比亚还是其他人写的,这是一个非常强大的工具,可以广泛的应用于机器学习。之所以说他朴素是因为它忽略了意见事情,词语顺序,信息是有顺序的,随意的将单词重新排序是没有任何意义的,所以不注意它的词序就没有真正的理解这个文本,它只能把词的频率当成一种分类方法,这就是被称为朴素的原因。

 

贝叶斯有很多优点:它易于执行、特征空间大、运行容易有效。

缺点:它会有间断、由多个单词组成且意义明显不同的短语就不适用;

 

迷你项目:

几年前,J.K. 罗琳(凭借《哈利波特》出名)试着做了件有趣的事。她以 Robert Galbraith 的化名写了本名叫《The Cuckoo’s Calling》的书。尽管该书得到一些不错的评论,但是大家都不太重视它,直到 Twitter 上一个匿名的知情人士说那是 J.K. Rowling 写的。《伦敦周日泰晤士报》找来两名专家对《杜鹃在呼唤》和 Rowling 的《偶发空缺》以及其他几名作者的书进行了比较。分析结果强有力地指出罗琳就是作者,《泰晤士报》直接询问出版商情况是否属实,而出版商也证实了这一说法,该书在此后一夜成名。

我们也将在此项目中做类似的事。我们有一组邮件,分别由同一家公司的两个人撰写其中半数的邮件。我们的目标是仅根据邮件正文区分每个人写的邮件。在这个迷你项目一开始,我们将使用朴素贝叶斯,并在之后的项目中扩展至其他算法。

我们会先给你一个字符串列表。每个字符串代表一封经过预处理的邮件的正文;然后,我们会提供代码,用来将数据集分解为训练集和测试集(在下节课中,你将学习如何进行预处理和分解,但是现在请使用我们提供的代码)。

朴素贝叶斯特殊的一点在于,这种算法非常适合文本分类。在处理文本时,常见的做法是将每个单词看作一个特征,这样就会有大量的特征。此算法的相对简单性和朴素贝叶斯独立特征的这一假设,使其能够出色完成文本的分类。在这个迷你项目中,你将在计算机中下载并安装 sklearn,然后使用朴素贝叶斯根据作者对邮件进行分类。


原创粉丝点击