Python机器学习算法实现

Author:louwill

今天要讲的算法是朴素贝叶斯(Naive Bayes)。相较于之前的支持向量机等模型,朴素贝叶斯就要简单多了。朴素贝叶斯是一种基于贝叶斯定理和特征条件独立假设的分类算法。

简单而言,对于给定的训练数据,朴素贝叶斯先基于特征条件独立假设学习输入和输出的联合概率分布,然后基于此分布对于新的实例,利用贝叶斯定理计算出最大的后验概率。朴素贝叶斯不会直接学习输入输出的联合概率分布,而是通过学习类的先验概率类条件概率来完成。

所谓朴素贝叶斯中朴素的含义,即特征条件独立假设,条件独立假设就是说用于分类的特征在类确定的条件下都是条件独立的。这一假设使得朴素贝叶斯的学习成为可能。朴素贝叶斯算法具体步骤如下。

首先计算类先验概率:

类先验概率可直接用极大似然估计进行计算。

然后计算类条件概率:

最后给定新的实例,计算其对应的最大后验概率,然后判断其所属的类别:

以上就是朴素贝叶斯的基本原理。下面基于numpy和pandas来实现朴素贝叶斯算法。

导入package:

import numpy as npimport pandas as pd

创建示例数据集:

x1 = [1,1,1,1,1,2,2,2,2,2,3,3,3,3,3]x2 = ['S','M','M','S','S','S','M','M','L','L','L','M','M','L','L']y = [-1,-1,1,1,-1,-1,-1,1,1,1,1,1,1,1,-1]df = pd.DataFrame({'x1':x1, 'x2':x2, 'y':y})df.head()

取出特征和标签:

X = df[['x1', 'x2']]y = df[['y']]

定义朴素贝叶斯训练过程:

def nb_fit(X, y):    classes = y[y.columns[0]].unique()    class_count = y[y.columns[0]].value_counts()    class_prior = class_count/len(y)        prior = dict()    for col in X.columns:        for j in classes:            p_x_y = X[(y==j).values][col].value_counts()            for i in p_x_y.index:                prior[(col, i, j)] = p_x_y[i]/class_count[j]    return classes, class_prior, prior

拟合示例如下:

最后定义预测函数:

def predict(X_test):    res = []    for c in classes:        p_y = class_prior[c]        p_x_y = 1        for i in X_test.items():            p_x_y *= prior[tuple(list(i)+[c])]        res.append(p_y*p_x_y)    return classes[np.argmax(res)]

给定测试实例并进行预测:

X_test = {'x1': 2, 'x2': 'S'}classes, class_prior, prior = nb_fit(X, y)print('测试数据预测类别为:', predict(X_test))

最后也可以定义一个Naive_Bayes的类对上述过程进行封装:

import numpy as  npimport pandas as pdclass Naive_Bayes:    def __init__(self):        pass    # 朴素贝叶斯训练过程    def nb_fit(self, X, y):        classes = y[y.columns[0]].unique()        class_count = y[y.columns[0]].value_counts()        # 类先验概率        class_prior = class_count / len(y)        # 计算类条件概率        prior = dict()        for col in X.columns:            for j in classes:                p_x_y = X[(y == j).values][col].value_counts()                for i in p_x_y.index:                    prior[(col, i, j)] = p_x_y[i] / class_count[j]        return classes, class_prior, prior    # 预测新的实例    def predict(self, X_test):        res = []        for c in classes:            p_y = class_prior[c]            p_x_y = 1            for i in X_test.items():                p_x_y *= prior[tuple(list(i) + [c])]            res.append(p_y * p_x_y)        return classes[np.argmax(res)]if __name__ == "__main__":    x1 = [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3]    x2 = ['S', 'M', 'M', 'S', 'S', 'S', 'M', 'M', 'L', 'L', 'L', 'M', 'M', 'L', 'L']    y = [-1, -1, 1, 1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, -1]    df = pd.DataFrame({'x1': x1, 'x2': x2, 'y': y})    X = df[['x1', 'x2']]    y = df[['y']]    X_test = {'x1': 2, 'x2': 'S'}    nb = Naive_Bayes()    classes, class_prior, prior = nb.nb_fit(X, y)    print('测试数据预测类别为:', nb.predict(X_test))

以上就是本节内容,下一讲我们来看看贝叶斯分类的另一种形态——贝叶斯网络。完整代码文件和数据可参考笔者GitHub地址:

https://github.com/luwill/machine-learning-code-writing

参考资料:

https://github.com/SmirkCao/Lihang

李航 统计学习方法

往期精彩:

数学推导+纯Python实现机器学习算法10:线性不可分支持向量机

数学推导+纯Python实现机器学习算法8-9:线性可分支持向量机和线性支持向量机

数学推导+纯Python实现机器学习算法6:感知机

数学推导+纯Python实现机器学习算法5:决策树之CART算法

数学推导+纯Python实现机器学习算法4:决策树之ID3算法

数学推导+纯Python实现机器学习算法3:k近邻

数学推导+纯Python实现机器学习算法2:逻辑回归

数学推导+纯Python实现机器学习算法1:线性回归

往期精彩回顾

适合初学者入门人工智能的路线及资料下载

机器学习及深度学习笔记等资料打印

机器学习在线手册

深度学习笔记专辑

《统计学习方法》的代码复现专辑

AI基础下载

机器学习的数学基础专辑

获取一折本站知识星球优惠券,复制链接直接打开:

https://t.zsxq.com/yFQV7am

本站qq群1003271085。

加入微信群请扫码进群:

python中class_【机器学习基础】数学推导+纯Python实现机器学习算法11:朴素贝叶斯...相关推荐

  1. 【机器学习基础】数学推导+纯Python实现机器学习算法30:系列总结与感悟

    Python机器学习算法实现 Author:louwill Machine Learning Lab 终于到了最后的总结.从第一篇线性回归的文章开始到现在,已经接近有两年的时间了.当然,也不是纯写这3 ...

  2. 【机器学习基础】数学推导+纯Python实现机器学习算法24:HMM隐马尔可夫模型

    Python机器学习算法实现 Author:louwill Machine Learning Lab HMM(Hidden Markov Model)也就是隐马尔可夫模型,是一种由隐藏的马尔可夫链随机 ...

  3. 【机器学习基础】数学推导+纯Python实现机器学习算法28:CRF条件随机场

    Python机器学习算法实现 Author:louwill Machine Learning Lab 本文我们来看一下条件随机场(Conditional Random Field,CRF)模型.作为概 ...

  4. 【机器学习基础】数学推导+纯Python实现机器学习算法27:EM算法

    Python机器学习算法实现 Author:louwill Machine Learning Lab 从本篇开始,整个机器学习系列还剩下最后三篇涉及导概率模型的文章,分别是EM算法.CRF条件随机场和 ...

  5. 【机器学习基础】数学推导+纯Python实现机器学习算法26:随机森林

    Python机器学习算法实现 Author:louwill Machine Learning Lab 自从第14篇文章结束,所有的单模型基本就讲完了.而后我们进入了集成学习的系列,整整花了5篇文章的篇 ...

  6. 【机器学习基础】数学推导+纯Python实现机器学习算法25:CatBoost

    Python机器学习算法实现 Author:louwill Machine Learning Lab 本文介绍GBDT系列的最后一个强大的工程实现模型--CatBoost.CatBoost与XGBoo ...

  7. 【机器学习基础】数学推导+纯Python实现机器学习算法24:LightGBM

    Python机器学习算法实现 Author:louwill Machine Learning Lab 第17讲我们谈到了竞赛大杀器XGBoost,本篇我们来看一种比XGBoost还要犀利的Boosti ...

  8. 【机器学习基础】数学推导+纯Python实现机器学习算法23:kmeans聚类

    Python机器学习算法实现 Author:louwill Machine Learning Lab 聚类分析(Cluster Analysis)是一类经典的无监督学习算法.在给定样本的情况下,聚类分 ...

  9. 【机器学习基础】数学推导+纯Python实现机器学习算法22:最大熵模型

    Python机器学习算法实现 Author:louwill Machine Learning Lab 最大熵原理(Maximum Entropy Principle)是一种基于信息熵理论的一般原理,在 ...

最新文章

  1. Golang面向过程编程-函数
  2. 2019-02-26-算法-进化(字符串转换成整数)
  3. “这辈子不可能打工男子”出狱了,司法所将重点关注,网友:《今瓶没》今日上映!...
  4. 科技行业的起步时代已结束
  5. mysql5.7.1 zip版本安装记录
  6. 开心消消乐html5游戏在线玩,开心消消乐在线玩
  7. GlobalMapper20坐标转换
  8. R语言教程(1)——基础知识
  9. 围观了张一鸣近10年的微博,我整理了这231条干货
  10. java更改文件编码方式_java 更改文件编码
  11. 大写汉字转阿拉伯数字c语言,将输入的阿拉伯数字变换的汉字的大写输出
  12. MapBox使用之路线规划
  13. Ubuntu 12.04安装QQ2012(12.10也可以,试过了的,其他版本没事过)
  14. 即时聊天工具混战中国
  15. 洛必达法则的使用条件
  16. java web—水果店管理系统
  17. 论文研读——机器人导航深度局部轨迹重规划与控制
  18. Map接口的常见方法
  19. Spring是什么?IoC容器的理解
  20. C语言从键盘获取一个小于1000的正数,要求输出它的平方根。

热门文章

  1. Eclipse / Intellij Idea配置Git+Maven+Jetty开发环境
  2. linux 查看磁盘空间大小命令
  3. 【续上篇】推荐一款液晶电视测试软件
  4. 学习拾遗--用RadioButtonList 或者DropDownList 进行动态赋值问题
  5. c/s及b/s结构比较
  6. 中山纪念中学培训DAY1
  7. 《A Tour of PostgreSQL Internals》学习笔记——进程间通信
  8. 火狐浏览器插件(XPI 文件)签名指南
  9. 螺旋数组算法[中篇]--常规数学分析
  10. SQL SERVER 用户自定义函数如何定义.