算法优劣

  • 参考刘建平老师的博客:朴素贝叶斯算法原理小结

优点:

  1. 朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。

  2. 对小规模的数据表现很好,能个处理多分类任务,适合增量式训练,尤其是数据量超出内存时,我们可以一批批的去增量训练。

  3. 对缺失数据不太敏感,算法也比较简单,常用于文本分类。

缺点

  1. 理论上,朴素贝叶斯模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为朴素贝叶斯模型给定输出类别的情况下,假设属性之间相互独立,这个假设在实际应用中往往是不成立的,在属性个数比较多或者属性之间相关性较大时,分类效果不好。而在属性相关性较小时,朴素贝叶斯性能最为良好。对于这一点,有半朴素贝叶斯之类的算法通过考虑部分关联性适度改进。

  2. 需要知道先验概率,且先验概率很多时候取决于假设,假设的模型可以有很多种,因此在某些时候会由于假设的先验模型的原因导致预测效果不佳。

  3. 由于我们是通过先验和数据来决定后验的概率从而决定分类,所以分类决策存在一定的错误率。

  4. 对输入数据的表达形式很敏感。

算法实现

说明

  • scikit-learn中,一共有3个朴素贝叶斯的分类算法类。分别是GaussianNBMultinomialNBBernoulliNB
  • GaussianNB:先验为高斯分布的朴素贝叶斯
  • MultinomialNB:先验为多项式分布的朴素贝叶斯
  • BernoulliNB:先验为伯努利分布的朴素贝叶斯。

数据准备

import pandas as pd
import numpy as np
X = np.array([[1.14, 1.78],[1.18, 1.96],[1.20, 1.86],[1.26, 2.00],[1.28, 2.00],[1.30, 1.96],[1.24, 1.72],[1.36, 1.74],[1.38, 1.64],[1.38, 1.82],[1.38, 1.90],[1.40, 1.70],[1.48, 1.82],[1.54, 1.82],[1.56, 2.08]])
Y = np.hstack((np.ones(6), np.ones(9)*2)) #数组合并

GaussianNB预测

from sklearn.naive_bayes import GaussianNB
clf_Ga = GaussianNB()
clf_Ga.fit(X, Y)
print("预测结果")
print(clf_Ga.predict([[1.24, 1.80]]))
print("样本为1类的概率")
print(clf_Ga.predict_proba([[1.24, 1.80]]))
print("样本为2类的概率")
print(clf_Ga.predict_log_proba([[1.24, 1.80]]))

输出:

预测结果
[1.]
样本为1类的概率
[[0.7236103 0.2763897]]
样本为2类的概率
[[-0.3235023  -1.28594344]]
  • 样本为1的概率大于样本为2的概率,所以认为该样本为1类
print("预测结果")
print(clf_Ga.predict([[1.29, 1.81],[1.43,2.03]]))

输出:

预测结果
[2. 2.]

MultinomialNB预测

  • 这里使用GridSearchCV函数进行网格搜索交叉检验调参,评估模型的分数为accuracy即准确率。
  • 调整的参数分别为:alpha(常数λ\lambdaλ),fit_prior(是否考虑先验概率)
from sklearn.naive_bayes import MultinomialNB
clf_Mu = MultinomialNB()
from sklearn.model_selection import GridSearchCV
param_grid = [{'alpha':np.arange(0.9,1.1,0.1),'fit_prior':['True','False']}]
grid_search = GridSearchCV(clf_Mu, param_grid, cv = 3,scoring = 'accuracy',return_train_score = True)
grid_search.fit(X,Y)

输出最优参

grid_search.best_params_

输出:

{'alpha': 0.9, 'fit_prior': 'True'}

查看网格搜索模型分数

cvres = grid_search.cv_results_
for accuracy,params in zip(cvres["mean_test_score"],cvres["params"]):print("{:.2}".format(accuracy),params)

输出:

0.6 {'alpha': 0.9, 'fit_prior': 'True'}
0.6 {'alpha': 0.9, 'fit_prior': 'False'}
0.6 {'alpha': 1.0, 'fit_prior': 'True'}
0.6 {'alpha': 1.0, 'fit_prior': 'False'}
0.6 {'alpha': 1.1, 'fit_prior': 'True'}
0.6 {'alpha': 1.1, 'fit_prior': 'False'}
  • 这里可能是因为样本只有15个,导致参数不管如何变化对准确率都没有太大影响。

预测结果

final_model = grid_search.best_estimator_X_test = np.array([[1.24, 1.80],[1.29, 1.81],[1.43,2.03]])
X_test_prepared = final_model.predict(X_test)
print("预测结果")
print(X_test_prepared)

输出:

预测结果
[2. 2. 2.]

结语

  • 两种方法在对第1个样本的预测上有不同,这里因为样本数量太少,不做深究。

朴素贝叶斯分类(python实现)相关推荐

  1. 朴素贝叶斯分类(Python)

    一.贝叶斯公式及分类 贝叶斯公式是在条件概率和全概率公式的基础上得来的,详细请参考: https://blog.csdn.net/Hearthougan/article/details/7517421 ...

  2. 朴素贝叶斯python实现预测_Python实现朴素贝叶斯分类器的方法详解

    本文实例讲述了Python实现朴素贝叶斯分类器的方法.分享给大家供大家参考,具体如下: 贝叶斯定理 贝叶斯定理是通过对观测值概率分布的主观判断(即先验概率)进行修正的定理,在概率论中具有重要地位. 先 ...

  3. 【python数据挖掘课程】二十一.朴素贝叶斯分类器详解及中文文本舆情分析

    这是<Python数据挖掘课程>系列文章,也是我上课内容及书籍中的一个案例.本文主要讲述朴素贝叶斯分类算法并实现中文数据集的舆情分析案例,希望这篇文章对大家有所帮助,提供些思路.内容包括: ...

  4. (数据科学学习手札30)朴素贝叶斯分类器的原理详解Python与R实现

    一.简介 要介绍朴素贝叶斯(naive bayes)分类器,就不得不先介绍贝叶斯决策论的相关理论: 贝叶斯决策论(bayesian decision theory)是概率框架下实施决策的基本方法.对分 ...

  5. 朴素贝叶斯分类器python_朴素贝叶斯分类器及Python实现

    贝叶斯定理 贝叶斯定理是通过对观测值概率分布的主观判断(即先验概率)进行修正的定理,在概率论中具有重要地位. 先验概率分布(边缘概率)是指基于主观判断而非样本分布的概率分布,后验概率(条件概率)是根据 ...

  6. 朴素贝叶斯分类器的python实现

    徒手实现一个贝叶斯分类器 引子 代码 小结 引子 朴素贝叶斯分类器顾名思义是以贝叶斯公式为基础的分类器,其将后验概率转换为先验概率和不同类的条件概率的乘积,再通过比较不同的类别下该乘积的大小实现分类. ...

  7. python数据挖掘课程】二十一.朴素贝叶斯分类器详解及中文文本舆情分析

    #2018-04-06 13:52:30 April Friday the 14 week, the 096 day SZ SSMR python数据挖掘课程]二十一.朴素贝叶斯分类器详解及中文文本舆 ...

  8. python推荐系统算法朴素贝叶斯_机器学习经典算法之朴素贝叶斯分类

    很多人都听说过贝叶斯原理,在哪听说过?基本上是在学概率统计的时候知道的.有些人可能会说,我记不住这些概率论的公式,没关系,我尽量用通俗易懂的语言进行讲解. 贝叶斯原理是英国数学家托马斯·贝叶斯提出的. ...

  9. [转载] 朴素贝叶斯python实现预测_Python实现朴素贝叶斯分类器的方法详解

    参考链接: Python朴素贝叶斯分类器 本文实例讲述了Python实现朴素贝叶斯分类器的方法.分享给大家供大家参考,具体如下: 贝叶斯定理 贝叶斯定理是通过对观测值概率分布的主观判断(即先验概率)进 ...

  10. 基于朴素贝叶斯分类器的西瓜数据集 2.0 预测分类_第十章:利用Python实现朴素贝叶斯模型

    免责声明:本文是通过网络收集并结合自身学习等途径合法获取,仅作为学习交流使用,其版权归出版社或者原创作者所有,并不对涉及的版权问题负责.若原创作者或者出版社认为侵权,请联系及时联系,我将立即删除文章, ...

最新文章

  1. 如何使用CocoStudio场景编辑器制作魔卡幻想
  2. tomcat日志切割-logrotate
  3. MFC多线程失败:Create Instance failed
  4. 阿里开源深度学习框架XDL,面向高维稀疏数据,支持千亿参数训练规模
  5. 2.6配置自定义PropertyEditors
  6. Atitit 高等教育 中产教育 普通教育的异同 目录 1. 顶层精英教育 1 1.1. 领导力 影响力 1 1.2. 国王规范 1 1.3. 宗教领袖 1 1.4. 决策能力 1 1.5. 国际视
  7. 手把手教你Photoshop中的图层混合模式(一)
  8. 【Windows Server 2019】存储服务器的配置和管理——iSCSI的安装和配置(下)
  9. 比伯女友首谈私生子事件 挺男友:事实胜于诡辩
  10. 手机python代码查询四六级准考证_四六级查准考证号的网站是什么
  11. 用HTML5+CSS3实现qq会员页面的仿制
  12. git submodule添加和删除
  13. C语言中 枚举变量与枚举值,枚举类型变量再赋值问题
  14. 字符串复制的两种方法
  15. 拍照前打闪的注意事项
  16. DBeaver Enterprise 7.1 企业版注册方法
  17. 草根在测试行业如何杀出一条血路(2)-关于入行的那些心酸经历
  18. mongodb中文网
  19. 银行智能监控平台方案
  20. Foxbase關聯表查詢

热门文章

  1. playbook中的block rescue always
  2. 基于android的智慧停车app
  3. 夏季旅游度假照片展示短视频AE模板
  4. 做自媒体短视频,最简单的赚钱方法,就是做流量收益
  5. java获取一天的开始时间和结束时间
  6. zabbix3.4接入微信报警
  7. 2018 谷歌 Google I/O 简介 总结
  8. html百分比单位,百分比表示什么 请问百分之几,怎样算的,什么意思?
  9. 瀑布模型、快速原型模型、螺旋模型优缺点
  10. PyCharm中的问题记录:failed to sync ide settings. click to sync