第1关:基于贝叶斯决策理论的分类方法

任务描述

本关任务:理解朴素贝叶斯的分类思想,完成编程习题。

相关知识

为了完成本关任务,你需要掌握:1.贝叶斯,2.朴素贝叶斯。

贝叶斯

朴素贝叶斯是贝叶斯决策理论的一部分,所以讲述朴素负叶斯之前有必要快速了解一下贝叶斯决策理论。 假设现在我们有一个数据集,它由两类数据组成,数据分布如图1所示。

图1 两个参数已知的概率分布,参数决定了分布的形状。

假设有位读者找到了描述图中两类数据的统计参数。(暂且不用管如何找到描述这类数据的统计参数,后面会详细介绍。)我们现在用p1(x,y)表示数据点(x,y)属于类别1(以图中用圆点表示的类别)的概率,用p2(x,y) 表示数据点(x,y)属于类别2 ( 图中用三角形表示的类别)的概率,那么对于一个新数据点(x,y),可以用下面的规则来判断它的类别: (1)如果 p1(x,y) > p2(x,y),那么类别为1。 (2)如果 p2(x,y) > pl(x,y),那么类别为2。 也就是说,我们会选择高概率对应的类别。这就是贝叶斯决策理论的核心思想,即选择具有最高概率的决策。

朴素贝叶斯

优点:在数据较少的情况下仍然有效,可以处理多类别问题。 缺点:对于输入数据的准备方式较为敏感。 适用数据类型:标称型数据。

回到图1,如果该图中的整个数据使用6个浮点数来表示,并且计算类别概 率的python代码只有两行,那么你会更倾向于使用下面哪种方法来对该数据点进行分类? (1)使用第1章的kNN,进行1000次距离计算; (2)使用第2章的决策树,分别沿x轴 、y轴划分数据; (3)计算数据点属于每个类别的概率,并进行比较。 使用决策树不会非常成功;而和简单的概率计算相比,kNN的计算量太大。因此,对于上述问题,最佳选择是使用刚才提到的概率比较方法。

编程要求

根据提示,在右侧编辑器补充代码,运行程序。

测试说明

根据所学完成右侧编程题。


开始你的任务吧,祝你成功!

import numpy as np'''
Parameters:无
Returns:postingList - 实验样本切分的词条classVec - 类别标签向量
'''
# 函数说明:创建实验样本
def loadDataSet():postingList=[['my', 'dog', 'has', 'flea', 'problems', 'help', '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']]classVec = [0,1,0,1,0,1]#类别标签向量,1代表侮辱性词汇,0代表不是return postingList,classVec'''
Parameters:vocabList - createVocabList返回的列表inputSet - 切分的词条列表
Returns:returnVec - 文档向量,词集模型
'''
# 函数说明:根据vocabList词汇表,将inputSet向量化,向量的每个元素为1或0
def setOfWords2Vec(vocabList, inputSet):returnVec = [0] * len(vocabList)                               #创建一个其中所含元素都为0的向量for word in inputSet:                                          #遍历每个词条if word in vocabList:                                      #如果词条存在于词汇表中,则置1returnVec[vocabList.index(word)] = 1else: print("the word: %s is not in my Vocabulary!" % word)return returnVec                                               #返回文档向量'''
Parameters:dataSet - 整理的样本数据集
Returns:vocabSet - 返回不重复的词条列表,也就是词汇表
'''
# 函数说明:将切分的实验样本词条整理成不重复的词条列表,也就是词汇表
def createVocabList(dataSet):vocabSet = set([])                      #创建一个空的不重复列表for document in dataSet:vocabSet = vocabSet | set(document) #取并集return list(vocabSet)'''
Parameters:trainMatrix - 训练文档矩阵,即setOfWords2Vec返回的returnVec构成的矩阵trainCategory - 训练类别标签向量,即loadDataSet返回的classVec
Returns:p0Vect - 侮辱类的条件概率数组p1Vect - 非侮辱类的条件概率数组pAbusive - 文档属于侮辱类的概率
'''
# 函数说明:朴素贝叶斯分类器训练函数
def trainNB0(trainMatrix,trainCategory):numTrainDocs = len(trainMatrix)                     #计算训练的文档数目numWords = len(trainMatrix[0])                      #计算每篇文档的词条数pAbusive = sum(trainCategory)/float(numTrainDocs)   #文档属于侮辱类的概率p0Num = np.ones(numWords); p1Num = np.ones(numWords)#创建numpy.ones数组,词条出现数初始化为1,拉普拉斯平滑p0Denom = 2.0; p1Denom = 2.0                        #分母初始化为2,拉普拉斯平滑for i in range(numTrainDocs):##########if trainCategory[i]==1:p1Num+=trainMatrix[i]p1Denom+=sum(trainMatrix[i])else:p0Num+=trainMatrix[i]p0Denom+=sum(trainMatrix[i])##########p1Vect = np.log(p1Num/p1Denom)                      #取对数,防止下溢出p0Vect = np.log(p0Num/p0Denom)#返回属于侮辱类的条件概率数组,属于非侮辱类的条件概率数组,文档属于侮辱类的概率return p0Vect,p1Vect,pAbusiveif __name__ == '__main__':postingList, classVec = loadDataSet()myVocabList = createVocabList(postingList)print('myVocabList:\n', myVocabList)trainMat = []#for循环使用词向量来填充trainMat列表for postinDoc in postingList:trainMat.append(setOfWords2Vec(myVocabList, postinDoc))p0V, p1V, pAb = trainNB0(trainMat, classVec)print('p0V:\n', p0V)print('p1V:\n', p1V)print('classVec:\n', classVec)print('pAb:\n', pAb)

Educoder 机器学习 第1关:基于贝叶斯决策理论的分类方法相关推荐

  1. 《模式识别原理及工程应用》——第2章 基于贝叶斯决策理论的分类器 2.1 分类器的描述方法...

    第2章 基于贝叶斯决策理论的分类器 2.1 分类器的描述方法 分类器是一种计算机程序,它的设计目标是在通过学习后,可自动将数据分到已知类别.分类器常应用在搜索引擎以及各种检索程序中,同时也大量应用于数 ...

  2. 基于稀疏表示的分类方法 Sparse Representation based Classification Method

    文章来源 Jia K, Chan T H, Ma Y. Robust and practical face recognition via structured sparsity[J]. Comput ...

  3. matlab的稀疏表示分类,基于稀疏表示的分类方法

    四天数模,做得不好,但收获不小.最后还通宵一宿,多日后得以重获新生,特做个小记,聊记心得. 本次选题为神经元的分类和聚类,前者给定种类,需要通过训练样本找寻分类特征,再用测试样本测试分类方法的正确性. ...

  4. [模式识别].(希腊)西奥多里蒂斯第四版笔记2之__基于贝叶斯决策理论的分类器

    本章的主要工作在基于训练集的特征向量,估计概率密度函数. 1,贝叶斯决策理论 条件概率公式.其中P(w)为先验概率,P(x|w)为类条件概率密度 2,基于正态分布的贝叶斯分类 高斯分布和正态分布是最常 ...

  5. 基于贝叶斯决策理论的分类器

    1.引言 模式识别是根据对象特征值将其分类.d个特征组成特征向量x=[x1,···,xd]T,生成d维特征空间,在特征空间一个x称为一个模式样本. Bayes决策理论是用概率统计方法研究决策问题. ( ...

  6. tensorflow实现基于LSTM的文本分类方法

    http://blog.csdn.net/u010223750/article/details/53334313?locationNum=7&fps=1 引言 学习一段时间的tensor fl ...

  7. 《机器学习实战》学习笔记(四):基于概率论的分类方法 - 朴素贝叶斯

    欢迎关注WX公众号:[程序员管小亮] [机器学习]<机器学习实战>读书笔记及代码 总目录 https://blog.csdn.net/TeFuirnever/article/details ...

  8. 机器学习实战之基于概率论的分类方法:朴素贝叶斯

    基于概率论的分类方法:朴素贝叶斯 引入 1 基于贝叶斯决策理论的分类方法 1.1 条件概率 1.2 使用条件概率来分类 1.3 使用朴素贝叶斯进行文档分类 2 使用Python进行文本分类 2.1 准 ...

  9. 机器学习实战(四)——基于概率论的分类方法:朴素贝叶斯

    朴素贝叶斯法 4.1 基于贝叶斯决策理论的分类方法 4.1.1 贝叶斯决策理论 4.1.2 条件概率 4.1.3 全概率公式 4.1.4 贝叶斯推断 4.1.5 朴素贝叶斯 4.2 使用朴素贝叶斯进行 ...

最新文章

  1. php mysql服务器配置_配置最新的PHP加MYSQL服务器
  2. 【ARM】Tiny4412裸板编程之静态库(libc.a)
  3. halcon模板匹配学习(二) 准备模板
  4. browserquest php安装,请问一下browserquest-php项目换成GatewayWorker的形式需要怎么部署worker...
  5. python两个编程环境_多个python Behave环境安装文件
  6. python opencv3 特征提取与描述 DoG SIFT hessian surf
  7. 已收藏!java面试知识点整理
  8. mysql数据库基本知识点整理笔记
  9. GPT2.0语言模型 Language Models are Unsupervised Multitask Learners
  10. 概率论由相关性求数学期望和方差的公式_概率论笔记2--离散随机变量、数学期望和方差...
  11. URAL 1671 Anansi's Cobweb (并查集)
  12. FVCOM离线拉格朗日配置
  13. python 文件夹中的文件批量处理 高通道tif图片转换成jpg格式
  14. ahk捕捉连续按esc键
  15. axure8 事件改变样式_【Petrel老师带你玩转Axure 8(二)】Axure部件样式与页面样式管理...
  16. 【新书速递】从原理、架构、案例三个维度深度剖析分布式数据库
  17. load forecasting(一)
  18. 变量的基本使用Day2
  19. Docker使用入门
  20. 勒索变种有不变的特征吗?有相应的防护手段吗?

热门文章

  1. 免费电子书下载 网站(11个)
  2. STM32F103+RTT从零开始(三)—— S50门禁卡复制
  3. 2D横版游戏角色素材可商用
  4. 分批处理list中的数据_如何分批次处理List集合中的数据
  5. 普吉岛泡酒店浮潜攻略——我住过的普吉岛的8个酒店
  6. 一缕黑暗中的火光-----------活动图--------------优雅的建模语言
  7. python读json文件数组_如何在python中从json文件读取json对象数组
  8. 专项---APP安全---Android APP安全测试内容
  9. 动画一:过渡(超详细!)
  10. 新概念二册 Lesson 34 quick work破案“神速”(复习被动语态)