《机器学习实战》基于概率论的分类方法:朴素贝叶斯

朴素贝叶斯是贝叶斯系列算法中应用最广的方法,贝叶斯方法最早由应该统计学家Thomas Bayes提出,其实简单的理解的话就是根据已经发生的某些情况来确定某事件发生的概率,而朴素贝叶斯的“朴素”指的是假设样本的所有特征都独立。核心公式理解简单了就是条件概率公式:
P(A|B)=P(B|A)*PA/P(B)=P(AB)/P(B)
由于前面已经写过朴素贝叶斯(https://blog.csdn.net/cxjoker/article/details/78472376)、半朴素贝叶斯(https://blog.csdn.net/cxjoker/article/details/81878037)和贝叶斯网络(https://blog.csdn.net/cxjoker/article/details/81878188)了,所以就不细讲述,有兴趣的可以去看。所以这一节直接从《机器学习实战》的4.5节开始吧。
使用python进行文本分类
数据准备阶段比较简单,其实就是用了自然语言处理上面的One-Hot方法,就是先建立一个词集(createvocablist)包含所有在现有的文本中出现的单词,如果有新的句子加入,就将该句话中出现的新词加入到词袋中。然后对一句话生成它的词向量(bagofwords2vecmn),即当该句话中出现过某个词时,向量上就取1,为出现就是0,向量和词集一样长。这是自然语言处理常用的方法,但是同时也会出现该句话的向量过于稀疏的情况。
训练函数:
主要用到了朴素贝叶斯公式,根据特征独立假设(即所有词之间是独立的),直接计算p(w0|ci)p(w1|ci)p(w2|ci)…p(wN|ci),然后获得p(ci|w),比较哪个类别的概率大,然后直接将类别概率大的作为分类结果。
代码思想:

  1. 计算每个类别中的文档数目
  2. 对每篇文档:
    对每个类别:
    如果词条出现在文档中:增加该词条的计数值
    增加所有词条的计数值
  3. 列表内容
    对每个类别:
    对每个词条:
    将该词条的数目初一总词条数目得到条件概率
  4. 返回每个类别的条件概率

    具体代码如下:

def loaddataset():
    postinglist=[['my','dog','has','flae','problem','help','plaese'],
                 ['maybe','not','take','him','to','dog','park','stupid'],
                 ['my','dog','is','so','cute','i','love','him'],
                 ['stop','posting','stupid','worthless','garbage',],
                 ['mr','licks','ate','my','steak','how','to','stop','him'],
                 ['qiut','buying','worthless','dog','food','stupid']]
    classvec=[0,1,0,1,0,1]
    return postinglist,classvec

def createvocablist(dataset):#功能是创建一个不重复的词汇表
    vocabset=set([])#创建出来的是一个集合,
    for document in dataset:
        vocabset =vocabset | set(document)#set(document)不重复的提取出所有的词,并且加入到vocabset集里面去
    return list(vocabset)


def bagofwords2vecmn(vocablist,inputset):#生成分类向量,当所输入的文章中的词在vocablist中出现时,就将其对应的向量设置为1,否则维持原来的不变
    returnvec=[0]*len(vocablist)
    for word in inputset:
        if word in vocablist:
            returnvec[vocablist.index(word)] +=1
    return returnvec





def trainnbo(trainmatrix,traincategory):#输入训练样本和属性(分类)标记
    numtraindocs=len(trainmatrix)#计算训练样本的样本数
    numwords=len(trainmatrix[0])#
    pabusive=sum(traincategory)/float(numtraindocs)#计算p(c)的概率(比重)这里面指的是分类为1的比重,因为求和之后为0的不考虑
    p0num=np.ones(numwords);p1num=np.ones(numwords)
    p0denom=2.0;p1denom=2.0
    for i in range(numtraindocs):
        if traincategory[i]==1:
            p1num +=trainmatrix[i]#如果说归为1类,那么把这个训练样本的向量和原先已有的向量加和,保证了同一位置(表示同一单词)的数量的叠加,起到计数的作用
            p1denom +=sum(trainmatrix[i])
        else:
            p0num +=trainmatrix[i]
            p0denom +=su
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整全套资源下载地址:https://download.csdn.net/download/qq_27595745/66030967 【完整课程列表】 完整版 南京邮电大学 机器学习课程教程PPT课件 1-1.机器学习简介-上课版part1(共31页).ppt 完整版 南京邮电大学 机器学习课程教程PPT课件 1-2 机器学习简介-上课版part2(共55页).ppt 完整版 南京邮电大学 机器学习课程教程PPT课件 2. 概念学习 分类(共27页).ppt 完整版 南京邮电大学 机器学习课程教程PPT课件 3 决策树(共44页).ppt 完整版 南京邮电大学 机器学习课程教程PPT课件 4-1 贝叶斯学习(共18页).ppt 完整版 南京邮电大学 机器学习课程教程PPT课件 5. 神经网络(共42页).ppt 完整版 南京邮电大学 机器学习课程教程PPT课件 6 支持向量机(共29页).ppt 完整版 南京邮电大学 机器学习课程教程PPT课件 7. 基于实例的学习-k近邻(共17页).ppt 完整版 南京邮电大学 机器学习课程教程PPT课件 8-1 模式选择和评估(共30页).pdf 完整版 南京邮电大学 机器学习课程教程PPT课件 8-2 模式选择和评估(共14页).ppt 完整版 南京邮电大学 机器学习课程教程PPT课件 9. 计算学习理论(共26页).ppt 完整版 南京邮电大学 机器学习课程教程PPT课件 10 聚类分析(共74页).ppt 完整版 南京邮电大学 机器学习课程教程PPT课件 12 特征选择(共36页).ppt 完整版 南京邮电大学 机器学习课程教程PPT课件 13 Sparse-SDM10(共133页).pdf 完整版 南京邮电大学 机器学习课程教程PPT课件 14 机器学习总结(共25页).ppt 完整版 南京邮电大学 机器学习课程教程PPT课件 15 Overview of ensemble(共31页).ppt

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值