简单的贝叶斯分类器的python实现
# -*- 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实现的更多相关文章
- 朴素贝叶斯分类器及Python实现
贝叶斯定理 贝叶斯定理是通过对观测值概率分布的主观判断(即先验概率)进行修正的定理,在概率论中具有重要地位. 先验概率分布(边缘概率)是指基于主观判断而非样本分布的概率分布,后验概率(条件概率)是根据 ...
- (数据科学学习手札30)朴素贝叶斯分类器的原理详解&Python与R实现
一.简介 要介绍朴素贝叶斯(naive bayes)分类器,就不得不先介绍贝叶斯决策论的相关理论: 贝叶斯决策论(bayesian decision theory)是概率框架下实施决策的基本方法.对分 ...
- python使用tcp实现一个简单的下载器
上一篇中介绍了tcp的流程,本篇通过写一个简单的文件下载器程序来巩固之前学的知识. 文件下载器的流程如下: 客户端: 输入目标服务器的ip和port 输入要下载文件的名称 从服务器下载文件保存到本地 ...
- 机器学习之路: python 朴素贝叶斯分类器 MultinomialNB 预测新闻类别
使用python3 学习朴素贝叶斯分类api 设计到字符串提取特征向量 欢迎来到我的git下载源代码: https://github.com/linyi0604/MachineLearning fro ...
- 用scikit-learn实现朴素贝叶斯分类器 转
原文:http://segmentfault.com/a/1190000002472791 朴素贝叶斯(Naive Bayes Classifier)是一种「天真」的算法(假定所有特征发生概率是独立的 ...
- 数据挖掘十大经典算法(9) 朴素贝叶斯分类器 Naive Bayes
贝叶斯分类器 贝叶斯分类器的分类原理是通过某对象的先验概率,利用贝叶斯公式计算出其后验概率,即该对象属于某一类的概率,选择具有最大后验概率的类作为该对象所属的类.眼下研究较多的贝叶斯分类器主要有四种, ...
- 十大经典数据挖掘算法(9) 朴素贝叶斯分类器 Naive Bayes
贝叶斯分类器 贝叶斯分类分类原则是一个对象的通过先验概率.贝叶斯后验概率公式后计算,也就是说,该对象属于一类的概率.选择具有最大后验概率的类作为对象的类属.现在更多的研究贝叶斯分类器,有四个,每间:N ...
- 机器学习---朴素贝叶斯分类器(Machine Learning Naive Bayes Classifier)
朴素贝叶斯分类器是一组简单快速的分类算法.网上已经有很多文章介绍,比如这篇写得比较好:https://blog.csdn.net/sinat_36246371/article/details/6014 ...
- 朴素贝叶斯分类器(Naive Bayes)
1. 贝叶斯定理 如果有两个事件,事件A和事件B.已知事件A发生的概率为p(A),事件B发生的概率为P(B),事件A发生的前提下.事件B发生的概率为p(B|A),事件B发生的前提下.事件A发生的概率为 ...
随机推荐
- 对《SQL Server中tempdb的management》的一些更正和补充
对<SQL Server中tempdb的management>的一些更正和补充 前几天看了这篇文章:SQL Server中tempdb的management 发现里面有些内容不是很准确 文 ...
- Request URL参数
登录跳转完整参考: http://www.cnblogs.com/dreamer-fish/p/5435274.html request.META.get('HTTP_REFERER', '/') # ...
- 3星|《结构思考力》:用金字塔原理整理PPT的思路,案例偏简单
结构思考力 名义上全书是讲结构化思考,实际内容是用结构化思考的方法来整理PPT的思路,让PPT的逻辑更清晰.少部分提到如何修改标题更吸引人,如何做图表设计. 书中结构化思考的基本思路,重要的有两个:1 ...
- mysql5.7.22的安装与配置(适用mysql5.7.20至mysql5.7.22版本)
一.解压Mysql5.7.20安装包,刚解压是没有 data 这个文件夹的 二.配置mysql环境变量,创建MYSQL_HOME,然后在Path上添加%MYSQL_HOME%\bin; 三.配置m ...
- [转载并收藏]JavaScript 疲劳终极指南:我们行业的真相
这篇文章说的深得我心,特别是前半段. 特此收藏. 中文译文:http://www.zcfy.cc/article/the-ultimate-guide-to-javascript-fatigue-re ...
- CF893F:Subtree Minimum Query(线段树合并)
Description 给你一颗有根树,点有权值,m次询问,每次问你某个点的子树中距离其不超过k的点的权值的最小值.(边权均为1,点权有可能重复,k值每次询问有可能不同,强制在线) Input 第一行 ...
- F2eTest程序快捷方式安装到桌面
按照http://f2etest.***.com/install页面上介绍的:安装快捷方式到Windows桌面 (Win7)部分的介绍进行安装. 其中第三步的https连接需要在f2etest的c ...
- ElasticSearch 简单的 搜索 聚合 分析
一. 搜索1.DSL搜索 全部数据没有任何条件 GET /shop/goods/_search { "query": { "match_all": {} } } ...
- Hive学习之路 (二)Hive安装
Hive的下载 下载地址http://mirrors.hust.edu.cn/apache/ 选择合适的Hive版本进行下载,进到stable-2文件夹可以看到稳定的2.x的版本是2.3.3 Hive ...
- Kubernetes 1.6新特性
Kubernetes 1.6已结发布,包括9个Stable特性.12个Beta特性.8个Alpha特性,共29个新特性.Kubernetes 1.6重点关注集群规模扩展和自动化.目前最多支持5000个 ...