自我理解贝叶斯算法也就是通过概率来判断C是属于A类还是B类,下面是具体代码(python3.5 测试通过)

文字流程解释一波

  1 )  加载训练数据和训练数据对应的类别

  2)   生成词汇集,就是所有训练数据的并集

  3)   生成训练数据的向量集,也就是只包含0和1的向量集

  4)   计算训练数据的各个概率

  5)   加载测试数据

  6)   生成测试数据的向量集

  7)   测试数据向量 * 训练数据的概率 最后求和

  8)   得出测试数据的所属类别

具体代码实现

代码实现1

from numpy import *
#贝叶斯算法 def loadDataSet():
trainData=[['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']]
labels=[0, 1, 0, 1, 0, 1] #1表示侮辱性言论,0表示正常言论
return trainData, labels #生成词汇表
def createVocabList(trainData):
VocabList = set([])
for item in trainData:
VocabList = VocabList|set(item) #取两个集合的并集
return sorted(list(VocabList)) #对结果排序后返回 #对训练数据生成只包含0和1的向量集
def createWordSet(VocabList, trainData):
VocabList_len = len(VocabList) #词汇集的长度
trainData_len = len(trainData) #训练数据的长度
WordSet = zeros((trainData_len,VocabList_len)) #生成行长度为训练数据的长度 列长度为词汇集的长度的列表
for index in range(0,trainData_len):
for word in trainData[index]:
if word in VocabList: #其实也就是,训练数据包含的单词对应的位置为1其他为0
WordSet[index][VocabList.index(word)] = 1
return WordSet #计算向量集每个的概率
def opreationProbability(WordSet, labels):
WordSet_col = len(WordSet[0])
labels_len = len(labels)
WordSet_labels_0 = zeros(WordSet_col)
WordSet_labels_1 = zeros(WordSet_col)
num_labels_0 = 0
num_labels_1 = 0
for index in range(0,labels_len):
if labels[index] == 0:
WordSet_labels_0 += WordSet[index] #向量相加
num_labels_0 += 1 #计数
else:
WordSet_labels_1 += WordSet[index] #向量相加
num_labels_1 += 1 #计数
p0 = WordSet_labels_0 * num_labels_0 / labels_len
p1 = WordSet_labels_1 * num_labels_1 / labels_len
return p0, p1 trainData, labels = loadDataSet()
VocabList = createVocabList(trainData)
train_WordSet = createWordSet(VocabList,trainData)
p0, p1 = opreationProbability(train_WordSet, labels)
#到此就算是训练完成
#开始测试
testData = [['not', 'take', 'ate', 'my', 'stupid']] #测试数据 test_WordSet = createWordSet(VocabList, testData) #测试数据的向量集
res_test_0 = []
res_test_1 = [] for index in range(0,len(p0)):
print(p0[index])
if test_WordSet[0][index] == 0:
res_test_0.append((1-p0[index]) * test_WordSet[0][index])
res_test_1.append((1-p1[index]) * test_WordSet[0][index])
else:
res_test_0.append(p0[index] * test_WordSet[0][index])
res_test_1.append(p1[index] * test_WordSet[0][index]) if sum(res_test_0) > sum(res_test_1):
print("属于0类别")
else:
print("属于1类别")

代码实现2

from numpy import *
#贝叶斯算法 def loadDataSet():
trainData=[['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']]
labels=[0, 1, 0, 1, 0, 1] #1表示侮辱性言论,0表示正常言论
return trainData, labels #生成词汇表
def createVocabList(trainData):
VocabList = set([])
for item in trainData:
VocabList = VocabList|set(item) #取两个集合的并集
return sorted(list(VocabList)) #对结果排序后返回 #对训练数据生成只包含0和1的向量集
def createWordSet(VocabList, trainData):
VocabList_len = len(VocabList) #词汇集的长度
trainData_len = len(trainData) #训练数据的长度
WordSet = zeros((trainData_len,VocabList_len)) #生成行长度为训练数据的长度 列长度为词汇集的长度的列表
for index in range(0,trainData_len):
for word in trainData[index]:
if word in VocabList: #其实也就是,训练数据包含的单词对应的位置为1其他为0
WordSet[index][VocabList.index(word)] = 1
return WordSet #计算向量集每个的概率
def opreationProbability(WordSet, labels):
WordSet_col = len(WordSet[0])
labels_len = len(labels)
WordSet_labels_0 = zeros(WordSet_col)
WordSet_labels_1 = zeros(WordSet_col)
num_labels_0 = 0
num_labels_1 = 0
for index in range(0,labels_len):
if labels[index] == 0:
WordSet_labels_0 += WordSet[index] #向量相加
num_labels_0 += 1 #计数
else:
WordSet_labels_1 += WordSet[index] #向量相加
num_labels_1 += 1 #计数
p0 = WordSet_labels_0 * num_labels_0 / labels_len
p1 = WordSet_labels_1 * num_labels_1 / labels_len
return p0, p1 trainData, labels = loadDataSet()
VocabList = createVocabList(trainData)
train_WordSet = createWordSet(VocabList,trainData)
p0, p1 = opreationProbability(train_WordSet, labels)
#到此就算是训练完成
#开始测试
testData = [['not', 'take', 'ate', 'my', 'stupid']] #测试数据 test_WordSet = createWordSet(VocabList, testData) #测试数据的向量集 res_test_0 = sum(p0 * test_WordSet)
res_test_1 = sum(p1 * test_WordSet) if res_test_0 > res_test_1:
print("属于0类别")
else:
print("属于1类别")

郑重声明下:

  第二种算法是我瞎想的,我感觉这样算也可以,可能对于当前的这种情况可以,其他情况就不一定了。两种算法前半部分都一样,只是最后的时候,方法1计算测试数据每个数出现的概率,方法2直接计算测试数据每个数发生的概率

  可能我解释的理解的也不是很到位,欢迎加Q交流 1156553820

部分参见大神的博文

  链接  https://blog.csdn.net/moxigandashu/article/details/71480251

python 贝叶斯算法的更多相关文章

  1. 朴素贝叶斯算法--python实现

    朴素贝叶斯算法要理解一下基础:    [朴素:特征条件独立   贝叶斯:基于贝叶斯定理] 1朴素贝叶斯的概念[联合概率分布.先验概率.条件概率**.全概率公式][条件独立性假设.]   极大似然估计 ...

  2. 朴素贝叶斯算法原理及Spark MLlib实例(Scala/Java/Python)

    朴素贝叶斯 算法介绍: 朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法. 朴素贝叶斯的思想基础是这样的:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,在没有其它可用信息下,我 ...

  3. 利用贝叶斯算法实现手写体识别(Python)

    在开始介绍之前,先了解贝叶斯理论知识 https://www.cnblogs.com/zhoulujun/p/8893393.html 简单来说就是:贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯 ...

  4. 朴素贝叶斯算法的python实现方法

    朴素贝叶斯算法的python实现方法 本文实例讲述了朴素贝叶斯算法的python实现方法.分享给大家供大家参考.具体实现方法如下: 朴素贝叶斯算法优缺点 优点:在数据较少的情况下依然有效,可以处理多类 ...

  5. 朴素贝叶斯算法的python实现

    朴素贝叶斯 算法优缺点 优点:在数据较少的情况下依然有效,可以处理多类别问题 缺点:对输入数据的准备方式敏感 适用数据类型:标称型数据 算法思想: 朴素贝叶斯比如我们想判断一个邮件是不是垃圾邮件,那么 ...

  6. 机器学习:python中如何使用朴素贝叶斯算法

    这里再重复一下标题为什么是"使用"而不是"实现": 首先,专业人士提供的算法比我们自己写的算法无论是效率还是正确率上都要高. 其次,对于数学不好的人来说,为了实 ...

  7. Python机器学习笔记:朴素贝叶斯算法

    朴素贝叶斯是经典的机器学习算法之一,也是为数不多的基于概率论的分类算法.对于大多数的分类算法,在所有的机器学习分类算法中,朴素贝叶斯和其他绝大多数的分类算法都不同.比如决策树,KNN,逻辑回归,支持向 ...

  8. Python机器学习算法 — 朴素贝叶斯算法(Naive Bayes)

    朴素贝叶斯算法 -- 简介 朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法.最为广泛的两种分类模型是决策树模型(Decision Tree Model)和朴素贝叶斯模型(Naive Baye ...

  9. 机器学习---用python实现朴素贝叶斯算法(Machine Learning Naive Bayes Algorithm Application)

    在<机器学习---朴素贝叶斯分类器(Machine Learning Naive Bayes Classifier)>一文中,我们介绍了朴素贝叶斯分类器的原理.现在,让我们来实践一下. 在 ...

随机推荐

  1. unity中实现监听鼠标的进入和退出某一个UI按钮

    using UnityEngine; using System.Collections; using Assets.Code.myclass; using UnityEngine.UI; using ...

  2. Building tools 为什么是主流?

    一.building tools 为什么主流? Gradle 是目前比较流行的构建工具之一,Android Studio 中集成的就是 Gradle,并针对 Android 应用开发了插件 Gradl ...

  3. 马凯军201771010116《面向对象程序设计(java)》第六周学习总结

    第一部分:理论知识学习部分 枚举是一种特殊的数据类型,之所以特殊是因为它既是一种类(class)类型却又比类型多了些特殊的约束,但是这些约束的存在也造就了枚举类型的简洁,安全性以及便捷性.创建枚举类型 ...

  4. java中main函数的String[] args

    写java程序时main函数必须有一个字符串数组即String[] args 作用:用来获取用户从命令行输入的参数 如果main函数中不写字符串数组,则将会报错

  5. TestLink测试管理工具的使用举例—第一篇

    本博客用来详细说明TestLink测试管理工具的使用方法,前两篇博客已经详细说明了TestLink工具的下载,安装及基本登录功能,本篇开始说明其工具的具体使用! 下载安装TestLink工具之后,我们 ...

  6. Font 'C:\WINDOWS\FONTS\msyh.ttc' with 'Identity-H' is not recognized

    在生成PDF使用windows自带字体雅黑的时候不停的报“Font 'C:\WINDOWS\FONTS\msyh.ttc' with 'Identity-H' is not recognized”的错 ...

  7. 剑指Offer 45. 扑克牌顺子 (其他)

    题目描述 LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决 ...

  8. Python多进程并发操作中进程池Pool的应用

    Pool类 在使用Python进行系统管理时,特别是同时操作多个文件目录或者远程控制多台主机,并行操作可以节约大量的时间.如果操作的对象数目不大时,还可以直接使用Process类动态的生成多个进程,十 ...

  9. Javascript 2.3

    声明多个变量用逗号隔开    var teacher=30,stu=40; Javascript变量允许包含 美元符号  $

  10. Python服务Dokcer化并k8s部署实例

    这篇文章记录了我试验将一个基于python的服务docker化并k8s部署的过程. 服务介绍Docker化设计业务代码改造创建docker镜像K8S部署设计yaml文件运行服务介绍这是一个用 pyth ...