NBC朴素贝叶斯分类器 ————机器学习实战 python代码
这里的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代码的更多相关文章
- 朴素贝叶斯分类算法介绍及python代码实现案例
朴素贝叶斯分类算法 1.朴素贝叶斯分类算法原理 1.1.概述 贝叶斯分类算法是一大类分类算法的总称 贝叶斯分类算法以样本可能属于某类的概率来作为分类依据 朴素贝叶斯分类算法是贝叶斯分类算法中最简单的一 ...
- (数据科学学习手札30)朴素贝叶斯分类器的原理详解&Python与R实现
一.简介 要介绍朴素贝叶斯(naive bayes)分类器,就不得不先介绍贝叶斯决策论的相关理论: 贝叶斯决策论(bayesian decision theory)是概率框架下实施决策的基本方法.对分 ...
- 机器学习---朴素贝叶斯分类器(Machine Learning Naive Bayes Classifier)
朴素贝叶斯分类器是一组简单快速的分类算法.网上已经有很多文章介绍,比如这篇写得比较好:https://blog.csdn.net/sinat_36246371/article/details/6014 ...
- 朴素贝叶斯分类器及Python实现
贝叶斯定理 贝叶斯定理是通过对观测值概率分布的主观判断(即先验概率)进行修正的定理,在概率论中具有重要地位. 先验概率分布(边缘概率)是指基于主观判断而非样本分布的概率分布,后验概率(条件概率)是根据 ...
- 用scikit-learn实现朴素贝叶斯分类器 转
原文:http://segmentfault.com/a/1190000002472791 朴素贝叶斯(Naive Bayes Classifier)是一种「天真」的算法(假定所有特征发生概率是独立的 ...
- 朴素贝叶斯分类器(Naive Bayes)
1. 贝叶斯定理 如果有两个事件,事件A和事件B.已知事件A发生的概率为p(A),事件B发生的概率为P(B),事件A发生的前提下.事件B发生的概率为p(B|A),事件B发生的前提下.事件A发生的概率为 ...
- OpenCV实现朴素贝叶斯分类器诊断病情
贝叶斯定理由英国数学家托马斯.贝叶斯(Thomas Baves)在1763提出,因此得名贝叶斯定理.贝叶斯定理也称贝叶斯推理,是关于随机事件的条件概率的一则定理. 对于两个事件A和B,事件A发生则B也 ...
- 数据挖掘十大经典算法(9) 朴素贝叶斯分类器 Naive Bayes
贝叶斯分类器 贝叶斯分类器的分类原理是通过某对象的先验概率,利用贝叶斯公式计算出其后验概率,即该对象属于某一类的概率,选择具有最大后验概率的类作为该对象所属的类.眼下研究较多的贝叶斯分类器主要有四种, ...
- 十大经典数据挖掘算法(9) 朴素贝叶斯分类器 Naive Bayes
贝叶斯分类器 贝叶斯分类分类原则是一个对象的通过先验概率.贝叶斯后验概率公式后计算,也就是说,该对象属于一类的概率.选择具有最大后验概率的类作为对象的类属.现在更多的研究贝叶斯分类器,有四个,每间:N ...
随机推荐
- 洛谷P4051 字符加密 [JSOI2007] SA
正解:SA 解题报告: 传送门! 和工艺那题有点儿像鸭,,,反正肯定就都想到倍长然后SA拍个序嘛先 然后就做完了,,,我发现SA的题刷起来特别susi,,,基本上紫题级别的都just一个模板就欧克了最 ...
- FindVisualChild
public static List<T> FindVisualChild<T>(DependencyObject obj) where T : DependencyObjec ...
- linux touch命令 创建文件
touch 创建文件,用法,touch test.txt,如果文件存在,则表示修改当前文件时间 [root@MongoDB ~]# touch /data/text.txt [root@MongoDB ...
- MySQL中实现连续日期内数据统计,缺省天数0补全
某一日,需要查询订单表中一个月每天的金额数 查询出数据如下: array(14) { [0] => array(2) { ["money"] => string(7) ...
- 让我怀疑人生的bug集合
bug1:一个人人都知道全局变量易污染,但是我就是污染不了的问题 解决:刚开始动用了session来存这个值,后来觉得太小题大做了,最后使用了闭包来解决,第一个function结束后开启第二个,起初没 ...
- ESP8266清理flash学习记录
学习来源:http://bbs.eeworld.com.cn/thread-497588-1-1.html 还稍看了电子产品世界 主要内容 1在windows 上通过 命令行 安装 Python环境 ...
- nginx----------前端写了一套带有vue路由的的功能。放到nginx配置的目录下以后,刷新会报404未找到。
1. 这是根据实际情况来写的. location /h5/activity/wechat/ { index index.html index.htm index.php; ...
- MYSQL.版本查看-LINUX
MYSQL.版本查看-LINUX 方式1: 不需登录mysql,登录Linux服务后,执行如下指令: # mysql -V 注意: 那个是大写的V,如果使用小写的v,在root没有设置密码的情况下,就 ...
- iOS 如何在自定义类中支持 "[]" 运算符
在相应类中实现如下协议即可. 1.字典类 - (id)objectForKeyedSubscript:(NSObject <NSCopying> *)key; - (void)setObj ...
- postergresql允许其它主机远程连接
1.pg_hba.conf中添加listen_addresses = '*' #vim /usr/local/postgresql/data/pg_hba.conf #listen_addresses ...