# -*- coding: utf-8 -*-
'''
>>> c = Classy()
>>> c.train(['cpu', 'RAM', 'ALU', 'io', 'bridge', 'disk'], 'architecture')
True
>>> c.train(['monitor', 'mouse', 'keyboard', 'microphone', 'headphones'], 'input_devices')
True
>>> c.train(['desk', 'chair', 'cabinet', 'lamp'], 'office furniture')
True
>>> my_office = ['cpu', 'monitor', 'mouse', 'chair']
>>> c.classify(my_office)
('input_devices', -1.0986122886681098)
...
>>> c = Classy()
>>> c.train(['cpu', 'RAM', 'ALU', 'io', 'bridge', 'disk'], 'architecture')
True
>>> c.train(['monitor', 'mouse', 'keyboard', 'microphone', 'headphones'], 'input_devices')
True
>>> c.train(['desk', 'chair', 'cabinet', 'lamp'], 'office furniture')
True
>>> my_office = ['cpu', 'monitor', 'mouse', 'chair']
>>> c.classify(my_office)
('input_devices', -1.0986122886681098)
...
''' from collections import Counter
import math class ClassifierNotTrainedException(Exception): def __str__(self):
return "Classifier is not trained." class Classy(object): def __init__(self):
self.term_count_store = {}
self.data = {
'class_term_count': {},
'beta_priors': {},
'class_doc_count': {},
}
self.total_term_count = 0
self.total_doc_count = 0 def train(self, document_source, class_id): '''
Trains the classifier. '''
count = Counter(document_source)
try:
self.term_count_store[class_id]
except KeyError:
self.term_count_store[class_id] = {}
for term in count:
try:
self.term_count_store[class_id][term] += count[term]
except KeyError:
self.term_count_store[class_id][term] = count[term]
try:
self.data['class_term_count'][class_id] += document_source.__len__()
except KeyError:
self.data['class_term_count'][class_id] = document_source.__len__()
try:
self.data['class_doc_count'][class_id] += 1
except KeyError:
self.data['class_doc_count'][class_id] = 1
self.total_term_count += document_source.__len__()
self.total_doc_count += 1
self.compute_beta_priors()
return True def classify(self, document_input):
if not self.total_doc_count: raise ClassifierNotTrainedException() term_freq_matrix = Counter(document_input)
arg_max_matrix = []
for class_id in self.data['class_doc_count']:
summation = 0
for term in document_input:
try:
conditional_probability = (self.term_count_store[class_id][term] + 1)
conditional_probability = conditional_probability / (self.data['class_term_count'][class_id] + self.total_doc_count)
summation += term_freq_matrix[term] * math.log(conditional_probability)
except KeyError:
break
arg_max = summation + self.data['beta_priors'][class_id]
arg_max_matrix.insert(0, (class_id, arg_max))
arg_max_matrix.sort(key=lambda x:x[1])
return (arg_max_matrix[-1][0], arg_max_matrix[-1][1]) def compute_beta_priors(self):
if not self.total_doc_count: raise ClassifierNotTrainedException() for class_id in self.data['class_doc_count']:
tmp = self.data['class_doc_count'][class_id] / self.total_doc_count
self.data['beta_priors'][class_id] = math.log(tmp)

简单的贝叶斯分类器的python实现的更多相关文章

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

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

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

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

  3. python使用tcp实现一个简单的下载器

    上一篇中介绍了tcp的流程,本篇通过写一个简单的文件下载器程序来巩固之前学的知识. 文件下载器的流程如下: 客户端: 输入目标服务器的ip和port 输入要下载文件的名称 从服务器下载文件保存到本地 ...

  4. 机器学习之路: python 朴素贝叶斯分类器 MultinomialNB 预测新闻类别

    使用python3 学习朴素贝叶斯分类api 设计到字符串提取特征向量 欢迎来到我的git下载源代码: https://github.com/linyi0604/MachineLearning fro ...

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. Oracle数据库运维:要对监听日志文件(listener.log)进行定期清理,如果不定期清理,会遇到下面一些麻烦

    原文链接: http://www.lookdaima.com/WebForms/WebPages/Blanks/Pm/Docs/DocItemDetail.aspx?EmPreviewTypeV=2& ...

  2. 生成器-yield初接触

    什么是生成器? 生成器的实质就是迭代器 在python中有三种方式来获取生成器 1. 通过生成器函数 2. 通过各种推导式实现生成器 3. 通过数据的转换也可以获取生成器 将函数中的return换成y ...

  3. November 5th Week 45th Saturday 2016

    The longest day has an end. 最难过的日子也会有尽头. No, no, no, I can't see the end of such days, of course, if ...

  4. 只要下面看到func() 带括号的,就会弹上去找对应的函数,然后执行相应的函数块

    def func1(): print("呵呵")def func2(): print("呵呵")def func3(): print("呵呵" ...

  5. HttpClient的包含注意事项

    HttpClient 功能介绍 以下列出的是 HttpClient 提供的主要的功能,要知道更多详细的功能可以参见 HttpClient 的主页. 实现了所有 HTTP 的方法(GET,POST,PU ...

  6. 隐马尔可夫(HMM)模型

    隐马尔可夫(HMM)模型 隐马尔可夫模型,是一种概率图模型,一种著名的有向图模型,一种判别式模型.主要用于时许数据建模,在语音识别.自然语言处理等领域广泛应用. 概率图模型分为两类,一类:使用有向无环 ...

  7. Caused by: org.apache.velocity.exception.MethodInvocationException: Invocation of method 'getUser' in class org.uncommons.reportng.ReportMetadata threw exception class java.net.UnknownHostException :

    Running TestSuite [TestNG] [WARN] Ignoring duplicate listener : org.uncommons.reportng.HTMLReporter ...

  8. Spring Cloud和Dubbo整合开发笔记(1)

    一.需求背景: 公司内部老项目微服务技术栈使用Dubbo, 新项目技术栈使用主流的Spring Cloud相关组件开发,新旧项目涉及交互调用,无法直接通信数据传递. 老项目基于Dubbo,重构代码升级 ...

  9. 使用CoreAnimation 实现相机拍摄照片之后动画效果

    废话不多说,先看上效果,由于动画录制的时候帧率限制,只能将动画放慢了进行录制,更容易看到效果 这是点击开始之后代码 -(IBAction)btnStartClick:(id)sender { CABa ...

  10. OC 知识:Foundation 框架及相关类详尽总结

    本文用来介绍Foundation框架的相关知识,以及Foundation框架所提供类的相关知识总结. 1. 框架介绍 框架是由很多类.方法.函数和文档按照一定的逻辑组织起来的集合,以使开发程序变得更加 ...