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 ...
随机推荐
- 【OJ】抓牛问题
/* 农夫John的奶牛跑路了.将地图视作一条数轴,John的初始位置在s而奶牛的位置在t(0<=s,t<=100000).John可以花费一分钟的时间使自己作如下移动: 1 从点x移动到 ...
- 基础作业 本周没上课,但是请大家不要忘记学习。 本周请大家完成上周挑战作业的第一部分:给定一个整数数组(包含正负数),找到一个具有最大和的子数组,返回其最大的子数组的和。 例如:[1, -2, 3, 10, -4, 7, 2, -5]的最大子数组为[3, 10, -4, 7, 2] 输入: 请建立以自己英文名字命名的txt文件,并输入数组元素数值,元素值之间用逗号分隔。 输出 在不删除原有文件内容
1丶 实验代码 #include<stdio.h> int main(void) { int tt,nn,i,j,c[11][11]; int flag=1; scanf("%d ...
- 迪杰斯特拉(Dijkstra)算法描述及理解
Dijkstra算法是一种计算单源最短无负边路径问题的常用算法之一,时间复杂度为O(n2) 算法描述如下:dis[v]表示s到v的距离,pre[v]为v的前驱结点,用以输出路径,vis[v]表示该点最 ...
- asp.net core 使用NLog记录日志到txt文件
一.使用VisualStudioCode创建一个webapi项目(也可以是mvc等).一个类库(用于封装记录日志方法,当然如果使用依赖注入到控制台项目,就不需要此类库了). 二.在类库中添加NLog. ...
- Push rejected: Push to origin/master was rejected
1.错误日志 : Maven projects need to be imported: Import Changes Enable Auto-Import : files committed: 初始 ...
- 【论文阅读】Deep Mixture of Diverse Experts for Large-Scale Visual Recognition
导读: 本文为论文<Deep Mixture of Diverse Experts for Large-Scale Visual Recognition>的阅读总结.目的是做大规模图像分类 ...
- win10配置java环境变量,解决javac不是内部或外部命令等问题
win10配置java环境变量,解决javac不是内部或外部命令等问题 https://www.cnblogs.com/qianji/p/6402690.html
- Mysql+keepalived双主
搭建环境说明: master1:192.168.175.210 主 master2:192.168.175.211 备 keepalived的vip: 192.168.175.11(注意这是虚拟IP, ...
- 【Docker】-NO.132.Docker.1 -【Docker 修改容器端口】
Style:Mac Series:Java Since:2018-09-10 End:2018-09-10 Total Hours:1 Degree Of Diffculty:5 Degree Of ...
- 用php写一个99乘法表
运行结果如下