热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

文本分类学习笔记(6)贝叶斯

贝叶斯分类器:先验概率P(c)类c下单词总数整个训练样本的单词总数类条件概率P(tk|c)(类c下单词tk在各个文档中出现过的次数之和1)(类c下单词总数|V|)V是

贝叶斯分类器:
先验概率P(c)= 类c下单词总数/整个训练样本的单词总数
类条件概率P(tk|c)=(类c下单词tk在各个文档中出现过的次数之和+1)/(类c下单词总数+|V|)
V是训练样本的单词表(即抽取单词,单词出现多次,只算一个),|V|则表示训练样本包含多少“个”单词。P(tk|c)可以看作是单词tk在证明d属于类c上提供了多大的证据,而P(c)则可以认为是类别c在整体上占多大比例(有多大可能性)。
这里写图片描述
注:在实际计算过程,特征维度较,单个概率较小,连乘的结果会造成精度丢失,因此采用对数函数对概率进行放大,而且不需要计算P(Doc),即:
这里写图片描述
预测算法是根据上述公式计算argmax{P(Ci|Doc)}

#coding=utf-8
from scipy import sparse,io
from sklearn.linear_model import LogisticRegression
from sklearn.naive_bayes import MultinomialNB
from sklearn import metrics
from numpy import *
import warnings
warnings.filterwarnings("ignore")class Naivebayes:N = [] #k * n k = 0 #categoryn = 0 #samples dimensionsm = 0 #training samplescategory = [] # 类别log_probability_c = [] # 属于每个类的概率log_probability_t_c=[] # 拉普拉斯平滑后概率def __init__(self, X, Y):if len(X) != len(Y):print 'samples\' length not equal labels\' length'elif len(Y) == 0:print 'samples\' size is zero'else:self.m = len(Y)self.n = len(X[0])D = []for i in range(self.m):# 对于新的类别添加一个新集合if Y[i] not in self.category:self.category.append(Y[i])D.append([])D[-1].append(X[i])else:D[self.category.index(Y[i])].append(X[i])# 计算每个类的概率for i in range(len(self.category)):self.log_probability_c.append(len(D[i]))self.log_probability_c = log(self.log_probability_c)# 赋值k、nself.k = len(self.category)self.N = zeros((self.k, self.n))for i in range(self.k):self.N[i] = array(D[i]).sum(0)# +1平滑self.log_probability_t_c = self.N + 1s = self.log_probability_t_c.sum(1)self.log_probability_t_c = log(self.log_probability_t_c / s.reshape(len(s), 1))#分类def predict(self, x):p = self.log_probability_c + x.dot(self.log_probability_t_c.transpose())i = p.argmax(1)label = []for j in range(len(i)):label.append(self.category[i[j]])return labelif __name__ == '__main__':#读取中间数据data = io.loadmat('SetMat1.mat')vectormat = data['trainSet']labeled_names = data['train_labeled'][0]labeled_names1 = data['test_labeled'][0]vectormat1 = data['testSet']nb = Naivebayes(vectormat, labeled_names)labels = nb.predict(vectormat1)calculate_result(labeled_names1,labels)#print labelsc = zeros((10,10), dtype=int)for i in range(len(labels)):c[labeled_names1[i]-1][labels[i]-1] = c[labeled_names1[i]-1][labels[i]-1] + 1print c

运行结果
中间数据采用的是TF\IDF值,依据词频做了简单特征筛选

predict info:
accuracy:0.779
precision:0.759
recall:0.779
f1-score:0.735

使用Bool型特征(one-hot)则有明显提高
count_vec = CountVectorizer(binary = True,decode_error=’replace’)

predict info:
accuracy:0.849
precision:0.835
recall:0.849
f1-score:0.824
[[ 705 0 3 5 0 0 2 0 4 0][ 0 1 0 3 51 0 0 0 1 0][ 13 0 165 0 0 0 0 3 8 0][ 30 0 3 1051 0 0 1 0 2 0][ 0 1 0 5 126 0 1 4 12 0][ 0 0 0 1 1 40 86 0 3 0][ 0 0 1 1 0 8 166 0 3 0][ 3 0 49 1 11 0 0 16 9 0][ 0 0 1 7 3 0 11 0 95 0][ 0 1 0 3 64 0 0 1 2 0]]

推荐阅读
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • vue使用
    关键词: ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • 本文讨论了如何使用IF函数从基于有限输入列表的有限输出列表中获取输出,并提出了是否有更快/更有效的执行代码的方法。作者希望了解是否有办法缩短代码,并从自我开发的角度来看是否有更好的方法。提供的代码可以按原样工作,但作者想知道是否有更好的方法来执行这样的任务。 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • 本文介绍了在iOS开发中使用UITextField实现字符限制的方法,包括利用代理方法和使用BNTextField-Limit库的实现策略。通过这些方法,开发者可以方便地限制UITextField的字符个数和输入规则。 ... [详细]
author-avatar
顾旭东-夏天
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有