zoukankan      html  css  js  c++  java
  • 朴素贝叶斯

    朴素贝叶斯法:对于给定训练集,首先基于特征条件独立假设学习 输入输出的联合分布,然后基于此模型,对给定的x,利用贝叶斯定理求出后验概率最大的输出y。

    我理解为假设各项特征相互独立,计算该特征分别在两个类别中出现的概率。待分类样本有多个特征,分别计算这些特征在每个类别出现概率之积,那个乘积大,该样本被分为此类别的概率即为最大

    几个重要的公式:

    具体方法:

    关键代码:

     1 def trainNB0(trainMatrix, trainCategory):  #首要先将构造出训练数据集,将单词转换成频率相关的数组,此段代码忽略该过程
     2     numTrainDocs = len(trainMatrix)
     3     numWords = len(trainMatrix[0])
     4     pAbusive = sum(trainCategory) / float(numTrainDocs)  
     5     p0Num = ones(numWords);  #两类词组分别出现的概率向量组
     6     p1Num = ones(numWords)  # change to ones()
     7     p0Denom = 2.0;                
     8     p1Denom = 2.0  # change to 2.0
     9     for i in range(numTrainDocs):    #分别计算某单词的先验概率,即分别在两类中出现的概率
    10         if trainCategory[i] == 1:
    11             p1Num += trainMatrix[i]
    12             p1Denom += sum(trainMatrix[i])
    13         else:
    14             p0Num += trainMatrix[i]
    15             p0Denom += sum(trainMatrix[i])
    16     p1Vect = log(p1Num / p1Denom)  # change to log()
    17     p0Vect = log(p0Num / p0Denom)  # change to log()
    18     return p0Vect, p1Vect, pAbusive #返回某单词在两个类别出现的概率

    上式概率计算部分关键代码处理完毕。

    对于sklearn包,相应的API为GaussianNB,高斯朴素贝叶斯,MultinomialNB,多项式朴素贝叶斯,BernoulliNB伯努利朴素贝叶斯方法。同时要学会该包中将单词转换为数字标记的方法,TF-IDF。学会这几个API接口与基本就能使用该方法了

  • 相关阅读:
    Leetcode 50.Pow(x,n) By Python
    Leetcode 347.前K个高频元素 By Python
    Leetcode 414.Fizz Buzz By Python
    Leetcode 237.删除链表中的节点 By Python
    Leetcode 20.有效的括号 By Python
    Leetcode 70.爬楼梯 By Python
    Leetcode 190.颠倒二进制位 By Python
    团体程序设计天梯赛 L1-034. 点赞
    Wannafly挑战赛9 C-列一列
    TZOJ Start
  • 原文地址:https://www.cnblogs.com/the-home-of-123/p/9174260.html
Copyright © 2011-2022 走看看