复现经典:《统计学习方法》第 4 章 朴素贝叶斯
本文是李航老师的《统计学习方法》[1]一书的代码复现。
作者:黄海广[2]
备注:代码都可以在github[3]中下载。
我将陆续将代码发布在公众号“机器学习初学者”,敬请关注。
代码目录
第 1 章 统计学习方法概论
第 2 章 感知机
第 3 章 k 近邻法
第 4 章 朴素贝叶斯
第 5 章 决策树
第 6 章 逻辑斯谛回归
第 7 章 支持向量机
第 8 章 提升方法
第 9 章 EM 算法及其推广
第 10 章 隐马尔可夫模型
第 11 章 条件随机场
第 12 章 监督学习方法总结
代码参考:wzyonggege[4],WenDesi[5],火烫火烫的[6]
第 4 章 朴素贝叶斯
1.朴素贝叶斯法是典型的生成学习方法。生成方法由训练数据学习联合概率分布 ,然后求得后验概率分布。具体来说,利用训练数据学习和的估计,得到联合概率分布:
=
概率估计方法可以是极大似然估计或贝叶斯估计。
2.朴素贝叶斯法的基本假设是条件独立性,
这是一个较强的假设。由于这一假设,模型包含的条件概率的数量大为减少,朴素贝叶斯法的学习与预测大为简化。因而朴素贝叶斯法高效,且易于实现。其缺点是分类的性能不一定很高。
3.朴素贝叶斯法利用贝叶斯定理与学到的联合概率模型进行分类预测。
将输入分到后验概率最大的类。
后验概率最大等价于 0-1 损失函数时的期望风险最小化。
模型:
高斯模型
多项式模型
伯努利模型
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inlinefrom sklearn.datasets import load_iris
from sklearn.model_selection import train_test_splitfrom 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
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.])
参考资料
[1] 《统计学习方法》: https://baike.baidu.com/item/统计学习方法/10430179
[2] 黄海广: https://github.com/fengdu78
[3] github: https://github.com/fengdu78/lihang-code
[4] wzyonggege: https://github.com/wzyonggege/statistical-learning-method
[5] WenDesi: https://github.com/WenDesi/lihang_book_algorithm
[6] 火烫火烫的: https://blog.csdn.net/tudaodiaozhale
关于本站
“机器学习初学者”公众号由是黄海广博士创建,黄博个人知乎粉丝23000+,github排名全球前100名(33000+)。本公众号致力于人工智能方向的科普性文章,为初学者提供学习路线和基础资料。原创作品有:吴恩达机器学习个人笔记、吴恩达深度学习笔记等。
往期精彩回顾
那些年做的学术公益-你不是一个人在战斗
适合初学者入门人工智能的路线及资料下载
吴恩达机器学习课程笔记及资源(github标星12000+,提供百度云镜像)
吴恩达深度学习笔记及视频等资源(github标星8500+,提供百度云镜像)
《统计学习方法》的python代码实现(github标星7200+)
机器学习的数学精华(在线阅读版)
备注:加入本站微信群或者qq群,请回复“加群”
复现经典:《统计学习方法》第 4 章 朴素贝叶斯相关推荐
- 统计学习方法第四章朴素贝叶斯法-李航
第4章 朴素贝叶斯法 朴素贝叶斯 (naive Bayes) 法是基于贝叶斯定理与特征条件独立假设的分类方法.对于给定的训练数据集,首先基于特征条件独立假设学习输入/输出的联合概率分布:然后基于此模型 ...
- 《统计学习方法》读书笔记——朴素贝叶斯法(公式推导+代码实现)
传送门 <统计学习方法>读书笔记--机器学习常用评价指标 <统计学习方法>读书笔记--感知机(原理+代码实现) <统计学习方法>读书笔记--K近邻法(原理+代码实现 ...
- 机器学习理论《统计学习方法》学习笔记:第四章 朴素贝叶斯法
机器学习理论<统计学习方法>学习笔记:第四章 朴素贝叶斯法 4 朴素贝叶斯法 4.1 朴素贝叶斯法的学习与分类 4.1.1 基本方法 4.1.2 后验概率最大化的含义 4.2 朴素贝叶斯法 ...
- 【机器学习实战】第4章 朴素贝叶斯(Naive Bayes)
第4章 基于概率论的分类方法:朴素贝叶斯 朴素贝叶斯 概述 贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类.本章首先介绍贝叶斯分类算法的基础--贝叶斯定理.最后,我们 ...
- (视频+图文)机器学习入门系列-第4章 朴素贝叶斯
机器学习入门系列,黄海广老师主讲.本站将持续更新,ppt.代码.课后习题见文末. 本系列的目录 01.引言 02.回归 03.逻辑回归 04.朴素贝叶斯 05.机器学习实践 06.机器学习库Sciki ...
- 《统计学基础》——第四章(朴素贝叶斯)
文章目录 1. 朴素贝叶斯法的学习与分类 1.1 基本方法 1.2 后验最大化含义 2. 朴素贝叶斯的参数估计 2.1 公式推导 3. 面试常见问题 3.1 朴素贝叶斯与LR的区别? 3.2 在估计条 ...
- 《机器学习实战》学习笔记之第四章朴素贝叶斯进行文档分类
朴素贝叶斯有两个假设: 1."朴素":特征之间相互独立,单词出现的概率相同,当然这个假设不合理 2."权重相同":每个特征等同重要,这个假设也不太合理 尽管如此 ...
- 第四章 朴素贝叶斯-垃圾邮件过滤
#朴素贝叶斯之垃圾邮件过滤 import os #----------------------1.获取数据集----------------------- import pandas as pd''' ...
- 朴素贝叶斯法分类器的Python3 实现
本篇文章是我在读了李航的<统计学习方法>后手写的算法实现之一 原理请参考统计学习方法第四章朴素贝叶斯法-李航 代码如下: # - * - coding: utf - 8 -*- # # 作 ...
最新文章
- 超好用的Swift 4.0 字符截取快速便捷方法
- spring:《spring实战》读后感一
- linux进程的堆栈空间_代码段(指令,只读)、数据段(静态变量,全局变量)、堆栈段(局部变量)、栈【转】...
- C++ Primer 5th笔记(chap 17 标准库特殊设施)正则表达式
- html云雾效果,PS中怎么做像这样的云雾效果?(有图)?
- 顺序一致性内存模型与JMM的“顺序一致性”
- Ubuntu定制live cd
- arm汇编和c语言混合编程实验报告,实验三C语言和ARM汇编混合编程指导书.doc
- java兵临城下_再谈java事件监听机制
- MYQQ复活版 20220801
- 学习Java需要掌握哪些知识,初学者必备
- 最新大淘客php加淘口令,淘口令转淘口令
- 机器学习:AI数据集划分(训练集、验证集、测试集)
- 电子琴节奏包制作_MIDI音乐制作基础必备
- English trip V2 - 8 Holidays and Birthdays Teacher:Julia Key: at on in
- 财报解读:硬件支撑思科增长,云平台何时能突围?
- 古代益智游戏汉诺塔java解决
- download.js 实现浏览器下载 而不是打开
- c语言平时成绩占总分多少,平时成绩占多少啊 大学
- [蓝桥杯][历届试题 PREV-50]对局匹配(Java)(动态规划)
热门文章
- 团队作业10——复审与事后分析(Beta版本)
- 经典排序算法 - 冒泡排序Bubble sort
- QTP之对测试用例的自动化过程的分解
- [转]RFC 2866 RADIUS Accounting -中文翻译
- GraphPad Prism 教程 :标准差与平均值的标准误差有什么区别
- 27对象的向上向下转型
- 原创:pta做题笔记:注意数组大小大一点!//准考证号,试机座位,考试座位查询
- python字符串截取_Python-变量-No3
- 机器人学习--全局定位(阿尔伯塔大学张宏教授报告)
- html 如何用图片代替单选按钮,HTML中图像代替提交按钮