# coding=utf-8#朴素贝叶斯分类,P(ci|X)=P(X|ci)*P(ci)/P(X),因为P(X)与类无关,每个样本对各个类的概率一样。
#假设各特征相互独立,对一样本的不同类,可求P(X|ci)*P(ci)=P(X1|ci)P(X2|ci).。。P(Xn|ci)*P(ci)
#概率大着即为其类
#先根据所有样本,求所有特征的条件概率P(X1|ci)P(X2|ci).。。P(Xn|ci)和分类概率P(ci)
#样本X用0,1组成的向量表示,则dot(X,P(X1|ci)P(X2|ci).。。P(Xn|ci))即得到其对应的特征的条件概率,再*P(ci)就得到
#其对应的属于Ci类的概率,大则为其类from numpy import *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 is abusive, 0 notreturn postingList,classVecdef createVocabList(dataSet): #'建立词汇表集合=n个特征'vocabSet = set([])  #create empty setfor document in dataSet:vocabSet = vocabSet | set(document) #union of the two setsreturn list(vocabSet)def setOfWords2Vec(vocabList, inputSet):#'将话语词汇与词汇表对照映射成0、1组成的n特征向量'returnVec = [0]*len(vocabList)for word in inputSet:if word in vocabList:returnVec[vocabList.index(word)] = 1else: print("the word: %s is not in my Vocabulary!" % word)return returnVecdef trainNB0(trainMatrix,trainCategory):#'训练样本得到P(X1|ci)P(X2|ci).。。P(Xn|ci),P(ci)numTrainDocs = len(trainMatrix)numWords = len(trainMatrix[0])pAbusive = sum(trainCategory)/float(numTrainDocs)   #P(c1) 脏话p0Num = ones(numWords); p1Num = ones(numWords)      #change zeros() to ones() '防止有P(Xj|Ci)=0使联合概率成0'p0Denom = 2.0; p1Denom = 2.0                        #change 0.0 to 2.0for i in range(numTrainDocs):if trainCategory[i] == 1:p1Num += trainMatrix[i]p1Denom += sum(trainMatrix[i])else:p0Num += trainMatrix[i]p0Denom += sum(trainMatrix[i])p1Vect = log(p1Num/p1Denom)          #change to log() '进行对数变换,变*为+,ln(a*b)=lna+lnb防止很小的数连乘下溢出成0'p0Vect = log(p0Num/p0Denom)          #change to log() 'ln(f(x))和f(x)的极值点一致,走势一致'return p0Vect,p1Vect,pAbusivedef classifyNB(vec2Classify, p0Vec, p1Vec, pClass1):p1 = sum(vec2Classify * p1Vec) + log(pClass1)    #element-wise multp0 = sum(vec2Classify * p0Vec) + log(1.0 - pClass1)if p1 > p0:return 1else: return 0def bagOfWords2VecMN(vocabList, inputSet): #'文档词袋模型:当话语中的特征词汇出现多次,使对应的向量特征+1,而不是=1。增强其对分类的影响'returnVec = [0]*len(vocabList)for word in inputSet:if word in vocabList:returnVec[vocabList.index(word)] += 1return returnVecdef testingNB():listOPosts,listClasses = loadDataSet()myVocabList = createVocabList(listOPosts)trainMat=[]for postinDoc in listOPosts:trainMat.append(setOfWords2Vec(myVocabList, postinDoc))p0V,p1V,pAb = trainNB0(array(trainMat),array(listClasses))testEntry = ['love', 'my', 'dalmation']thisDoc = array(setOfWords2Vec(myVocabList, testEntry))print (testEntry,'classified as: ',classifyNB(thisDoc,p0V,p1V,pAb))testEntry = ['stupid', 'garbage']thisDoc = array(setOfWords2Vec(myVocabList, testEntry))print (testEntry,'classified as: ',classifyNB(thisDoc,p0V,p1V,pAb))def textParse(bigString):    #input is big string, #output is word listimport relistOfTokens = re.split(r'\W*', bigString) #'分隔符为除单词数字外的任意字符串'return [tok.lower() for tok in listOfTokens if len(tok) > 2] #'去掉空字符串并变小写'testingNB()

机器学习-朴素贝叶斯分类相关推荐

  1. 机器学习——朴素贝叶斯分类

    一贝叶斯原理 1.1贝叶斯原理产生背景: 贝叶斯原理是英国数学家托马斯·贝叶斯提出的,他写的一篇关于归纳推理的论文直接影响了接下来两个多世纪的统计学,是科学史上著名的论文之一. 贝叶斯原理是贝叶斯为了 ...

  2. 机器学习 --- 朴素贝叶斯分类器 python

    简介 朴素贝叶斯分类算法是基于贝叶斯理论和特征条件独立假设的分类算法.对于给定的训练集,首先基于特征条件独立假设学习数据的概率分布.然后基于此模型,对于给定的特征数据x,利用贝叶斯定理计算出标签y.朴 ...

  3. 机器学习 朴素贝叶斯分类食品安全新闻

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 文章目录 前言 一.预备知识 1.基本概念 2.贝叶斯公式 二.朴素贝叶斯原理 1.判别模型和生成模型 2.贝叶斯分类器 2.1 ...

  4. 机器学习--朴素贝叶斯分类,以及拉普拉斯校准

    原文链接: 1. 词袋模型 http://chant00.com/2017/09/18/%E8%B4%9D%E5%8F%B6%E6%96%AF/ 2. 朴素贝叶斯计算嫁人概率 https://zhua ...

  5. 机器学习-朴素贝叶斯分类器

    机器学习-朴素贝叶斯分类器 概述 定义 贝叶斯方法 朴素贝叶斯算法 算法原理 优缺点 优点 缺点 应用 文本分类 其他 概述 朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法. 朴素贝叶斯分类 ...

  6. 基于朴素贝叶斯分类器的西瓜数据集 2.0 预测分类_机器学习之朴素贝叶斯

    1.贝叶斯原理 朴素贝叶斯分类(Naive Bayesian,NB)源于贝叶斯理论,是一类基于概率的分类器,其基本思想:假设样本属性之间相互独立,对于给定的待分类项,求解在此项出现的情况下其他各个类别 ...

  7. sklearn朴素贝叶斯分类器_机器学习06——朴素贝叶斯

    一.概率公式: 条件概率公式: 事件A发生的条件下,事件B发生的概率=事件A和事件B同时发生的概率/事件A发生的概率 P(AB)=P(A)*P(B|A) 事件A和事件B同时发生的概率=事件A发生的概率 ...

  8. 【火炉炼AI】机器学习013-用朴素贝叶斯分类器估算个人收入阶层

    [火炉炼AI]机器学习013-用朴素贝叶斯分类器估算个人收入阶层 (本文所使用的Python库和版本号: Python 3.5, Numpy 1.14, scikit-learn 0.19, matp ...

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

    基于概率论的分类方法:朴素贝叶斯分类 Naive Bayesian classification 这大节内容源于带你理解朴素贝叶斯分类算法,并非源于<机器学习实战>.个人认为<机器学 ...

最新文章

  1. GARFIELD@11-07-2004
  2. 【组队学习】【27期】李宏毅机器学习
  3. android杀死进程
  4. 纯 Win32 SDK程序为什么每次要获取设备描述表句柄
  5. Google发布Android Studio 1.0
  6. 在SAP Cloud Platform上消费Business partner service遇到的错误
  7. 【Pytorch神经网络实战案例】12 利用注意力机制的神经网络实现对FashionMNIST数据集图片的分类
  8. bootstrap bootstraptable 固定列_BootStrapTable分页
  9. python中dtypes_Dataframe创建及index,columns,values,dtypes等属性介绍
  10. 《小强与小明》——正在疯传的伟大的故事
  11. 民科微服务电脑版下载_天翼云桌面通用版电脑版下载|天翼云桌面通用版PC客户端 V1.23.0 官方最新版 下载_当下软件园...
  12. Unity中制作小地图
  13. ON1 Resize 2022 for Mac(图片大小修改工具)
  14. List中根据某个实体的属性去重
  15. 宝可梦火红存档修改器
  16. Duplicate entry '' for key 'username'
  17. Linux Spark安装教程
  18. 动画(重点)~~~~~
  19. Jetson Nano资料合集
  20. 占位符语法-Scala

热门文章

  1. 面试官系统精讲Java源码及大厂真题 - 22 ArrayBlockingQueue 源码解析
  2. 分布式系统面试 - 幂等性设计
  3. Linux 下开机自动重启脚本
  4. CCF 201412-2 Z字形扫描
  5. 【安卓开发】Webview简单使用
  6. C#LeetCode刷题之#414-第三大的数(Third Maximum Number)
  7. C#LeetCode刷题之#119-杨辉三角 II(Pascal‘s Triangle II)
  8. 统计相关系数r与r2的区别_什么是相关系数? 统计解释中的r值
  9. 如何使用Bootstrap Modal和jQuery AJAX创建登录功能
  10. bulma.css_如何建立一个? Bulma CSS的自适应博客设计