自定义实现朴素贝叶斯

一. 朴素贝叶斯

  朴素贝叶斯中的朴素一词的来源就是假设各特征之间相互独立。这一假设使得朴素贝叶斯算法变得简单,但有时会牺牲一定的分类准确率。
首先给出贝叶斯公式:P(A|B)=(P(B|A)/P(A)*P(B)
可以先记住这个公式,后面会在实际的情况下做具体解释的,先根据如下的数据集做两个题目练习下
  1. 随机选择一个人是both的概率是多少? ===> P(both)=5/10=1/2
  2. 在购买类别i001上午类别下选择理由是both的概率是多少? =====> 算出可以和下面的结果去比较
  3. 思考:当某人的主要兴趣是健康,当前的锻炼级别适中,动机中等,习惯于技术设备,那么如何利用朴素贝叶斯的方法推荐给他

在这里插入图片描述
现在我们主要就问题2来分析一下这个模型如何建立,但是在了解之前还是要先知道朴素贝叶斯是如何进行预测做简单说明,我先看第一个列Main Interest如何划分类别的,现在这个类中有很多特征现在我给定的预测值是both,现在我就只要循环要分类的种类,分别计算P(both|i001),P(both|i500)这两个的条件概率,比较这两个条件概率的大小,那个大我就把both归为那个结果。
现在我们来看问题2:当购买i001下的爱好是both的概率,
我们可以先求出i001出现的次数,可以用一个字典将其存好,格式是classes==>{i001:次数,i500:次数},然后我们要求出在i001的栏目下面出现both的次数 ,我们可以这么设计 counts==>{ i001:列:{“both”:次数}} 这样P(both|i001)=counts.get(i001).get(列).get(both)/classes.get(i001) 我们把这个概率统一为条件概率
现在我们涉及多列,我们可以使用多项式的模型,就是先验概率*每一个列的条件概率 累乘
我们再来看目标 我们要根据both来预测哪一个类别 P(i001|both),根据公式,我们还要求出 P(i001)的概率,所以我们要计算整个项目的条数total,所以P(i001)=classes.get(“i001”)/total,我们将其看成是先验概率
现在我们可以来根据这个来写代码了,我会对代码做很详细的解释

class MyNaiveBayesClassifier():
    #filename文件名         dataForamt文件格式 attr attr attr attr class 主要是要区分哪一个是类别
    def __init__(self,filename,dataFormat):
        total=0 #类别总数
        #格式为 {i001:次数,"i500":次数} 先验概率和条件概率的计算都离不开它
        classes={
   } 
        #格式为 {'i001':列:{appearance:次数,both:次数}} 
        counts={
   }
        #P(i001)=classes.get('i001')/total
        self.prior={
   }#先验概率
         #用来计算条件概率 P(both|i001)=counts.get(i001).get(列).get(both)/classes.get(i001) 
        self.condition={
   } #条件概率 
        self.format=dataFormat.strip().split("\t") #解析格式
        
        #读文件
        f=open(filename,'r',encoding="utf8")
        lines=f.readlines()#读取到文件 一行一行的读
        f.close()
        
        #循环每一行数据
        for line in lines:
            total=total+1#统计总数
            fields=line.strip().split('\t') #一行中的每一列
            vector=[<
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值