简单的贝叶斯分类器的python实现

简介:

 

复制代码
  1 # -*- coding: utf-8 -*-
  2 '''
  3 >>> c = Classy()
  4 >>> c.train(['cpu', 'RAM', 'ALU', 'io', 'bridge', 'disk'], 'architecture')
  5 True
  6 >>> c.train(['monitor', 'mouse', 'keyboard', 'microphone', 'headphones'], 'input_devices')
  7 True
  8 >>> c.train(['desk', 'chair', 'cabinet', 'lamp'], 'office furniture')
  9 True
 10 >>> my_office = ['cpu', 'monitor', 'mouse', 'chair']
 11 >>> c.classify(my_office)
 12 ('input_devices', -1.0986122886681098)
 13 ...
 14 >>> c = Classy()
 15 >>> c.train(['cpu', 'RAM', 'ALU', 'io', 'bridge', 'disk'], 'architecture')
 16 True
 17 >>> c.train(['monitor', 'mouse', 'keyboard', 'microphone', 'headphones'], 'input_devices')
 18 True
 19 >>> c.train(['desk', 'chair', 'cabinet', 'lamp'], 'office furniture')
 20 True
 21 >>> my_office = ['cpu', 'monitor', 'mouse', 'chair']
 22 >>> c.classify(my_office)
 23 ('input_devices', -1.0986122886681098)
 24 ...
 25 '''
 26 
 27 from collections import Counter
 28 import math
 29 
 30 class ClassifierNotTrainedException(Exception):
 31     
 32     def __str__(self):
 33         return "Classifier is not trained."
 34 
 35 class Classy(object):
 36     
 37     def __init__(self):
 38         self.term_count_store = {}
 39         self.data = {
 40             'class_term_count': {},
 41             'beta_priors': {},
 42             'class_doc_count': {},
 43         }
 44         self.total_term_count = 0
 45         self.total_doc_count = 0
 46         
 47     def train(self, document_source, class_id):
 48     
 49         '''
 50         Trains the classifier.
 51         
 52         '''
 53         count = Counter(document_source)
 54         try:
 55             self.term_count_store[class_id]
 56         except KeyError:
 57             self.term_count_store[class_id] = {}
 58         for term in count:
 59             try:
 60                 self.term_count_store[class_id][term] += count[term]
 61             except KeyError:
 62                 self.term_count_store[class_id][term] = count[term]
 63         try:
 64             self.data['class_term_count'][class_id] += document_source.__len__()
 65         except KeyError:
 66             self.data['class_term_count'][class_id] = document_source.__len__()
 67         try:
 68             self.data['class_doc_count'][class_id] += 1
 69         except KeyError:
 70             self.data['class_doc_count'][class_id] = 1
 71         self.total_term_count += document_source.__len__()
 72         self.total_doc_count += 1
 73         self.compute_beta_priors()
 74         return True
 75         
 76     def classify(self, document_input):
 77         if not self.total_doc_count: raise ClassifierNotTrainedException()
 78         
 79         term_freq_matrix = Counter(document_input)
 80         arg_max_matrix = []
 81         for class_id in self.data['class_doc_count']:
 82             summation = 0
 83             for term in document_input:
 84                 try:
 85                     conditional_probability = (self.term_count_store[class_id][term] + 1)
 86                     conditional_probability = conditional_probability / (self.data['class_term_count'][class_id] + self.total_doc_count)
 87                     summation += term_freq_matrix[term] * math.log(conditional_probability)
 88                 except KeyError:
 89                     break
 90             arg_max = summation + self.data['beta_priors'][class_id]
 91             arg_max_matrix.insert(0, (class_id, arg_max))
 92         arg_max_matrix.sort(key=lambda x:x[1])
 93         return (arg_max_matrix[-1][0], arg_max_matrix[-1][1])
 94         
 95     def compute_beta_priors(self):
 96         if not self.total_doc_count: raise ClassifierNotTrainedException()
 97         
 98         for class_id in self.data['class_doc_count']:
 99             tmp = self.data['class_doc_count'][class_id] / self.total_doc_count
100             self.data['beta_priors'][class_id] = math.log(tmp)
复制代码

 

本文转自罗兵博客园博客,原文链接:http://www.cnblogs.com/hhh5460/p/4319427.html ,如需转载请自行联系原作者
相关文章
|
机器学习/深度学习 数据采集 算法
Python实现Naive Bayes贝叶斯分类模型(GaussianNB、MultinomialNB算法)项目实战
Python实现Naive Bayes贝叶斯分类模型(GaussianNB、MultinomialNB算法)项目实战
|
机器学习/深度学习 数据采集 人工智能
使用Python实现简单的机器学习分类器
【8月更文挑战第37天】本文将引导读者了解如何利用Python编程语言构建一个简单的机器学习分类器。我们将从基础概念出发,通过代码示例逐步深入,探索数据预处理、模型选择、训练和评估过程。文章旨在为初学者提供一条清晰的学习路径,帮助他们理解并实现基本的机器学习任务。
|
机器学习/深度学习 人工智能 开发者
使用Python实现简单的机器学习分类器
【8月更文挑战第31天】在这篇文章中,我们将探索如何使用Python来创建一个简单的机器学习分类器。通过使用scikit-learn库,我们可以快速构建和训练模型,而无需深入了解复杂的数学原理。我们将从数据准备开始,逐步介绍如何选择合适的模型、训练模型以及评估模型的性能。最后,我们将展示如何将训练好的模型应用于新数据的预测。无论你是机器学习的初学者还是有一定经验的开发者,这篇文章都将为你提供一个实用的指南,帮助你入门并理解基本的机器学习概念。
|
机器学习/深度学习 人工智能 算法
如何使用Scikit-learn在Python中构建一个机器学习分类器
如何使用Scikit-learn在Python中构建一个机器学习分类器
179 3
|
机器学习/深度学习 数据采集 算法
Python实现贝叶斯岭回归模型(BayesianRidge算法)并使用K折交叉验证进行模型评估项目实战
Python实现贝叶斯岭回归模型(BayesianRidge算法)并使用K折交叉验证进行模型评估项目实战
|
自然语言处理 算法 安全
Python实现贝叶斯算法疫情微博评论情感分析
Python实现贝叶斯算法疫情微博评论情感分析
Python实现贝叶斯算法疫情微博评论情感分析
|
算法 Python
在线问诊 Python、FastAPI、Neo4j — 构建问题分类器
在线问诊 Python、FastAPI、Neo4j — 构建问题分类器
101 0
|
机器学习/深度学习 数据采集 数据可视化
Python众筹项目结果预测:优化后的随机森林分类器可视化|数据代码分享
Python众筹项目结果预测:优化后的随机森林分类器可视化|数据代码分享
|
机器学习/深度学习 算法 测试技术
Python贷款违约预测:Logistic、Xgboost、Lightgbm、贝叶斯调参/GridSearchCV调参|数据分享
Python贷款违约预测:Logistic、Xgboost、Lightgbm、贝叶斯调参/GridSearchCV调参|数据分享
|
算法 数据挖掘 Python
Python贝叶斯MCMC:Metropolis-Hastings、Gibbs抽样、分层模型、收敛性评估
Python贝叶斯MCMC:Metropolis-Hastings、Gibbs抽样、分层模型、收敛性评估

热门文章

最新文章

推荐镜像

更多