朴素贝叶斯算法学习总结
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
朴素贝叶斯算法学习总结相关推荐
- 朴素贝叶斯算法学习心得
朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率. 对缺失数据不太敏感,算法也比较简单,常用于文本分类. 分类准确度高,速度快. 朴素贝叶斯的模型是基于条件概率和联合概率为基础的. 求分类时,有个前 ...
- 使用Sklearn学习朴素贝叶斯算法
目录 1,sklearn中的贝叶斯分类器 1.1,高斯朴素贝叶斯GaussianNB 1.1.1,认识高斯朴素贝叶斯 1.1.2,参数说明 1.1.3,高斯朴素贝叶斯建模案例 1.1.4,探索高斯朴素 ...
- [Python图像处理] 二十六.图像分类原理及基于KNN、朴素贝叶斯算法的图像分类案例
该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...
- 朴素贝叶斯算法_机器学习第三篇:详解朴素贝叶斯算法
一.统计知识 01|随机事件: 1.概念 随机事件是在随机试验中,可能出现也可能不出现,而在大量重复试验中具有某种规律性的事件叫做随机事件(简称事件).随机事件通常用大写英文字母A.B.C等表示.随机 ...
- 朴素贝叶斯算法和逻辑回归算法的区别?
朴素贝叶斯算法和逻辑回归算法的区别? 1.两种算法的模型不同: Naive Bayes是一个生成模型,在计算P(y|x)之前,先要从训练数据中计算P(x|y)和P(y)的概率,从而利用贝叶斯公式计算P ...
- 机器学习第三篇:详解朴素贝叶斯算法
一.统计知识 01|随机事件: 1.概念 随机事件是在随机试验中,可能出现也可能不出现,而在大量重复试验中具有某种规律性的事件叫做随机事件(简称事件).随机事件通常用大写英文字母A.B.C等表示.随机 ...
- 朴素贝叶斯算法实现分类以及Matlab实现
开始 其实在学习机器学习的一些算法,最近也一直在看这方面的东西,并且尝试着使用Matlab进行一些算法的实现.这几天一直在看得就是贝叶斯算法实现一个分类问题.大概经过了一下这个过程: 看书→\righ ...
- 机器学习朴素贝叶斯算法_机器学习中的朴素贝叶斯算法
机器学习朴素贝叶斯算法 朴素贝叶斯算法 (Naive Bayes Algorithm) Naive Bayes is basically used for text learning. Using t ...
- 机器学习之朴素贝叶斯算法原理
朴素贝叶斯(naive Bayes)法是基于贝叶斯定理与特征条件独立假设的分类方法.它和其他绝大多数的分类算法都不同. 对于大多数的分类算法,比如决策树,KNN,逻辑回归,支持向量机等,他们都是判别方 ...
最新文章
- Nginx优化、服务器状态模块(--with-http_stub_status_module 的安装使用)
- ADB 无线连接设备
- dnf机器人猜数字奖励_DNF:周年庆策划啪啪打脸,工作人员也出错误,难道又是临时工的锅?...
- java 发送邮件添加附件_java邮件自动发送时添加网络附件
- java string返回_Java的String字符串内容总结
- Charles的iOS应用程序
- 贝叶斯集锦:MCMCpack包
- 关系抽取之远程监督算法:别再跟我提知识图谱(下篇)
- python ndarray转binary_Python 实现Image和Ndarray互相转换
- android手机抓包工具需root,android7及以上版本手机抓包
- Visual C++ 2010 Express 下载及详细安装教程(VC2010)
- MULTISIM安装下载
- SPSS 安装后不可用 没有出现授权 不显示工具栏 桌面没有快捷图标
- c语言 16 16 字库,16位汉字显示屏的字库软件(点阵字库)
- freertos demo2: LED blinky queue 发送消息
- PE头之IMAGE_FILE_HEADER解析
- Pyramidal Convolution Rethinking Convolutional Neural Networks for Visual Recognition
- 依米花播放器仿绚丽彩虹播放器程序
- PHP 手机号码运营商判断2022年最新号段
- Microsoft 365独家安全解决方案