1.朴素贝叶斯案例分析

朴素贝叶斯案例分析的内容有:

  • 项目概述:屏蔽社区留言板的侮辱性言论
  • 项目实战:朴素贝叶斯案例的实现

数据集信息

  • 朴素贝叶斯案例的数据包含6条样本,具体有3个正样本和3个负样本,标签0表示样本为正样本,标签为1表示样本为带有侮辱性的词汇。

2 项目概述

2.1 屏蔽社区留言板的侮辱性言论

  • 以在线社区的留言板为例。为了不影响社区的发展,要屏蔽侮辱性的言论。
  • 对此问题建立两个类别:侮辱类和非侮辱类,使用1和0分别标识.

3 项目实战

3.1 屏蔽社区留言板的侮辱性言论的具体流程

  • 准备数据:从文本构建词向量
  • 分析数据:统计每个样本在词库中的出现情况
  • 训练算法:计算条件概率和类标签概率
  • 测试算法:构建朴素贝叶斯分类器
  • 使用算法:对社区留言板言论进行分类

3.3 步骤一:准备数据,从文本构建词向量

# 加载数据集
def loadDataSet():# 切分的词条,样本集合postingList = [['my', 'dog', 'has', 'flea', 'problems', 'help', 'please', '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']]# 类别标签向量,1代表侮辱性词汇,0代表不是classVec = [0, 1, 0, 1, 0, 1]# 返回实验样本切分的词条、类别标签向量return postingList, classVec# 构建词汇表
def createVocabList(dataSet):# 创建一个空的不重复列表[1,2,2,3,4,4,6,9]# set是一个无序且不重复的元素集合[1,2,3,4,6,9]vocabSet = set([])# dataSet:表示样本数据,公共6个样本for document in dataSet:# 取并集vocabSet = vocabSet | set(document)return list(vocabSet)# 根据vocabList词汇表,将inputSet向量化,向量的每个元素为1或0
def setOfWords2Vec(vocabList, inputSet):# 创建一个其中所含元素都为0的向量returnVec = [0] * len(vocabList)  # 生成32个元素大小的向量# 遍历每个词条for word in inputSet:if word in vocabList:# 如果词条存在于词汇表中,则置1 One-hot# index返回word出现在vocabList中的索引# 若这里改为+=则就是基于词袋的模型,遇到一个单词会增加单词向量中德对应值returnVec[vocabList.index(word)] = 1else:print("the word: %s is not in my Vocabulary" % word)# 返回文档向量return returnVec

3.4 步骤二:计算条件概率和类标签概率

# 朴素贝叶斯分类器训练函数
def trainNB0(trainMatrix, trainCategory):# trainMatrix 大小为6的全0或1的数据# trainCategory 标签信息# 计算训练文档数目numTrainDocs = len(trainMatrix)  # 6# 计算每篇文档的词条数目numWords = len(trainMatrix[0])  # 32# 文档属于侮辱类的概率pAbusive = sum(trainCategory) / float(numTrainDocs)  # 0.5# 创建numpy.zeros数组,词条出现数初始化为0# p0Num = np.zeros(numWords)# p1Num = np.zeros(numWords)# 创建numpy.ones数组,词条出现数初始化为1,拉普拉斯平滑p0Num = np.ones(numWords)p1Num = np.ones(numWords)# 分母初始化为0# p0Denom = 0.0# p1Denom = 0.0# 分母初始化为2,拉普拉斯平滑p0Denom = 2.0p1Denom = 2.0for i in range(numTrainDocs):# p0vector = log[P(w0|1),P(w1|1),...,P(w31|1)]# 统计属于侮辱类的条件概率所需的数据,即P(w0|1),P(w1|1),P(w2|1)...if trainCategory[i] == 1:# 统计所有侮辱类文档中每个单词出现的个数p1Num += trainMatrix[i]# 统计一共出现的侮辱单词的个数p1Denom += sum(trainMatrix[i])# 统计属于非侮辱类的条件概率所需的数据,即P(|0),P(w1|0),P(w2|0)...else:# 统计所有非侮辱类文档中每个单词出现的个数p0Num += trainMatrix[i]# 统计一共出现的非侮辱单词的个数p0Denom += sum(trainMatrix[i])# 每个侮辱类单词分别出现的概率# p1Vect = p1Num / p1Denom# 取对数,防止下溢出# p1Vect = np.log(p1Num / p1Denom)p1Vect = p1Num / p1Denom# 每个非侮辱类单词分别出现的概率# p0Vect = p0Num / p0Denom# 取对数,防止下溢出# p0Vect = np.log(p0Num / p0Denom)p0Vect = p0Num / p0Denom# 返回属于非侮辱类的条件概率数组、属于侮辱类的条件概率数组、文档属于侮辱类的概率return p0Vect, p1Vect, pAbusive

3.5 步骤三:构建朴素贝叶斯算法分类器

# 朴素贝叶斯分类器训练函数
def classifyNB(vec2Classify, p0Vec, p1Vec, pClass1):# 对应元素相乘# p1 = reduce(lambda x,y:x*y, vec2Classify * p1Vec) * pClass1 取对数# p0 = reduce(lambda x,y:x*y, vec2Classify * p0Vec) * (1.0 - pClass1)# 对应元素相乘,logA*B = logA + logB所以这里是累加p1 = sum(vec2Classify * p1Vec) + np.log(pClass1)p0 = sum(vec2Classify * p0Vec) + np.log(1.0 - pClass1)# print('p0:', p0)# print('p1:', p1)if p1 > p0:return 1else:return 0

3.6 步骤四:对社区留言板言论进行分类

# 测试朴素贝叶斯分类器
def testingNB():# 创建实验样本listOPosts, listclasses = loadDataSet()  # 调用加载数据集# listOPosts 代表了数据集for l in listOPosts:print(l)print(listclasses)  # 表示了标签信息print("+++++++++++++++++++++")# 创建词汇表,将输入文本中的不重复的单词进行提取组成单词向量myVocabList = createVocabList(listOPosts)print(type(myVocabList))print(len(myVocabList))print(myVocabList)print("===================")trainMat = []for postinDoc in listOPosts:# 将实验样本向量化若postinDoc中的单词在myVocabList出现则将returnVec该位置的索引置1# 将6组数据list存储在trainMat中trainMat.append(setOfWords2Vec(myVocabList, postinDoc))for i in trainMat:print(i)# # 训练朴素贝叶斯分类器# p0V表示非侮辱类的概率数组# pAb表示侮辱类的概率值p0V, p1V, pAb = trainNB0(np.array(trainMat), np.array(listclasses))print(p0V, 1 - pAb)print("+++++++++++++++")print(p1V, pAb)# # 测试样本1# """#     1. 测试样本数据#     2. 把测试数据转化为对应的词向量表示[32]#     3. 代入预测函数[32]*[每个单词的权重,32]# """testEntry = ['love', 'my', 'dalmation']  # 测试样本# 测试样本向量化返回这三个单词出现位置的索引thisDoc = np.array(setOfWords2Vec(myVocabList, testEntry))  # 把测试集转化成了向量if classifyNB(thisDoc, p0V, p1V, pAb):# 执行分类并打印结果print(testEntry, '属于侮辱类')else:# 执行分类并打印结果print(testEntry, '属于非侮辱类')# 测试样本2testEntry = ['stupid', 'garbage']# 将实验样本向量化thisDoc = np.array(setOfWords2Vec(myVocabList, testEntry))if classifyNB(thisDoc, p0V, p1V, pAb):# 执行分类并打印结果print(testEntry, '属于侮辱类')else:# 执行分类并打印结果print(testEntry, '属于非侮辱类')

3.6 运行结果

  • [‘love’, ‘my’, ‘dalmation’] 属于非侮辱类
  • [‘stupid’, ‘garbage’] 属于侮辱类

六、朴素贝叶斯案例分析相关推荐

  1. 机器学习实战4.2 朴素贝叶斯案例:屏蔽社区留言板的侮辱性言论

    机器学习实战4.2 朴素贝叶斯案例:屏蔽社区留言板的侮辱性言论 参考地址:https://cuijiahua.com/blog/2017/11/ml_4_bayes_1.html 一.引子 很久没更新 ...

  2. 朴素贝叶斯情感分析评分python_朴素贝叶斯算法下的情感分析——C#编程实现

    这篇文章做了什么 不先介绍点基础? 朴素贝叶斯,真的很朴素 情感分析是啥 朴素贝叶斯如何实现情感分析 1.前期准备: 做好正负面标记的文本作为训练集 正负面词库 2.针对文本实现: 分词,推荐使用Ji ...

  3. 朴素贝叶斯情感分析评分python_详解基于朴素贝叶斯的情感分析及 Python 实现

    相对于「 基于词典的分析 」,「 基于机器学习 」的就不需要大量标注的词典,但是需要大量标记的数据,比如: 还是下面这句话,如果它的标签是: 服务质量 - 中 (共有三个级别,好.中.差) �r(�s ...

  4. 朴素贝叶斯情感分析评分python_Stanford NLP学习笔记:7. 情感分析(Sentiment)

    1. 什么是情感分析(别名:观点提取,主题分析,情感挖掘...) 应用: 1)正面VS负面的影评(影片分类问题) 2)产品/品牌评价: Google产品搜索 3)twitter情感预测股票市场行情/消 ...

  5. 朴素贝叶斯情感分析评分python_比朴素贝叶斯更优秀的情感分析方法?答案在这里...

    作者|Samuel Pilcer 译者 & 编辑|Debra AI 前线导读:根据在线评论和评分,我们可以为客户提供关于其信誉度的深刻见解.我们会拆解评论文本了解评论的内容,并告诉我们的客户他 ...

  6. 朴素贝叶斯--实战分析

    概率论及贝叶斯决策理论的一些知识请参阅相关书籍和博客 https://blog.csdn.net/amds123/article/details/70173402 这里给出源码及解析. 1. 使用py ...

  7. 朴素贝叶斯情感分析评分python_「豆瓣影评」从爬取豆瓣影评到基于朴素贝叶斯的电影评论情感分析(上) - seo实验室...

    豆瓣影评 一.爬取豆瓣影评 基本思路:先获取每个电影的评论区链接,然后依次进入其评论区爬取评论.选取10部电影,每部200条评论. 用到的包为:BeautifulSoup,urllib 这里选取的链接 ...

  8. 自然语言处理--朴素贝叶斯-情感分析

    朴素贝叶斯模型试图从一系列文档集合中寻找对目标(输出)变量有预测作用的关键词.当目标变量是要预测的情感时,模型将寻找那些能预测该情感的词.朴素贝叶斯模型的一个好处是,其内部的系数会将词或词条映射为类似 ...

  9. 朴素贝叶斯情感分析评分python_详解基于朴素贝叶斯的情感分析及Python实现

    朴素贝叶斯 1.贝叶斯定理 假设对于某个数据集,随机变量C表示样本为C类的概率,F1表示测试样本某特征出现的概率,套用基本贝叶斯公式,则如下所示: 上式表示对于某个样本,特征F1出现时,该样本被分为C ...

最新文章

  1. [EffectiveC++]item41:了解隐式接口和编译期多态
  2. 一个SQL的几种写法
  3. ES6基础-字符串的新特性
  4. php的cgi的设置,apache中配置php支持模块模式、cgi模式和fastcgi模式
  5. android启动效果
  6. android8.0 苹果,外媒:看完Android8.0 这次是谷歌抄苹果
  7. H5如何返回微信小程序
  8. 国科大-模式识别与机器学习(计算机科学与技术学院)-习题解答参考
  9. error: crosses initialization of
  10. Gentoo 教程:编译器选择
  11. 芯片到uboot启动流程 :ROM → MLO(SPL)→ uboot.img
  12. 一元线性回归方程C语言实现
  13. android 自定义图片裁剪,android 自定义比例裁剪图片(拍照 相册)方式 自定义比例...
  14. Python命名方式转换——帕斯卡、驼峰法、下划线
  15. 虚拟运行ur5时,出现的问题
  16. linux 网络属性,Linux网络属性配置详解
  17. 目标检测入门之(二)综述(下)
  18. Paper:机器学习、深度学习常用的国内/国外引用(References)论文参考文献集合(建议收藏,持续更新)
  19. cmake ninja
  20. 基于Java的Windows扫雷游戏的设计与实现

热门文章

  1. 关于FLV视频格式的知识整理!
  2. Camstar CDO增加自定义字段
  3. cas 入门之八:cas 认证处理器-GENERIC
  4. 我用Python发现了 十二星座 中的秘密(附视频)
  5. Huffman(哈夫曼)编码及java实现
  6. 北航博士生联培申请经验
  7. 樱桃牌-高逼格键盘敲代码贼爽!包邮送你!
  8. linux樱桃树软件名字,名字带“樱”的3种水果,多数人最先想到樱桃,第3种最少见!...
  9. HR管理系统的五大选择特点
  10. 计算机数学方法记录图像原理,图像处理原理技术与算法