r语言贝叶斯判别先验概率怎么去

Python015

r语言贝叶斯判别先验概率怎么去,第1张

Bayes判别,它是基于Bayes准则的判别方法,判别指标为定量资料,它的判别规则和最大似然判别、Bayes公式判别相似,都是根据概率大小进行判别,要求各类近似服从多元正态分布。

1. Bayes准则:寻求一种判别规则,使得属于第k类的样品在第k类中取得最大的后验概率。

基于以上准则,假定已知个体分为g类,各类出现的先验概率为P(Yk),且各类均近似服从多元正态分布,当各类的协方差阵相等时,可获得由m个指标建立的g个线性判别函数Y1,Y2,…,Yg,分别表示属于各类的判别函数值:

其中Cjk即为判别系数,通过合并协方差阵代入即可计算得各个指标的判别系数,而C0k中则加以考虑了先验概率P(Yk):

2. 先验概率的确定:若未知各类的先验概率时,一般可用:

(1)等概率(先验无知):P(Yk)= 1/g(all groups equal)。

(2)频率:P(Yk)= nk/N (当样本较大且无选择偏倚时用,compute from sample size)

3. 判别规则:

(1)计算样品属于各类的判别函数值,把对象判别为Y值最大的类。

(2)根据所得Y值,我们亦可以进一步计算属于k类的后验概率,再将对象判给后验概率最大的一类。

以上两种判别规则的结果是完全一致的。

函数介绍

实现Bayes判别可以调用程序包klaR中NaiveBayes()函数,其调用格式为:

NaiveBayes(x,grouping,prior,usekernel =FALSE,fL = 0, ...)

复制

x为训练样本的矩阵或数据框,grouping表示训练样本的分类情况,prior可为各个类别指定先验概率,默认情况下用各个类别的样本比例作为先验概率,usekernel指定密度估计的方法,默认情况下使用标准的密度估计,设为TRUE时,则使用核密度估计方法;fL指定是否进行拉普拉斯修正,默认情况下不对数据进行修正,当数据量较小时,可以设置该参数为1,即进行拉普拉斯修正。

例子:利用Iris数据集进行Bayes判别

>install.packages("klaR")

>X<-iris[1:100,1:4]

>G<-as.factor(gl(2,50))

>library(klaR)

>x<-NaiveBayes(X,G)

>predict(x)

$class

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54

1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2

55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72

2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2

73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90

2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2

91 92 93 94 95 96 97 98 99 100

2 2 2 2 2 2 2 2 2 2

复制

由分析结果可知,根据已知分类的训练样品建立的判别规则,出现了0个样本错判,回代的判别正确率为100%。

来源 | 雪晴数据网

利用机器学习可以很方便的做情感分析。本篇文章将介绍在R语言中如何利用机器学习方法来做情感分析。在R语言中,由Timothy P.Jurka开发的情感分析以及更一般的文本挖掘包已经得到了很好的发展。你可以查看下sentiment包以及梦幻般的RTextTools包。实际上,Timothy还写了一个针对低内存下多元Logistic回归(也称最大熵)的R包maxtent。

然而,RTextTools包中不包含朴素贝叶斯方法。e1071包可以很好的执行朴素贝叶斯方法。e1071是TU Wien(维也纳科技大学)统计系的一门课程。这个包的主要开发者是David Meyer。

我们仍然有必要了解文本分析方面的知识。用R语言来处理文本分析已经是公认的事实(详见R语言中的自然语言处理)。tm包算是其中成功的一部分:它是R语言在文本挖掘应用中的一个框架。它在文本清洗(词干提取,删除停用词等)以及将文本转换为词条-文档矩阵(dtm)方面做得很好。这里是对它的一个介绍。文本分析最重要的部分就是得到每个文档的特征向量,其中词语特征最重要的。当然,你也可以将单个词语特征扩展为双词组,三连词,n-连词等。在本篇文章,我们以单个词语特征为例做演示。

注意,在R中用ngram包来处理n-连词。在过去,Rweka包提供了函数来处理它,感兴趣的可以查看这个案例。现在,你可以设置RTextTools包中create_matrix函数的参数ngramLength来实现它。

第一步是读取数据:

创建词条-文档矩阵:

现在,我们可以用这个数据集来训练朴素贝叶斯模型。注意,e1071要求响应变量是数值型或因子型的。我们用下面的方法将字符串型数据转换成因子型:

测试结果准确度:

显然,这个结果跟python得到的结果是相同的(这篇文章是用python得到的结果)。

其它机器学习方法怎样呢?

下面我们使用RTextTools包来处理它。

首先,指定相应的数据:

其次,用多种机器学习算法训练模型:

现在,我们可以使用训练过的模型做测试集分类:

准确性如何呢?

得到模型的结果摘要(特别是结果的有效性):

结果的交叉验证:

结果可在我的Rpub页面找到。可以看到,maxent的准确性跟朴素贝叶斯是一样的,其它方法的结果准确性更差。这是可以理解的,因为我们给的是一个非常小的数据集。扩大训练集后,利用更复杂的方法我们对推文做的情感分析可以得到一个更好的结果。示例演示如下:

推文情感分析

数据来自victornep。victorneo展示的是用python对推文做情感分析。这里,我们用R来处理它:

读取数据:

首先,尝试下朴素贝叶斯

然后,尝试其他方法:

这里,我们也希望得到正式的测试结果。包括:

1.analytics@algorithm_summary:包括精确度,召回率,准确率,F-scores的摘要

2.analytics@label_summary:类标签摘要

3.analytics@document_summary:所有数据和得分的原摘要

4.analytics@ensemble_summary:所有 精确度/覆盖度 比值的摘要

现在让我们看看结果:

与朴素贝叶斯方法相比,其它算法的结果更好,召回精度高于0.95。结果可在Rpub查看

原文链接:http://www.xueqing.cc/cms/article/107