机器学习算法之--朴素贝叶斯(NB)

机器学习算法很多,常见的有朴素贝叶斯,逻辑回归,决策树,等等今天让我们开启对朴素贝叶斯的认识。。。

分类技术认识:

定义:给定一个对象X,将其划分为到预定义好的某一个类别Yi中。

-输入 : X

-输出: Y (取值于有限集合{y1,y2,y3....yn})

应用:邮件是否垃圾,病人分类,点击是否有效等等。

通俗理解:

这里输入对象是一篇文章X,那么到底是军事还是财经就是Y。

常见的分类有二值分类(男女)和多值分类(文章分类{政治,体育,科幻})

分类任务解决流程:

扫描二维码关注公众号,回复: 2603083 查看本文章

新闻分类

一:特征分类:X = {昨日,是,市场...}  【特征分类的前提是进行中文分词】

二:特征选择:X ={国内,国外...}  【对中文分词后的结果进行关键词提取】。

三:模型选择:朴素贝叶斯分类器【选择分类模型】

四:训练数据准备:

五:模型训练:

六:预测(分类):

七:评测:得到评测效果

常见分类技术:

--概率选择器

  --NB

  --计算待选择的对象属于每个类别的概率,选择概率最大的类别作为输出

--空间分割

  --SVM :支持向量机 如下图:   缺点不适合样本量过大

上图有四种不同样本的类别,在空间上进行打点,经过学习得到一些线条,比如蓝色的部分,通过几条线,可以很清楚的把不同的样本分割开了,这就相当于在一个二维空间里,划线将样本进行分割,这样的算法就是空间分割类的算法,SVM就是这样的。

前面说了很多现在进入今天的正题,学习常见的分类算法朴素贝叶斯分类器。

三 朴素贝叶斯分类器:

公式:

P(yi|X)=P(yi)P(X|yi)/P(X)

公式进行拆解过程:

yi是指某一个分类

Y={军事、财经、体育}

X=一篇文章

xi=文章中具体某一个词

P(yi|X):给定一篇文章,属于某一个类别的概率值

P(yi):先验概率

给大家100篇文章,其中50篇是军事、30篇财经、20篇体育

P(y=军事) = 50/100 

P(y=财经) = 30/100

P(y=体育) = 20/100

P(X):这篇文章的概率=是一个固定值,可以忽略掉 ,一定会出现该文章概率为1。

 因此:P(yi|X)=P(yi)P(X|yi)/P(X)

可以进一步简写为:P(yi|X)≈ P(yi)P(X|yi)

P(X|yi):对于y指定的类别中,出现X的概率

P(xi|yi):对于y指定的类别中,出现x这个词的概率

y=军事,x=军舰      军事这个类别一共有多少个词,其中出现军舰的次数是多少 就是军事文章中出现军舰的概率。

X={军舰、大炮、航母}

P(X|y=军事) = P(x=军舰|y=军事)*P(x=大炮|y=军事)*P(x=航母|y=军事)

前提:独立同分布=》朴素贝叶斯【复杂问题简单化】

P(yi|X)≈ P(yi)P(X|yi)  ==最终朴素贝叶斯

对每一个标签都求对应概率,最大者为该分类。

朴素贝叶斯推导过程:

朴素贝叶斯公式可以由条件概率公式推导而来,下面是推导的具体过程:

1.P(X|Y) = P(X,Y)/P(Y)

2.P(X,Y)=P(X|Y)*P(Y)

3.P(X,Y)=P(Y,X)

4.P(Y,X)=P(Y|X)*P(X)

5.P(X,Y)=P(Y|X)*P(X) 

将5中P(X,Y)带入1得6:

6.P(X|Y) = P(Y|X)*P(X)/P(Y)

最终朴素贝叶斯公式:

P(yi|X)=P(yi)P(X|yi)/P(X)

五:【模型训练和参数估计】

实现模型训练和参数估计采用的策略是:最大似然估计

最大似然估计:通过离线的行为,将背后的概率进行呈现,包含的特点,训练数据量越大得到的参数越准确,

越接近于真实。训练数据太少,其中一个文章的标签打错啦,就是噪音,容易被干扰。

条件概率公式:
P(xj|yi) = P(xj,yi)/p(yi)
P(xj|yi) 计算不好直接计算进而转变为最大似然估计来解决:

为了完成NB分类问题,我们需要2类参数来支持

1、先验概率P(yi)

2、条件概率P(X|yi)

参数需要计算出来的,在这里参数就是模型

先验概率:
    p(yi)计算方法一模一样

条件概率:
    分子:军事类文章中包含“谷歌”这个词的个数
    分母:军事类文章中所有词的个数
    p(x="谷歌"|y="军事"):分子 / 分母
    

P(xj|yi) 有2种方法:
第一种都是文章的个数,第二种都是词的个数
第一种:
    分子:军事类文章中包含“谷歌”这个词的文章个数
    分母:军事类文章个数
    p(x="谷歌"|y="军事"):分子 / 分母

第二种:推荐使用这种方式
    分子:军事类文章中包含“谷歌”这个词的个数
    分母:军事类文章中所有词的个数
    p(x="谷歌"|y="军事"):分子 / 分母

通过朴素贝叶斯得到一堆模型,这个模型效果很好,模型的本质就是一堆概率。

七 模型评估评测问题

需要使用混淆矩阵(或者混淆表)对效果做评测:

一般评估正样本,混淆表只能对于二分类进行评测,若是多分类只能指定一个类别,其余的就是其他类别 。

是以模型的角度为主:

准确度Accuracy: (50+35)/(35+5+10+50)    【预测正确样本个数除以总个数】

精确率Precision(y1):50/(50+5)=90.9%

召回率Recall(y1):50/(50+10)=83.3%

精确率:一开始不知道文章的label,模型我从100文章中预测了55是军事,但是其中只有50是军事,模型的精确率就是 50/55 。

召回率:就是有60篇是军事,模型判断出来了50,但是有10篇文章没被模型判断出来, 若是模型校验的话就存在10片文章丢失的情况,丢失的文章就是损失。

推荐系统里面:100高质量的物品,其中只有90个进入了候选队列,还有10个处于流离失所状态,没有被召回

在实际的应用中阶段性不一样最要求不一样在:推荐系统在NoSQL索引库中侧重于召回率,在排序模型中侧重于精确率。

通过正确率,召回率,可以得到一个PR曲线【P:正确率 R:召回率】,PR曲线一般是准确率高,召回率低,召回率高,准确率低。

PR曲线是个评测指标,用来协助你去选择阀值的,那么我们看下ROC曲线的评测指标

纵轴:真阳率,召回率,TP/(TP+FN) 横轴:假阳率FP/(FP+FN)

那么ROC曲线有什么用,其实ROC曲线是为了得到AUC曲线,即ROC曲线下的面积

得到ROC不是真正的目的,最终为了得到AUC,AUC就是ROC曲线下的面积。

AUC的面积就是1,所以ROC曲线下面的面积一定是0-1之间的小数。

ROC曲线的意义就是为了得到AUC。

但是这样的计算太麻烦。

另一种理解AUC的方法:负样本排在正样本前面的概率。通过awk方式来解决:

cat auc.raw | sort -t$'\t' -k2g |awk -F'\t' '($1==-1){++x;a+=y;}($1==1){++y;}END{print 1.0-a/(x*y);}'

x*y是正负样本pair对

a代表错误的个数

a/x*y 错误的概率

1-a/x*y 正确概率

举例1:

A 0.1  B 0.9

:假设:任何两个样本之间打分,都应该按照顺序去排序,若是按照这样的顺序排列了,就是正确的,排反了,否则就是错误的

(A,B)正确

(B,A)错误

若是所有的负样本全部排在正样本前面,则AUC就是100%

若模型打的分比较小,模型认为该样本为负例,若是真负例,就应该排在前面的概率才对。

举例2:

军事 +1  +1代表军事

财经 -1  -1代表财经

1.来了一个样本是真实标签:军事题材【+1】的文章,然后用模型对其打分,

2.通过模型对文章进行预测,预测的时候会打分,为预测分数

3.通过预测分数预测数预测标签是:军事

4.预测和真实的都是军事说明模型预测成功了

5.若预测为财经,则说明该模型打错啦

6.真实标签为+1 ,预测标签为-1 

7.模型给你文章打分,分数越高就趋近于+1 否则趋近于-1 ,因此有一个阈值大于某一个之上才是正例,否则就是负例。

8.所以通过阈值控制预测标签,阈值就是人工设定的。 若默认为0 所有模型对文章打的分数大于0为正例,小于等于0为负例。

按理说模型预测正确,前面是-1的概率很大,

完美情况下,模型预测全部正确的话,前面全部是-1,后面全部是+1

举例2:

证明概率不会大于1:

100个样本

极端情况下:前面有50个+1,后面有50个-1

一共:50*50=2500 pair对

y=50

x=50

a=50*50=2500

最终:1-a/(x*y) 概率为0,即最差情况下AUC为0 ,但是一般AUC最差结果为0.5【此时的AUC没有任何的区分能力】

AUC只对二分类:多个类别,只有对每一个类别分别做一个AUC。

猜你喜欢

转载自blog.csdn.net/u013953226/article/details/81362530