朴素贝叶斯分类算法Python代码

原创 2018年04月16日 19:55:47

贝叶斯分类器就是求P(C|F1F2...Fn) = P(F1F2...Fn|C)P(C) / P(F1F2...Fn) 最大值,由于 P(F1F2...Fn) 对于所有的类别都是相同的,可以省略,问题就变成了求 P(F1F2...Fn|C)P(C) 的最大值。 

朴素贝叶斯分类器则是更进一步,假设所有特征都彼此独立,因此P(F1F2...Fn|C)P(C)= P(F1|C)P(F2|C) ... P(Fn|C)P(C)

朴素贝叶斯算法进行分类,是根据朴素贝叶斯公式分别计算测试数据为类别0,类别1,类别2...的概率,假如计算得出类别i概率高,就可以说测试数据属于类别i的概率最大,把测试数据归到类别i,达到分类的目的。

封装在类里,方便以后使用。

import numpy
class Bayes: 
    def __init__(self):      
        self.length=-1   #用来判断是否训练过    
        self.labelcount=dict()  #字典类型{label:频数...}  
        self.vectorcount=dict() #字典类型{label:vector...}
    #训练数据
    #dataset是二维列表,格式[[],[]...],每一行是属于某一个label,labels是一维列表
    def fit(self,dataset:list,labels:list):       
        if(len(dataset)!=len(labels)):            
            raise ValueError("输入数组与类别数组长度不同")       
        #训练数据特征值长度       
        self.length=len(dataset[0])
        labelsnum=len(labels)
        #set去掉重复label
        norlabels=set(labels)        
        for item in norlabels:           
            thislabel=item
            #计算当前类别占总数的比例
            labelcount[]=labels.count(thislabel)/labelsnum
            #zip()整合dataset和labels
        for vector,label in zip(dataset,labels):
            if(label not in vectorcount):                    
                self.vectorcount[label]=[]
                #往当前类别下添加向量
            self.vectorcount[label].append(vector)
        print("训练结束")
        return self
    #测试
    def btest(self,testdata,labelsset):        
        if(self.length==-1):            
            raise ValueError("未进行训练")        
        lbdict=dict()        
        for thislb in labelsset:            
            p=1            
            alllabel=self.labelcount[thislb]  #当前label占总label的比例          
            allvector=self.vectorcount[thislb]        #属于当前label下的所有向量    
            vnum=len(allvector)            
            allvector=numpy.array(allvector).T           
             for index in range(0,len(testdata)):     #一个一个计算测试数据的概率           
                vector=list(allvector[index])                
                p*=vector.count(testdata[index])/vnum               
            lbdict[thislb]=p*alllabel
        thislabel=sorted(lbdict,key=lamba x:lbdict[x],reverse=True)[0]#按照lbdict[x]排降序
        return thislabel

机器学习疯狂入门(2):朴素贝叶斯文本分类

1、本课程主要环境基于python3.6和sklearn。请大家准备好这两个环境的安装。 2、本课程从属于正在录制的《机器学习入门系列》,本篇是第2篇:朴素贝叶斯文本分类。本课程中会涉及到一些数学算法和使用工具。先教大家怎么使用和简单触碰原理。很快后续会有针对这些特定数学基础和工具的精讲课程开设。 3、本课程特别适合web程序员想要快速入门机器学习的同学
  • 2018年03月09日 20:52

《机器学习实战》基于朴素贝叶斯分类算法构建文本分类器的Python实现

关于朴素贝叶斯分类算法的理解请参考:http://blog.csdn.net/gamer_gyt/article/details/47205371 Python代码实现: #encoding:ut...
  • Gamer_gyt
  • Gamer_gyt
  • 2015-08-22 17:05:39
  • 4752

朴素贝叶斯文本分类(python代码实现)

朴素贝叶斯(naive bayes)法是基于贝叶斯定理与特征条件独立假设的分类方法。 优点:在数据较少的情况下仍然有效,可以处理多分类问题。 缺点:对入输入数据的准备方式较为敏感。 使用数据类型:标称...
  • csqazwsxedc
  • csqazwsxedc
  • 2017-04-07 00:02:48
  • 5258

朴素贝叶斯分类文本 python实现

朴素贝叶斯(naive bayes)模型主要用于文本分类,比如要将邮件分类为正常邮件和带侮辱性词汇邮件 对于一封邮件来说其特征可以表示为该邮件中单词出现的情况。 比如我们有一个5000个词的词典表,那...
  • qq547276542
  • qq547276542
  • 2017-04-27 22:10:05
  • 3592

朴素贝叶斯分类算法(Naive Bayesian classification)

机器学习(分类算法) and 十大算法:朴素贝叶斯分类 0、写在前面的话       我个人一直很喜欢算法一类的东西,在我看来算法是人类智慧的精华,其中蕴含着无与伦比的美感。而每次将学过的算法...
  • Gamer_gyt
  • Gamer_gyt
  • 2015-08-02 11:04:46
  • 4063

朴素贝叶斯文本分类算法java实现

在学习了朴素贝叶斯的概念后,下来我们来看看它的java实现。 有一个网友已经实现了其java的算法,具体详见: 数据挖掘-基于贝叶斯算法及KNN算法的newsgroup18828文本分类器...
  • endless_yy
  • endless_yy
  • 2013-09-22 12:18:21
  • 2326

【JAVA实现】朴素贝叶斯分类算法

之前博客提到的KNN算法以及决策树算法都是要求分类器给出“该数据实例属于哪一类”这类问题的明确答案,正因为如此,才出现了使用决策树分类时,有时无法判定某一测试实例属于哪一类别。使用朴素贝叶斯算法则可以...
  • C_son
  • C_son
  • 2015-03-13 17:12:38
  • 4382

java实现朴素贝叶斯分类算法

现在是大数据时代,海量数据影响着我们生活的方方面面。生活在当今时代的攻城狮,多多少少要对这个有点了解,不然就显得逼格不够高哈。大数据处理中最常用就是对数据进行分类,统计,关联分析等。这篇博客介绍下朴素...
  • u014486880
  • u014486880
  • 2015-11-24 21:07:43
  • 5270

朴素贝叶斯分类算法理解及文本分类器实现

贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。本文作为分类算法的第一篇,将首先介绍分类问题,对分类问题进行一个正式的定义。然后,介绍贝叶斯分类算法的基础——贝叶斯定...
  • levy_cui
  • levy_cui
  • 2017-04-01 17:04:45
  • 607

机器学习之基于朴素贝叶斯文本分类算法

原理 在分类(classification)问题中,常常需要把一个事物分到某个类别。一个事物具有很多属性,把它的众多属性看做一个向量,即x=(x1,x2,x3,…,xn),用x这个向量来代表这个...
  • lming_08
  • lming_08
  • 2014-07-08 00:15:02
  • 2599
收藏助手
不良信息举报
您举报文章:朴素贝叶斯分类算法Python代码
举报原因:
原因补充:

(最多只允许输入30个字)