贝叶斯定理

本文深入解析了贝叶斯定理及其在吸毒者检测中的应用,详细介绍了朴素贝叶斯分类器的工作原理,并通过实例展示了其在文档自动分类中的运用。此外,还提供了使用Python和Spark实现朴素贝叶斯分类器的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

贝叶斯定理:

       P(A,  B) =  P(B,  A)         A, B都发生的概率

      P(A|B)  *  P(B)  = P(B|A) * P(A)

     ===>     P(A|B)  =  P(B|A) * P(A)/P(B)

运用吸毒者检测:

     1. 常规的检测结果的敏感度和可靠度为0.99

     2. 公司全体体检

            已知吸毒者为0.005

     求 检测为阳性真吸毒的概率:   P(吸毒|阳性) ?

       P(吸毒|阳性) = P(阳性|吸毒)*P(吸毒)/P(阳性)

                            = 0.99*0.005/(0.995*0.01+0.005*0.99)

                           = 0.00495/0.0149

                           = 0.33

朴素贝叶斯(NB): 

        朴素在于假设每个特征都是相互独立的。

  运用场景:

        1.  文档的自动分类如邮件,评论.......等

  现在我们为评论做分类:

   label:

             侮辱性       1

             非侮辱性     0

1. 怎么来写朴素贝叶斯代码

   1. 建立总词向量(python set):

      eg: wordlsit = ["a", "b","c", "d"]

   2. 根据训练数据建立侮辱性词向量概率:

           2.1  pb1  j计算整个训练数据 label == 1 的 比例值(除以整个数据大小)

            2.2 numwords   训练数据集中label == 1的总的词条个数

            2.3  计算侮辱词向量:

                  统计的词数值是: p1={"a":10,"b":24, "c":20,"d":0}

                  计算词向量概率(使用log避免小数过多, 以下不是真正的代码):

                            p1_data = log(p1/numwords) 

           最终返回  p1_data, pb1

    3.  建立非侮辱性词向量(由于pb0可以由pb1计算出来,所以可以不返回):

         返回  p0_data 

     4 预测:

         input   输入词向量(已经处理好了)

         input 属于1类的概率:    sum(input* p1_data) + log(pb1)

         input 属于0类的概率:    sum(input* p0_data) + log(1 - pb1)

         比较哪个概率大属于哪个类

pyspark中编程:

from pyspark.mllib.classification import NaiveBayes, NaiveBayesModel
from pyspark.mllib.util import MLUtils
sc = SparkContext(appName="NBModel")
data = MLUtils.loadLibSVMFile(sc, "data/mllib/sample_libsvm_data.txt")
train, test = data.randomSplit([0.8,0.2])
model = NaiveBayes.train(train, 1.0)

#预测
predictionAndLabel = test.map(lambda p: (model.predict(p.features), p.label))
accuracy = 1.0 * predictionAndLabel.filter(lambda pl: pl[0] == pl[1]).count() / test.count()

#保存模型
model.save(sc, "nb/model_data")

#导入模型并预测
smodel = NaiveBayesModel.load(sc, "nb/model_data")
predictionAndLabel = test.map(lambda p: (model.predict(p.features), p.label))
accuracy = 1.0 * predictionAndLabel.filter(lambda pl: pl[0] == pl[1]).count() / test.count()

   在sklearn中naive_bayes 有4种:

from sklearn.naive_bayes import BernoulliNB
from sklearn.naive_bayes import GaussianNB
from sklearn.naive_bayes import MultinomialNB
from sklearn.naive_bayes import ComplementNB

MultinomialNB 运用:

from sklearn.naive_bayes import MultinomialNB
import numpy as np
X = np.random.randint(5, size=(6, 100))
y = np.array([1, 2, 3, 4, 5, 6])
clf = MultinomialNB(alpha=1.0)
clf.fit(X, y)
data = np.random.randint(5, size=(1, 100))
clf.predict(data)
GaussianNB运用:
import numpy as np
X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
Y = np.array([1, 1, 1, 2, 2, 2])
from sklearn.naive_bayes import GaussianNB
clf = GaussianNB()
clf.fit(X, Y)
print(clf.predict([[-0.8, -1]]))

           

                

            

            

      

       

 

 

          

 

      

                                                     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值