朴素贝叶斯算法及其代码实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
朴素贝叶斯算法及其代码实现
朴素贝叶斯
朴素贝叶斯是经典的机器学习算法之⼀,也是为数不多的基于概率论的分类算法。
在机器学习分类算法中,朴素贝叶斯和其他绝多⼤的分类算法都不同,⽐如决策树,KNN,逻辑回归,⽀持向量机等,他们都是判别⽅法,也就是直接学习出特征输出Y和特征X之间的关系,要么是决策函数,要么是条件分布。
但是朴素贝叶斯却是⽣成⽅法,这种算法简单,也易于实现。
1.基本概念
朴素贝叶斯:贝叶斯分类是⼀类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。
⽽朴素贝叶斯分类时贝叶斯分类中最简单,也是最常见的⼀种分类⽅法。
贝叶斯公式:
先验概率P(X):先验概率是指根据以往经验和分析得到的概率。
后验概率P(Y|X):事情已经发⽣,要求这件事情发⽣的原因是由某个因素引起的可能性的⼤⼩,后验分布P(Y|X)表⽰事件X已经发⽣的前提下,事件Y发⽣的概率,叫做事件X发⽣下事件Y的条件概率。
后验概率P(X|Y):在已知Y发⽣后X的条件概率,也由于知道Y的取值⽽被称为X的后验概率。
朴素:朴素贝叶斯算法是假设各个特征之间相互独⽴,也是朴素这词的意思,那么贝叶斯公式中的P(X|Y)可写成:
朴素贝叶斯公式:
2,贝叶斯算法简介
贝叶斯⽅法源域它⽣前为解决⼀个“逆概”问题写的⼀篇⽂章。
其要解决的问题:
正向概率:假设袋⼦⾥⾯有N个⽩球,M个⿊球,你伸⼿进去摸⼀把,摸出⿊球的概率是多⼤
逆向概率:如果我们事先不知道袋⼦⾥⾯⿊⽩球的⽐例,⽽是闭着眼睛摸出⼀个(或者好⼏个)球,观察这些取出来的球的颜⾊之后,那么我们可以就此对袋⼦⾥⾯的⿊⽩球的⽐例做出什么样的推测。
那么什么是贝叶斯呢?
1,现实世界本⾝就是不确定的,⼈类的观察能⼒是有局限性的
2,我们⽇常观察到的只是事物表明上的结果,因此我们需要提供⼀个猜测
NaiveBayes算法,⼜称朴素贝叶斯算法。
朴素:特征条件独⽴;贝叶斯:基于贝叶斯定理。
属于监督学习的⽣成模型,实现监督,没有迭代,并有坚实的数学理论(即贝叶斯定理)作为⽀撑。
在⼤量样本下会有较好的表现,不适⽤于输⼊向量的特征条件有关联的场景。
朴素贝叶斯会单独考量每⼀维独⽴特征被分类的条件概率,进⽽综合这些概率并对其所在的特征向量做出分类预测。
因此,朴素贝叶斯的基本数据假设是:各个维度上的特征被分类的条件概率之间是相互独⽴的。
它经常被⽤于⽂本分类中,包括互联⽹新闻的分类,垃圾邮件的筛选。
朴素贝叶斯分类时⼀种⼗分简单的分类算法,叫他朴素贝叶斯分类时因为这种⽅法的思想真的很朴素,朴素贝叶斯的思想基础是这样的:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最⼤,即认为此待分类项属于哪个类别。
3.贝叶斯算法的推导过程
联合概率:表⽰两件事共同发⽣(数学概念上的交集)的概念,A和B的联合概率表⽰为
P(AnB)。
根据条件概率的定义,在事件B发⽣的条件下事件A发⽣的概率为:
同样地,在事件A发⽣的条件下事件B发⽣的概率为:
结合这两个⽅程式,我们可以得到:
这个引理有时称为概率乘法规则。
上式两边同时除以P(A),若P(A)是⾮零的,我们可以得到贝叶斯定理:
事件X在事件Y发⽣的条件下的概率,与事件Y在事件X发⽣的条件下的概率是不⼀样的;然⽽这两者是有确定关系的,贝叶斯定理就是这种关系的陈述。
4.朴素贝叶斯分类的优缺点
优点:
(1)算法逻辑简单,易于实现
(2)分类过程中时空开销⼩
缺点:
理论上,与其他分类⽅法相⽐具有最⼩的误差率。
但是实际上并⾮总是如此,这是因为朴素贝叶斯模型假设属性之间相互独⽴,这个假设在实际应⽤中往往是不成⽴的,在属性个数⽐较多或者属性之间相关性较⼤时,分类效果不好。
⽽在属性相关性较⼩时,朴素贝叶斯性能最为良好。
对于这⼀点,有半朴素贝叶斯之类的算法通过考虑部分关联性适度改进。
5.代码实现
import pandas as pd
import numpy as np
import time
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB, BernoulliNB, MultinomialNB
from sklearn.metrics import precision_score, recall_score
from sklearn.metrics import f1_score
data = np.load('datapca.npz')
word_vector = data['word_vectors']
label = data['label']
X_train, X_test, y_train, y_test = train_test_split(word_vector,label, test_size=0.8, random_state=int(time.time()))
gnb = GaussianNB()
gnb.fit(
X_train,
y_train
)
y_pred = gnb.predict(X_test)
y_pred.shape
y_test.shape
y_test[0]
right=0
for i in range(len(y_pred)):
if(y_pred[i]==y_test[i]):
right+=1
print("accuracy:%f"%(right/len(y_pred)))
print("precision:%f"%(precision_score(y_test, y_pred)))
print("recall:%f"%(recall_score(y_test, y_pred)))
print("f1:%f"%(f1_score(y_test, y_pred)))
6.数据
链接:
提取码:6666
降维前 accuracy:0.553063 降维后accuracy:0.917209
precision:0.953216 precision:0.979962
recall:0.507788 recall:0.923435
f1:0.662602 f1:0.950859
参考⽂章:
1.[Python机器学习笔记:朴素贝叶斯算法 - 战争热诚 - 博客园 ()](. 朴素贝叶斯是经典的机器学习算法之⼀,也是为数不多的基于概率论的分类算法。
.,对于⼤多数的分类算法,在所有的机器学习分类算法中,朴素贝叶斯和其他绝⼤多数的分类算法都不同。
. ⽐如决策树,KNN,逻辑回归,⽀持向量机等,他们都是判别⽅法,也就是直接学习出特征输出Y和特征X之间的关系,要么是决策函数,要么是条件分布。
. 但是朴素贝叶斯却是⽣成⽅法,该算法原理简单,也易于实现。
.)
2.带你理解朴素贝叶斯分类算法 - 忆臻的⽂章 - 知乎 . 1.。