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 ...
随机推荐
- SharePoint使用jsom查询当前用户信息
前置环境:sharepoint 'use strict'; var context = SP.ClientContext.get_current(); var user = context.get_w ...
- VUE-005-axios常用请求参数设置方法
在前后端分离的开发过程中,经常使用 axios 进行后端接口的访问. 个人习惯常用的请求参数设置方法如下所示: // POST方法:data在请求体中 addRow(data) { return th ...
- [vue开发记录]全局loading组件
上图不上种,菊花万人捅: loading.js: import './loading.css' let Loading = {} // 避免重复install,设立flag Loading.insta ...
- win7 64位系统下安装autoitlibrary库遇到问题解决
转载来自http://blog.sina.com.cn/s/blog_53f023270101skyq.html 今天需要在win7 64位系统下安装autoitlibrary库,起初安装好了robo ...
- python基础之 time,datetime,collections
1.time模块 python中的time和datetime模块是时间方面的模块 time模块中时间表现的格式主要有三种: 1.timestamp:时间戳,时间戳表示的是从1970年1月1日00:00 ...
- ORA-27104: system-defined limits for shared memory was misconfigured与Linux内核参数配置有关的案例
```[oracle@WWJD01 ~]$ sqlplus / as sysdba SQL*Plus: Release 12.2.0.1.0 Production on Fri Sep 21 15:1 ...
- OOA/OOD/OOP
转载自https://www.cnblogs.com/zzyoucan/p/3576932.html Object-Oriented Analysis:面向对象分析方法 是在一个系统的开发过程中进行了 ...
- Lintcode: Knight Shortest Path
Given a knight in a chessboard (a binary matrix with 0 as empty and 1 as barrier) with a source posi ...
- CarbonData-1:common
最近公司需要对CarbonData进一步应用,或许封装进产品,或许是为了解析CarbonData元数据,于是开始预研CarbonData,下面将保持每天一篇以上的阅读CarbonData源码博客,由于 ...
- React组件绑定this的三种方法
我们在使用React组件时,调用方法常常用到this和event对象,默认情况是不会绑定到组件上的,需要特殊处理. 节点上使用bind绑定 特点:该方法会在每次渲染组件时都会重新绑定一次,消耗一定的性 ...