1、朴素贝叶斯算法之朴素的含义:
朴素是指假定数据的特征变量之间是相互独立的。

2、朴素贝叶斯算法分类:
将实例分类到后验概率最大的类别当中。
假设实例数据有3个特征向量:{A1,A2,A3},Cj为分类当中的第j个类,后验概率的计算公式为:

假设j的取值为0~n,那么计算出所有的P(Cj | A1A2A3),结果最大的所对应的分类即为实例的分类。

比较后验概率大小的问题,也可以简化为比较P(A1A2A3 | Cj) P(Cj)的问题。

3、朴素贝叶斯分类是计算实例属于各个分类的概率,最后给出最优的猜测分类结果,所以是一种软分类,而决策树要求分类器作出一个分类的明确答案,属于硬分类。

4、在实现朴素贝叶斯算法时,下溢出的问题可以用取对数的方法解决,词袋模型也优于词集模型。

5、朴素贝叶斯算法实现:

from numpy import *
from math import logdef 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]return postingList, classVecdef createVocablist(dataset):# 创建不重复词的列表vocabSet = set([])for document in dataset:vocabSet = vocabSet | set(document)return list(vocabSet)def wordsVec(vocablist, inputset):# 生成文档向量vec = [0] * len(vocablist)for word in inputset:if word in vocablist:vec[vocablist.index(word)] = 1else:print('The word: %s is not in my Vocabulary' % word)return vecdef trainNB(trainset, traincategories):# 训练朴素贝叶斯分类器p1num = ones(len(trainset[0]))p0num = ones(len(trainset[0]))p1denom = 2.0p0denom = 2.0for i in range(len(trainset)):if traincategories[i] == 1:p1num += trainset[i]p1denom += sum(trainset[i])else:p0num += trainset[i]p0denom += sum(trainset[i])p1vec = log(p1num / p1denom)p0vec = log(p0num / p0denom)pAbusive = sum(traincategories) / (len(trainset))return p1vec, p0vec, pAbusivedef classifyNB(vecClassiify, p0vec, p1vec, pclass):# 朴素贝叶斯分类函数p1 = sum(vecClassiify * p1vec) + log(pclass)p0 = sum(vecClassiify * p0vec) + log(1.0 - pclass)if p1 > p0:return 1else:return 0def testingNB():# 输出实例的分类结果inputset, classes = loadDataset()myvolcablist = createVocablist(inputset)trainmat = []for doc in inputset:trainmat.append(wordsVec(myvolcablist, doc))p1V, p0V, pA = trainNB(trainmat, classes)testEntry = ['love', 'my', 'dalmation']thisDoc = wordsVec(myvolcablist, testEntry)print(testEntry, 'classified as :', classifyNB(thisDoc, p0V, p1V, pA))

最后运行代码:

print(testingNB()
['love', 'my', 'dalmation'] classified as: 0

6、用sklearn工具包实现文档分类:

import os
import jieba
import warnings
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn import metricswarnings.filterwarnings('ignore')def cut_words(file_path):# 对文本进行切词text_with_spaces = ''text = open(file_path, 'r', encoding='gb18030').read()textcut = jieba.cut(text)for word in textcut:text_with_spaces += word +' 'return text_with_spacesdef loadfile(file_dir, label):# 将路径下的所有文件都加载files = os.listdir(file_dir)words_list = []labels_list = []for file in files:file_path = file_dir + '/' + filewords_list.append(cut_words(file_path))labels_list.append(label)return words_list, labels_list# 训练数据
train_words_list1, train_labels1 = loadfile('text_classification-master/text classification/train/女性', '女性')
train_words_list2, train_labels2 = loadfile('text_classification-master/text classification/train/体育', '体育')
train_words_list3, train_labels3 = loadfile('text_classification-master/text classification/train/文学', '文学')
train_words_list4, train_labels4 = loadfile('text_classification-master/text classification/train/校园', '校园')train_words_list = train_words_list1 + train_words_list2 + train_words_list3 + train_words_list4
train_labels = train_labels1 + train_labels2 + train_labels3 + train_labels4# 测试数据
test_words_list1, test_labels1 = loadfile('text_classification-master/text classification/test/女性', '女性')
test_words_list2, test_labels2 = loadfile('text_classification-master/text classification/test/体育', '体育')
test_words_list3, test_labels3 = loadfile('text_classification-master/text classification/test/文学', '文学')
test_words_list4, test_labels4 = loadfile('text_classification-master/text classification/test/校园', '校园')test_words_list = test_words_list1 + test_words_list2 + test_words_list3 + test_words_list4
test_labels = test_labels1 + test_labels2 + test_labels3 + test_labels4stop_words = open('text_classification-master/text classification/stop/stopword.txt', 'r', encoding='utf-8').read()
stop_words = stop_words.encode('utf-8').decode('utf-8-sig') #列表头部\ufeff处理
stop_words = stop_words.split('\n') # 根据分隔符分隔# 计算单词权重
tf = TfidfVectorizer(stop_words=stop_words, max_df=0.5)
train_features = tf.fit_transform(train_words_list)
test_features = tf.transform(test_words_list)# 多项式贝叶斯分类器
clf = MultinomialNB(alpha=0.001).fit(train_features, train_labels)
predicted_labels = clf.predict(test_features)# 计算准确率
print('准确率为:{}'.format(metrics.accuracy_score(test_labels, predicted_labels)))

输出结果为:

准确率为: 0.9104477611940298

朴素贝叶斯算法学习总结相关推荐

  1. 朴素贝叶斯算法学习心得

    朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率. 对缺失数据不太敏感,算法也比较简单,常用于文本分类. 分类准确度高,速度快. 朴素贝叶斯的模型是基于条件概率和联合概率为基础的. 求分类时,有个前 ...

  2. 使用Sklearn学习朴素贝叶斯算法

    目录 1,sklearn中的贝叶斯分类器 1.1,高斯朴素贝叶斯GaussianNB 1.1.1,认识高斯朴素贝叶斯 1.1.2,参数说明 1.1.3,高斯朴素贝叶斯建模案例 1.1.4,探索高斯朴素 ...

  3. [Python图像处理] 二十六.图像分类原理及基于KNN、朴素贝叶斯算法的图像分类案例

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  4. 朴素贝叶斯算法_机器学习第三篇:详解朴素贝叶斯算法

    一.统计知识 01|随机事件: 1.概念 随机事件是在随机试验中,可能出现也可能不出现,而在大量重复试验中具有某种规律性的事件叫做随机事件(简称事件).随机事件通常用大写英文字母A.B.C等表示.随机 ...

  5. 朴素贝叶斯算法和逻辑回归算法的区别?

    朴素贝叶斯算法和逻辑回归算法的区别? 1.两种算法的模型不同: Naive Bayes是一个生成模型,在计算P(y|x)之前,先要从训练数据中计算P(x|y)和P(y)的概率,从而利用贝叶斯公式计算P ...

  6. 机器学习第三篇:详解朴素贝叶斯算法

    一.统计知识 01|随机事件: 1.概念 随机事件是在随机试验中,可能出现也可能不出现,而在大量重复试验中具有某种规律性的事件叫做随机事件(简称事件).随机事件通常用大写英文字母A.B.C等表示.随机 ...

  7. 朴素贝叶斯算法实现分类以及Matlab实现

    开始 其实在学习机器学习的一些算法,最近也一直在看这方面的东西,并且尝试着使用Matlab进行一些算法的实现.这几天一直在看得就是贝叶斯算法实现一个分类问题.大概经过了一下这个过程: 看书→\righ ...

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

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

  9. 机器学习之朴素贝叶斯算法原理

    朴素贝叶斯(naive Bayes)法是基于贝叶斯定理与特征条件独立假设的分类方法.它和其他绝大多数的分类算法都不同. 对于大多数的分类算法,比如决策树,KNN,逻辑回归,支持向量机等,他们都是判别方 ...

最新文章

  1. Nginx优化、服务器状态模块(--with-http_stub_status_module 的安装使用)
  2. ADB 无线连接设备
  3. dnf机器人猜数字奖励_DNF:周年庆策划啪啪打脸,工作人员也出错误,难道又是临时工的锅?...
  4. java 发送邮件添加附件_java邮件自动发送时添加网络附件
  5. java string返回_Java的String字符串内容总结
  6. Charles的iOS应用程序
  7. 贝叶斯集锦:MCMCpack包
  8. 关系抽取之远程监督算法:别再跟我提知识图谱(下篇)
  9. python ndarray转binary_Python 实现Image和Ndarray互相转换
  10. android手机抓包工具需root,android7及以上版本手机抓包
  11. Visual C++ 2010 Express 下载及详细安装教程(VC2010)
  12. MULTISIM安装下载
  13. SPSS 安装后不可用 没有出现授权 不显示工具栏 桌面没有快捷图标
  14. c语言 16 16 字库,16位汉字显示屏的字库软件(点阵字库)
  15. freertos demo2: LED blinky queue 发送消息
  16. PE头之IMAGE_FILE_HEADER解析
  17. Pyramidal Convolution Rethinking Convolutional Neural Networks for Visual Recognition
  18. 依米花播放器仿绚丽彩虹播放器程序
  19. PHP 手机号码运营商判断2022年最新号段
  20. Microsoft 365独家安全解决方案

热门文章

  1. 【计算机图形学01】坐标变换
  2. Linux学习-98-关机操作命令
  3. 求大神指点,unity多视角漫游是什么意思
  4. 如何解决Web高并发?
  5. 2018信用北京暨信用中关村高峰论坛即将开启
  6. c# TopShelf windows 系统服务利器
  7. C++微服务RPC框架,一文带你彻底搞懂 RPC
  8. 用fft对信号进行频谱分析实验报告_如何对频谱或矢量信号分析仪进行远程编程?...
  9. 盛世昊通携手国澳(深圳)新能源有限公司打造充电桩产业链
  10. linux 下安装好的软件打包,关于打包软件的安装