本课程是中国大学慕课《机器学习》的“朴素贝叶斯”章节的课后代码。

课程地址:

https://www.icourse163.org/course/WZU-1464096179

课程完整代码:

https://github.com/fengdu78/WZU-machine-learning-course

代码修改并注释:黄海广,haiguang2000@wzu.edu.cn

1.朴素贝叶斯法是典型的生成学习方法。生成方法由训练数据学习联合概率分布,然后求得后验概率分布。具体来说,利用训练数据学习和的估计,得到联合概率分布:

概率估计方法可以是极大似然估计或贝叶斯估计。

2.朴素贝叶斯法的基本假设是条件独立性,

这是一个较强的假设。由于这一假设,模型包含的条件概率的数量大为减少,朴素贝叶斯法的学习与预测大为简化。因而朴素贝叶斯法高效,且易于实现。其缺点是分类的性能不一定很高。

3.朴素贝叶斯法利用贝叶斯定理与学到的联合概率模型进行分类预测。

将输入分到后验概率最大的类。

后验概率最大等价于0-1损失函数时的期望风险最小化。

模型:

  • 高斯模型

  • 多项式模型

  • 伯努利模型

import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from collections import Counter
import math
# data
def create_data():iris = load_iris()df = pd.DataFrame(iris.data, columns=iris.feature_names)df['label'] = iris.targetdf.columns = ['sepal length', 'sepal width', 'petal length', 'petal width', 'label']data = np.array(df.iloc[:100, :])# print(data)return data[:, :-1], data[:, -1]
X, y = create_data()
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
X_test[0], y_test[0]
(array([5.1, 3.8, 1.9, 0.4]), 0.0)

参考:https://machinelearningmastery.com/naive-bayes-classifier-scratch-python/

GaussianNB 高斯朴素贝叶斯

特征的可能性被假设为高斯

概率密度函数:

数学期望(mean):

方差:

class NaiveBayes:def __init__(self):self.model = None# 数学期望@staticmethoddef mean(X):return sum(X) / float(len(X))# 标准差(方差)def stdev(self, X):avg = self.mean(X)return math.sqrt(sum([pow(x - avg, 2) for x in X]) / float(len(X)))# 概率密度函数def gaussian_probability(self, x, mean, stdev):exponent = math.exp(-(math.pow(x - mean, 2) /(2 * math.pow(stdev, 2))))return (1 / (math.sqrt(2 * math.pi) * stdev)) * exponent# 处理X_traindef summarize(self, train_data):summaries = [(self.mean(i), self.stdev(i)) for i in zip(*train_data)]return summaries# 分类别求出数学期望和标准差def fit(self, X, y):labels = list(set(y))data = {label: [] for label in labels}for f, label in zip(X, y):data[label].append(f)self.model = {label: self.summarize(value)for label, value in data.items()}return 'gaussianNB train done!'# 计算概率def calculate_probabilities(self, input_data):# summaries:{0.0: [(5.0, 0.37),(3.42, 0.40)], 1.0: [(5.8, 0.449),(2.7, 0.27)]}# input_data:[1.1, 2.2]probabilities = {}for label, value in self.model.items():probabilities[label] = 1for i in range(len(value)):mean, stdev = value[i]probabilities[label] *= self.gaussian_probability(input_data[i], mean, stdev)return probabilities# 类别def predict(self, X_test):# {0.0: 2.9680340789325763e-27, 1.0: 3.5749783019849535e-26}label = sorted(self.calculate_probabilities(X_test).items(),key=lambda x: x[-1])[-1][0]return labeldef score(self, X_test, y_test):right = 0for X, y in zip(X_test, y_test):label = self.predict(X)if label == y:right += 1return right / float(len(X_test))
model = NaiveBayes()
model.fit(X_train, y_train)
'gaussianNB train done!'
print(model.predict([4.4,  3.2,  1.3,  0.2]))
0.0
model.score(X_test, y_test)
1.0

scikit-learn实例

from sklearn.naive_bayes import GaussianNB, BernoulliNB, MultinomialNB
# 高斯模型、伯努利模型和多项式模型
clf = GaussianNB()
clf.fit(X_train, y_train)
GaussianNB(priors=None, var_smoothing=1e-09)
clf.score(X_test, y_test)
1.0
clf.predict([[4.4,  3.2,  1.3,  0.2]])
array([0.])

参考

  • Prof. Andrew Ng. Machine Learning. Stanford University

  • 李航,《统计学习方法》,清华大学出版社

往期精彩回顾适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载黄海广老师《机器学习课程》视频课黄海广老师《机器学习课程》711页完整版课件

本站qq群955171419,加入微信群请扫码:

【机器学习】朴素贝叶斯代码练习相关推荐

  1. python机器学习-朴素贝叶斯(Naive Bayes)模型建立及评估(完整代码+实现效果)

    实现功能: python机器学习-朴素贝叶斯(Naive Bayes)模型建立及评估. 实现代码: # 导入需要的库 from warnings import simplefilter simplef ...

  2. 秒懂机器学习---朴素贝叶斯

    秒懂机器学习---朴素贝叶斯 一.总结 一句话总结: 尽管朴素贝叶斯的条件独立性假设存在一定的问题,但是朴素贝叶斯算法仍然能取得比较理想的分类预测结果. 1.朴素贝叶斯分类算法 和 KNN分类算法和决 ...

  3. 朴素贝叶斯代码实现python

    P(B)称为"先验概率",即在A事件发生之前,对B事件概率的一个判断. P(B|A)称为"后验概率",即在A事件发生之后,对B事件概率的重新评估. P(A|B) ...

  4. 机器学习 | 朴素贝叶斯法知识总结

    机器学习 | 朴素贝叶斯法理论知识 贝叶斯决策论是概率框架下实施决策的基本方法.对分类任务来说,在所有相关概率都已知的理想情况下,贝叶斯决策论考虑如何基于这些概率和误判损失来选择最优的类别标记.朴素贝 ...

  5. 机器学习朴素贝叶斯_机器学习基础朴素贝叶斯分类

    机器学习朴素贝叶斯 In the previous stories, I had given an explanation of the program for implementation of v ...

  6. 机器学习---朴素贝叶斯模型

    机器学习-朴素贝叶斯模型 1.通俗解释: 朴素贝叶斯模型的基本思路就是利用贝叶斯的后验概率公式来推算当前属性下的数据样本属于哪一个类别.直白一点说,就是在特征属性为当前取值的条件下,该样本归属于那个类 ...

  7. 机器学习朴素贝叶斯算法+tkinter库界面实现好瓜坏西瓜分类

    机器学习朴素贝叶斯算法+tkinter库界面实现好瓜坏西瓜分类 一.界面实现 from tkinter import * from tkinter import ttk import NBdef ma ...

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

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

  9. 机器学习监督学习之分类算法---朴素贝叶斯代码实践

    目录 1. 言论过滤器 1.1 项目描述 1.2 朴素贝叶斯 工作原理: 1.2.1 词条向量 1.3 开发流程: 1.4 代码实现 1.4.1 创建样本 1.4.2 构建词汇表,用于建立词集向量 1 ...

最新文章

  1. php正则邮箱验证,php正则表达式验证(邮件地址、Url地址、电话号码、邮政编码)...
  2. 大公司稳定工作和创业之间如何选择?
  3. 数据科学最常用流程CRISP-DM,终于有人讲明白了
  4. 字节跳动AI Lab 秋季提前批招聘
  5. mask rcnn算法分析_实例分割综述(单阶段/两阶段/实时分割算法汇总)
  6. Scatter matrix(散布矩阵)
  7. Jquery 实现动态添加输入框编号
  8. 动易SiteFactoryCMS 网站配置保存不了问题
  9. cat5e跑万兆_cat5e网线支持千兆吗?
  10. 【Linux入门指北】第六篇 Linux常用的开发工具
  11. pdf编辑器哪个好 怎么添加pdf文件水印
  12. NiCad克隆检测工具
  13. 清理谷歌浏览器注册表_win10注册表chrome残留无法删除如何解决
  14. Imagination发布开源项目:适配PowerVR IP的Vulkan驱动和编译器合入Mesa 3D 图形库
  15. RatingBar星星显示不全或星星图片被拉伸解决方案
  16. hadoop 报错 there appears to be a gap in the edit log. we expected txitd 1, but got txid 14444
  17. 鸡头稳如云台_稳如“鸡头”?魔爪Mini-MI智能手机三轴稳定器 开箱
  18. python两个csv表数据合并_python – 根据列中的数据合并两个CSV文件
  19. 一个工人对建站的历程。
  20. Tensorflow LMST预测股票

热门文章

  1. Java关键字synchronized详解
  2. PHP session值控制
  3. [VTK]基于VTK的任意平面切割
  4. 获取的输入内容,没有被P标签包裹的文本和元素进行处理
  5. ASP.NET Core开发-使用Nancy框架
  6. Springmvc整合mybatis
  7. NMF和SVD在推荐系统中的应用(实战)
  8. MySql项目中使用的小窍门
  9. .NET Framework 类库: Uri类
  10. 解决 QT 发送 HTTP 请求时遇到 qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed 问题