目录

4-20 节20.贝叶斯算法原理

4-21 节21.贝叶斯代码实现

数据格式:垃圾邮件分类示例,两个类别

代码:bayes.py


4-20 节20.贝叶斯算法原理

贝叶斯解决逆向概率问题。

4-21 节21.贝叶斯代码实现

数据格式:垃圾邮件分类示例,两个类别

代码:bayes.py

import numpy as np
import re
import randomdef textParse(input_string):listofTokens = re.split(r'\W+', input_string) #可能有些字符分的不是很清楚,看见字符就切分return [tok.lower() for tok in listofTokens if len(listofTokens)>2] #大写转换为小写def creatVocablist(doclist):vocabSet = set([])for document in doclist:vocabSet = vocabSet | set(document) #求并集。即vocabSet是没有重复的集合return list(vocabSet)def setOfWord2Vec(vocablist, inputSet):returnVec  = [0]*len(vocablist)for word in inputSet:if word in vocablist:returnVec[vocablist.index(word)] = 1 #如果在inputSet中的一个词出现了两次呢??? 现在代码在returnVec中该词的位置上设置为1,没有累加return returnVecdef trainNB(trainMat, trainClass):numTrainDocs = len(trainMat)numWords = len(trainMat[0])p1 = sum(trainClass)/float(numTrainDocs) #垃圾邮件概率值p0Num = np.ones((numWords)) #做了一个平滑处理。防止概率值等于0p1Num = np.ones((numWords)) #拉普拉斯平滑p0Denom = 2p1Denom = 2 #通常情况下都是设置成类别个数for i in range(numTrainDocs):if trainClass[i] == 1: #垃圾邮件p1Num += trainMat[i]p1Denom += sum(trainMat[i])else:p0Num += trainMat[i]p0Denom += sum(trainMat[i])p1Vec = np.log(p1Num/p1Denom) #垃圾邮件中,每个词出现的概率。采用log计算,是防止多个概率值相乘后约为0。p0Vec = np.log(p0Num/p0Denom)return p0Vec, p1Vec, p1def classifyNB(wordVec,p0Vec,p1Vec,p1_class):    p1 = np.log(p1_class) + sum(wordVec*p1Vec)  #贝叶斯公式p0 = np.log(1.0 - p1_class) + sum(wordVec*p0Vec)if p0>p1:return 0else:return 1def spam():doclist = [] #dataclasslist = []for i in range(1,26):wordlist = textParse(open('email/spam/%d.txt'%i,'r').read()) #读取文本文件,并分词组成列表doclist.append(wordlist)classlist.append(1) #1表示垃圾邮件wordlist = textParse(open('email/ham/%d.txt'%i,'r').read())doclist.append(wordlist)classlist.append(0) #1表示垃圾邮件vocablist = creatVocablist(doclist) #训练集和测试集中包含的所有词,不重复trainSet = list(range(50))  #最终得训练集的索引testSet = []for i in range(10):randIndex = int(random.uniform(0,len(trainSet)))testSet.append(trainSet[randIndex])del (trainSet[randIndex])trainMat = []trainClass = []for docIndex in trainSet:trainMat.append(setOfWord2Vec(vocablist,doclist[docIndex]))  #将训练数据转换为向量形式trainClass.append(classlist[docIndex])p0Vec,p1Vec,p1 = trainNB(np.array(trainMat),np.array(trainClass))errorCount = 0for docIndex in testSet:wordVec = setOfWord2Vec(vocablist,doclist[docIndex])if classifyNB(np.array(wordVec),p0Vec,p1Vec,p1) != classlist[docIndex]:errorCount+=1print ('当前10个测试样本,错了:',errorCount) if __name__ == '__main__':spam()

机器学习4. 贝叶斯相关推荐

  1. 秒懂机器学习---朴素贝叶斯

    秒懂机器学习---朴素贝叶斯 一.总结 一句话总结: 尽管朴素贝叶斯的条件独立性假设存在一定的问题,但是朴素贝叶斯算法仍然能取得比较理想的分类预测结果. 1.朴素贝叶斯分类算法 和 KNN分类算法和决 ...

  2. 机器学习朴素贝叶斯算法+tkinter库界面实现好瓜坏西瓜分类

    机器学习朴素贝叶斯算法+tkinter库界面实现好瓜坏西瓜分类 一.界面实现 from tkinter import * from tkinter import ttk import NBdef ma ...

  3. 机器学习朴素贝叶斯算法_机器学习中的朴素贝叶斯算法

    机器学习朴素贝叶斯算法 朴素贝叶斯算法 (Naive Bayes Algorithm) Naive Bayes is basically used for text learning. Using t ...

  4. 机器学习: 贝叶斯算法的应用

    机器学习: 贝叶斯算法的应用 背景 数据集及源码 互联网经济蓬勃发展的背景下,食品经营模式发生了天翻地覆的变化,人们的消费习惯也悄然发生了转变.通过点击手机APP上自己喜欢的食品, 这些食品就能按时准 ...

  5. python机器学习-朴素贝叶斯(Naive Bayes)模型建立及评估(完整代码+实现效果)

    实现功能: python机器学习-朴素贝叶斯(Naive Bayes)模型建立及评估. 实现代码: # 导入需要的库 from warnings import simplefilter simplef ...

  6. 机器学习 | 朴素贝叶斯法知识总结

    机器学习 | 朴素贝叶斯法理论知识 贝叶斯决策论是概率框架下实施决策的基本方法.对分类任务来说,在所有相关概率都已知的理想情况下,贝叶斯决策论考虑如何基于这些概率和误判损失来选择最优的类别标记.朴素贝 ...

  7. 机器学习朴素贝叶斯_机器学习基础朴素贝叶斯分类

    机器学习朴素贝叶斯 In the previous stories, I had given an explanation of the program for implementation of v ...

  8. 机器学习34:贝叶斯先验概率

    机器学习34:贝叶斯先验概率: 理解贝叶斯先验概率是为了更好的理解正则化的概念. (1)贝叶斯先验概率和贝叶斯后验概率: 1.先验概率是指根据以往经验和分析得到的概率,即在事情发生之前事情发生的概率. ...

  9. 机器学习---朴素贝叶斯模型

    机器学习-朴素贝叶斯模型 1.通俗解释: 朴素贝叶斯模型的基本思路就是利用贝叶斯的后验概率公式来推算当前属性下的数据样本属于哪一个类别.直白一点说,就是在特征属性为当前取值的条件下,该样本归属于那个类 ...

  10. 【机器学习】贝叶斯机器学习:经典模型与代码实现

    贝叶斯机器学习 Author:louwill Machine Learning Lab 贝叶斯定理是概率模型中最著名的理论之一,在机器学习中也有着广泛的应用.基于贝叶斯理论常用的机器学习概率模型包括朴 ...

最新文章

  1. mvc3 RenderAction传参问题
  2. SAP MM 物料主数据Plant Data Storage 1视图里的Storage Bin
  3. Windos 解决Flutter 报错
  4. lesson2-python3数据类型
  5. leetcode-26-删除排序数组中的重复项
  6. why I get 415 error for my http post Service request creation in JMeter
  7. 分布式系统事务一致性解决方案大对比,谁最好使?
  8. php 如何配置 redis,php 如何设置redis
  9. flutter网络请求dio的get、post、上传文件、下载文件总结
  10. 跨域的另一种解决方案——CORS(Cross-Origin Resource Sharing)跨域资源共享
  11. java技术学习路线(自用)
  12. 内联元素与内联块状元素
  13. 剑指:合并两个排序的链表
  14. 干货分享:如何把APP软文推广做到好
  15. Windows XP 启动过程jjhou
  16. 中国的Palantir诞生,开启大数据关联挖掘的新时代
  17. 浏览器获取图片出现跨域问题
  18. 如何快速有效的复习教师资格证?
  19. python将矩阵顺时针旋转90度_在Python中将方形矩阵逆时针旋转90度的程序
  20. 笔记本RTX3060比2060性能高多少 RTX3060和2060笔记本差距多大

热门文章

  1. 团队第一次作业(软工C#造梦厂)
  2. log4net进阶手札(二):基本用法
  3. 【Hive】(九)Hive 窗口函数总结
  4. AGNES 数据挖掘算法 C语言
  5. NSIS ERROR解决方法
  6. 开唐贡献榜(凌烟阁二十四功臣)
  7. 信创云“华山论剑” 五强鼎力谁与争锋?
  8. 【Python实战】 ---- 爬虫 爬取LOL英雄皮肤图片
  9. python绘制蚊香形_Python requests发送post请求的一些疑点
  10. H.266视频编解码标准(H.266的新技术介绍)