这里的p(y=1|x)计算基于朴素贝叶斯模型(周志华老师机器学习书上说的p(xi|y=1)=|Dc,xi|/|Dc|)

也可以基于文本分类的事件模型

见http://blog.csdn.net/app_12062011/article/details/50540429有详细介绍

代码是机器学习实战所呈现的那种方式。。。。。。

# -*- coding: utf-8 -*-
"""
Created on Mon Aug 07 23:40:13 2017 @author: mdz
"""
import numpy as np
def loadData():
vocabList=[['fuck', 'dog', 'has', 'flea', 'problems', 'help', 'please'],
['maybe', 'not', 'take', 'him', 'to', 'dog', 'park', 'stupid'],
['my', 'dalmation', 'is', 'so', 'cute', 'I', 'love', 'him'],
['stop', 'posting', 'stupid', 'worthless', 'garbage'],
['mr', 'licks', 'ate', 'my', 'steak', 'how', 'to', 'stop', 'him'],
['quit', 'buying', 'worthless', 'dog', 'food', 'stupid']]
classList=[1,1,0,1,0,1]#1 侮辱性文字,0 正常言论
return vocabList,classList #对vocabList已经拆分过的句子进行筛选,筛选掉重复的单词,最后再返回list
#该list的length即属性的个数
def filterVocabList(vocabList):
vocabSet=set([])
for document in vocabList:
vocabSet=vocabSet|set(document)
return list(vocabSet) #对测试样本进行0-1处理
def zero_one(vocabList,input):
returnVec=[0]*len(vocabList)
for word in input:
if word in vocabList:
returnVec[vocabList.index(word)]=1
else:
print "the word: %s is not in my Vocabulary!"%word
return returnVec def trainNbc(trainSamples,trainCategory):
numTrainSamp=len(trainSamples)
numWords=len(trainSamples[0])
pAbusive=sum(trainCategory)/float(numTrainSamp)
#y=1 or 0下的特征取值为1
p0Num=np.ones(numWords)
p1Num=np.ones(numWords)
#y=1 or 0下的样本计数
p0NumTotal=2.0#每个特征可能的取值2种情况
p1NumTotal=2.0
for i in range(numTrainSamp):
if trainCategory[i]==1:
p1Num+=trainSamples[i]
p1NumTotal+=1
else:
p0Num+=trainSamples[i]
p0NumTotal+=1
p1Vec=p1Num/float(p1NumTotal)
p0Vec=p0Num/float(p0NumTotal)
return p1Vec,p0Vec,pAbusive def classifyOfNbc(testSamples,p1Vec,p0Vec,pAbusive):
p1=sum(testSamples*np.log(p1Vec))+sum((1-testSamples)*np.log(1-p1Vec))+np.log(pAbusive)
p0=sum(testSamples*np.log(p0Vec))+sum((1-testSamples)*np.log(1-p0Vec))+np.log(pAbusive)
if p1>p0:
return 1
else:
return 0
def testingNbc():
vocabList,classList=loadData()
vocabSet=filterVocabList(vocabList)
trainList=[]
for term in vocabList:
trainList.append(zero_one(vocabSet,term))
p1Vec,p0Vec,pAbusive=trainNbc(np.array(trainList),np.array(classList))
testEntry=['fuck','my','daughter']
testSamples=np.array(zero_one(vocabSet,testEntry))
print testEntry,'classified as :',classifyOfNbc(testSamples,p1Vec,p0Vec,pAbusive)
testEntry=['stupid','garbage']
testSamples=np.array(zero_one(vocabSet,testEntry))
print testEntry,'classified as :',classifyOfNbc(testSamples,p1Vec,p0Vec,pAbusive) '''上述代码存为bayesClassify.py''' '''控制台输入 :>>>import bayesClassify >>>bayesClassify.testingNbc() '''输出结果: the word: daughter is not in my Vocabulary!
['fuck', 'my', 'daughter'] classified as : 1
['stupid', 'garbage'] classified as : 1 '''
  

  

NBC朴素贝叶斯分类器 ————机器学习实战 python代码的更多相关文章

  1. 朴素贝叶斯分类算法介绍及python代码实现案例

    朴素贝叶斯分类算法 1.朴素贝叶斯分类算法原理 1.1.概述 贝叶斯分类算法是一大类分类算法的总称 贝叶斯分类算法以样本可能属于某类的概率来作为分类依据 朴素贝叶斯分类算法是贝叶斯分类算法中最简单的一 ...

  2. (数据科学学习手札30)朴素贝叶斯分类器的原理详解&Python与R实现

    一.简介 要介绍朴素贝叶斯(naive bayes)分类器,就不得不先介绍贝叶斯决策论的相关理论: 贝叶斯决策论(bayesian decision theory)是概率框架下实施决策的基本方法.对分 ...

  3. 机器学习---朴素贝叶斯分类器(Machine Learning Naive Bayes Classifier)

    朴素贝叶斯分类器是一组简单快速的分类算法.网上已经有很多文章介绍,比如这篇写得比较好:https://blog.csdn.net/sinat_36246371/article/details/6014 ...

  4. 朴素贝叶斯分类器及Python实现

    贝叶斯定理 贝叶斯定理是通过对观测值概率分布的主观判断(即先验概率)进行修正的定理,在概率论中具有重要地位. 先验概率分布(边缘概率)是指基于主观判断而非样本分布的概率分布,后验概率(条件概率)是根据 ...

  5. 用scikit-learn实现朴素贝叶斯分类器 转

    原文:http://segmentfault.com/a/1190000002472791 朴素贝叶斯(Naive Bayes Classifier)是一种「天真」的算法(假定所有特征发生概率是独立的 ...

  6. 朴素贝叶斯分类器(Naive Bayes)

    1. 贝叶斯定理 如果有两个事件,事件A和事件B.已知事件A发生的概率为p(A),事件B发生的概率为P(B),事件A发生的前提下.事件B发生的概率为p(B|A),事件B发生的前提下.事件A发生的概率为 ...

  7. OpenCV实现朴素贝叶斯分类器诊断病情

    贝叶斯定理由英国数学家托马斯.贝叶斯(Thomas Baves)在1763提出,因此得名贝叶斯定理.贝叶斯定理也称贝叶斯推理,是关于随机事件的条件概率的一则定理. 对于两个事件A和B,事件A发生则B也 ...

  8. 数据挖掘十大经典算法(9) 朴素贝叶斯分类器 Naive Bayes

    贝叶斯分类器 贝叶斯分类器的分类原理是通过某对象的先验概率,利用贝叶斯公式计算出其后验概率,即该对象属于某一类的概率,选择具有最大后验概率的类作为该对象所属的类.眼下研究较多的贝叶斯分类器主要有四种, ...

  9. 十大经典数据挖掘算法(9) 朴素贝叶斯分类器 Naive Bayes

    贝叶斯分类器 贝叶斯分类分类原则是一个对象的通过先验概率.贝叶斯后验概率公式后计算,也就是说,该对象属于一类的概率.选择具有最大后验概率的类作为对象的类属.现在更多的研究贝叶斯分类器,有四个,每间:N ...

随机推荐

  1. token登录流程

    1.token生成规则: private static $nameKey = array( 'readerid' => 0, //客户号 'ubuntu' => 1, //登录令牌 'pt ...

  2. P1368 工艺 SA/最小表示法

    正解:SA/最小表示法 解题报告: 传送门! 听说正解是最小表示法,,,O(n)然后常数还挺小的,,, 但是我不会QAQ! 所以先写下SA的做法趴,,,等get了最小表示法再来写正解QAQ 就这种题算 ...

  3. BPDU报文(传统STP)

    BPDU字段包含的信息: Protocol ID 协议ID Version STP版本(三种) STP(802.1D)传统生成树 值为0 RSTP(.1W)快速生成树 值为2 MSTP(.1S)多生成 ...

  4. python numpy库的基本内容

    import numpy as np np.getfromtxt("路径",delimiter = "," ,dtype = str)  #读取txt文件数据 ...

  5. 【托业】【全真题库】TEST1-语法题

    TEST01 103. delivery date 交货日期 delivery n.传送,投递; [法](正式)交付; 分娩; 讲演; 104. net revenue 净收入,纯收入 105. re ...

  6. webpack入门操作教程

    1. webpack介绍 在传统的项目中,一个html文件可能会加载多个js.css文件,如果多人协同开发的话,就会出现全局变量被污染.文件直接的依赖问题 而webpack打包工具,会先分析入口文件的 ...

  7. Oracle数据库自带表或者视图

    dba_开头 dba_users 数据库用户信息 dba_segments 表段信息 dba_extents 数据区信息 dba_objects 数据库对象信息 dba_tablespaces 数据库 ...

  8. HTTP权威指南_Note

    Chapter 1 HTTP概述 1. Web客户端和Web服务器 web服务器即为HTTP服务器 Web浏览器属于客户端 Web浏览器向服务器请求HTTP对象 2. 资源 Web服务器是Web资源的 ...

  9. principal(括号匹配+多组查询)

    题目传送门: 把所有括号相匹配的段直接预处理出来就行了 #include <bits/stdc++.h> using namespace std; #define ll long long ...

  10. centos7基于SVN+Apache+IF.svnadmin实现SVN的web管理

    一.介绍 本文介绍的是CentOS7上搭建基于Apache.SVN Server.iF.svnadmin实现web后台可视化管理SVN. iF.SVNAdmin应用程序是Subversion授权文件基 ...