在这篇文章中,我们将使用我最喜欢的机器学习库scikit-learn在Python中实现朴素贝叶斯分类器。接下来,我们将使用经过训练的朴素贝叶斯(监督分类法)模型来预测人口收入。

在朴素贝叶斯分类器的文章中我们讨论了贝叶斯定理,我们希望你对贝叶斯定理的基础知识有一定的了解,如果没有让我们快速地看看贝叶斯定理的基本知识。

贝叶斯定理是基于条件概率。条件概率可以帮助我们通过已经发生的事情来计算将要发生的事情。如果你不明白,让我们通过以下例子帮助你理解。

条件概率举例

下面的例子将帮助我们明白条件概率的定义。当你已经买了iPhone,你会买mac book

当你去电影院的时候,你会拿一杯清爽的饮料

当你带来一杯冰镇饮料,你会买花生

朴素贝叶斯分类器是通过贝叶斯定理来正常工作。朴素贝叶斯分类器假定所有的特征是彼此独立的,即使特征彼此依赖或者取决于其他特征的存在。 朴素贝叶斯分类器认为所有这些属性独立的为用户购买MacBook的概率做贡献。

为了学习朴素贝斯定理的关键概念。你可以阅读我们的介绍贝叶斯定理的文章。这将有助于你理解与朴素贝叶斯有关的核心概念。

在介绍朴素贝叶斯定理的文章中,我们讨论了三种流行的朴素贝叶斯算法:高斯朴素贝叶斯

多项式朴素贝叶斯

伯努利朴素贝叶斯

作为朴素贝叶斯定理文章的扩展,现在我们将在“人口收入”数据集上实现高斯朴素贝叶斯。

高斯朴素贝叶斯

高斯朴素贝叶斯算法是一种特殊类型的NB算法,它特别用于当特征具有连续值时。同时假定所有特征都遵循高斯分布,即正态分布。

人口普查收入数据集

人口普查收入数据集是预测一个人的收入是否超过$ 50K /年(大于$ 50K /年)或<= $="" 50k="" 。数据由barry="">=>

这个数据集是UCI存储库贡献的,它在这个链接公开。 数据集由15列离散和连续数据的混合组成。

Variable NameVariable Range

1.age[17 – 90]

2.workclass[‘State-gov’, ‘Self-emp-not-inc’, ‘Private’, ‘Federal-gov’, ‘Local-gov’, ‘Self-emp-inc’, ‘Without-pay’, ‘Never-worked’]

3.fnlwgt[77516- 257302]

4.education[‘Bachelors’, ‘HS-grad’, ’11th’, ‘Masters’, ‘9th’, ‘Some-college’, ‘Assoc-acdm’, ‘Assoc-voc’, ‘7th-8th’, ‘Doctorate’, ‘Prof-school’, ‘5th-6th’, ’10th’, ‘1st-4th’, ‘Preschool’, ’12th’]

5.education_num[1 – 16]

6.marital_status[‘Never-married’, ‘Married-civ-spouse’, ‘Divorced’, ‘Married-spouse-absent’, ‘Separated’, ‘Married-AF-spouse’, ‘Widowed’]

7.occupation[‘Adm-clerical’, ‘Exec-managerial’, ‘Handlers-cleaners’, ‘Prof-specialty’, ‘Other-service’, ‘Sales’, ‘Craft-repair’, ‘Transport-moving’, ‘Farming-fishing’, ‘Machine-op-inspct’, ‘Tech-support’, ‘Protective-serv’, ‘Armed-Forces’, ‘Priv-house-serv’]

8.relationship[‘Not-in-family’, ‘Husband’, ‘Wife’, ‘Own-child’, ‘Unmarried’, ‘Other-relative’]

9.race[‘White’, ‘Black’, ‘Asian-Pac-Islander’, ‘Amer-Indian-Eskimo’, ‘Other’]

10.sex[‘Male’, ‘Female’]

11.capital_gain[0 – 99999]

12.capital_loss[0 – 4356]

13.hours_per_week[1 – 99]

14.native_country[‘United-States’, ‘Cuba’, ‘Jamaica’, ‘India’, ‘Mexico’, ‘South’, ‘Puerto-Rico’, ‘Honduras’, ‘England’, ‘Canada’, ‘Germany’, ‘Iran’, ‘Philippines’, ‘Italy’, ‘Poland’, ‘Columbia’, ‘Cambodia’, ‘Thailand’, ‘Ecuador’, ‘Laos’, ‘Taiwan’, ‘Haiti’, ‘Portugal’, ‘Dominican-Republic’, ‘El-Salvador’, ‘France’, ‘Guatemala’, ‘China’, ‘Japan’, ‘Yugoslavia’, ‘Peru’, ‘Outlying-US(Guam-USVI-etc)’, ‘Scotland’, ‘Trinadad&Tobago’, ‘Greece’, ‘Nicaragua’, ‘Vietnam’, ‘Hong’, ‘Ireland’, ‘Hungary’, ‘Holand-Netherlands’]

15.income[‘<=50k’, ‘="">50K’]=50k’,>

最终目标变量由两个值组成:'<=>=>

高斯NB在人口普查收入数据集上的应用

导入python机器学习库

我们需要导入pandas, numpy 和 sklearn库,我们需要从sklearn.preprocessing导入Imputer,Imputer包有助于插补缺失值。

如果你没有安装python机器学习库,您可以先安装它再来运行本文中的代码。

train_test_split模块用于将数据集拆分成训练和测试集。accuracy_score模块将用于计算我们的高斯朴素贝叶斯算法的精度。

数据导入

对于人口普查的数据导入,我们使用pandas read_csv方法。 这是一种非常简单和快速的导入数据的方法。

我们传递四个参数。 'adult.data'参数是文件名。 header参数用于向pandas提供有关第一行数据是否包含头的详细信息。 在我们的数据集中,没有标题。 所以,我们传递None。

delimiter参数用于为信息提供分隔数据的定界符。 这里,我们使用'*,*'分隔符。 此分隔符包含了数据值前后的空格。 当与数据值一起使用的空格不总是相同个数时,这是非常有帮助。

让我们向我们的数据框架添加标题。 以下代码段可用于执行此任务

处理缺失数据

让我们测试在我们的数据集中是否有任何空值。 我们可以使用is方法。

脚本输出

上面的输出显示在我们的数据集中没有空值。

让我们测试任何分类属性是否包含'?'。 有时存在'?'或' '代替缺失值。使用下面的代码片段,我们将测试我们的adult_df数据框架是否由具有值为'?'的分类变量组成。

脚本输出

上面的代码片段的输出显示工作类属性中有1836个缺失值。 职业属性中1843个,祖国属性中有583个缺失值。

数据预处理

对于预处理,我们将制作一份原始数据帧的副本。我们将adult_df复制为adult_df_rev数据帧。

因为我们要对缺失值执行一些添补。 在这之前,我们需要一些我们的数据框架的概要统计。 为此,我们可以使用describe方法。 它可以用于生成各种汇总统计,不包括NaN值。

我们传递一个“include”参数,值为“all”,这用于指定我们想要的是所有属性的汇总统计。

在运行上述命令后,可以检查数据集的基本统计信息。 你可以花一些时间在这里了解每个提供的统计数据的详细信息。

数据添补步骤

现在,是时候估算缺失值了。 我们的一些分类中缺少值,即'?'。 我们将用上面描述的方法替换'?'为顶行的值。 例如,我们要用Private值替换工作区属性的?值。

我们已经执行了数据添补步骤。 ??

您可以通过打印adult_df_rev来检查数据帧中的更改

对于朴素贝叶斯定理,我们需要将所有数据值转换成一种数据格式。我们将对所有标签进行编码,其值介于0和n_classes-1之间。

独热编码器

为了实现这一点,我们将使用LabelKeeper的SciKit学习库的LabelEncoder。对于编码,我们还可以使用One-Hot编码器。它将数据编码为二进制格式。

使用上面的代码片段,我们创建了多个分类列,例如“marital_cat”,“race_cat”等。你可以使用adult_df_rev.head查看数据框的前6行。

通过打印adult_df_rev.head结果,您将能够看到所有的列都应该重新索引。他们不是正确的顺序。要重新索引这些列,您可以使用下面提供的代码段:

上述代码片段的输出将显示所有列都正确地重建索引。我已经将列名列表作为参数传递,axis = 1用于重新索引列。

数据标准化

我们的数据帧的所有数据值都是数字。现在,我们需要转换它们到统一尺度。我们可以标准化值,使用下面的公式进行标准化。

我们已将数据值转换为标准化值。您可以打印并检查dataframe的输出。

数据切片

让我们将数据分成训练和测试集。我们可以使用sklearn的train_test_split方法轻松地执行此步骤。

使用上面的代码片段,我们已经将数据划分为要素和目标集。特征集由14个列组成,即预测变量和目标集由1个具有类值的列组成。

features_train和target_train由训练数据组成,features_test和target_test由测试数据组成。

高斯朴素贝叶斯实现

完成数据预处理后。是时候实现机器学习算法了。我们将使用sklearn的GaussianNB模块。

我们已经构建了一个GaussianNB分类器。使用训练数据训练分类器。我们可以使用fit方法来训练它。在构建分类器之后,我们准备好模型进行预测。我们可以使用predict方法,测试集特征作为其参数。

我们的高斯朴素贝叶斯模型的准确性

现在是时候测试我们的模型的质量,我们做了一些预测。让我们将模型的预测与测试集的实际目标值进行比较。遵循这个方法,我们将计算我们的模型的准确性。

脚本输出

0.80141447980643965

真棒!我们的模型给出的精度为80%。这不是一个简单的实现。您可以创建随机测试数据集并测试模型,以了解训练的高斯朴素贝叶斯模型的表现。

我们可以用Python pickle保存训练有素的scikit-learn模型。你可以查看如何使用Python Pickle保存训练有素的scikit-learn模型。英文原文:http://dataaspirant.com/2017/02/20/gaussian-naive-bayes-classifier-implementation-python/

朴素贝叶斯分类器python_python实现高斯朴素贝叶斯分类器相关推荐

  1. 【机器学习sklearn】高斯朴素贝叶斯 Gaussian naive bayes

    贝叶斯Bayes - Thomas Bayes 前言 一.贝叶斯决策论(Bayesian decision theory) 二.实例:高斯朴素贝叶斯 Gaussian Naive Bayes (Gau ...

  2. sklearn GaussianNB(高斯朴素贝叶斯)模型使用RandomSearchCV获取最优参数及可视化​​​​​​​

    sklearn GaussianNB(高斯朴素贝叶斯)模型使用RandomSearchCV获取最优参数及可视化 GaussianNB是高斯贝叶斯分类器,它假设特征的条件分布概率满足高斯分布,其原型为: ...

  3. 三种常用的朴素贝叶斯实现算法——高斯朴素贝叶斯、伯努利朴素贝叶斯、多项式朴素贝叶斯

    朴素贝叶斯 在机器学习中,朴素贝叶斯分类器是一系列以假设特征之间强(朴素)独立下运用贝叶斯定理为基础的简单概率分类器. 朴素贝叶斯算法Naive Bayes定义中有两个关键定义:特征之间强假设独立和贝 ...

  4. Python 高斯朴素贝叶斯的优缺点

    关注微信公共号:小程在线 关注CSDN博客:程志伟的博客 Sklearn基于这些分布以及这些分布上的概率估计的改进,为我们提供了四个朴素贝叶斯的分类器 类 含义 naive_bayes.Bernoul ...

  5. python 贝叶斯分类器sklearn_Sklearn 中的朴素贝叶斯分类器

    原标题:Sklearn 中的朴素贝叶斯分类器 作者:Martin Müller,翻译:github-sisibeloved https://github.com/xitu/gold-miner/blo ...

  6. 朴素贝叶斯高斯模型_从零开始实现高斯朴素贝叶斯独立贝叶斯模型

    朴素贝叶斯高斯模型 "Why is Google censuring me?!" Claire asked (true story). Sure, she's always bee ...

  7. 实现贝叶斯分类器_从头开始在Python中实现高斯朴素贝叶斯

    Naive Bayes是一种非常方便,流行且重要的机器学习算法,尤其适用于文本分析和一般分类.在本文中,我将讨论高斯朴素贝叶斯:算法,其实现和应用于微型维基百科数据集(维基百科中给出的数据集). 算法 ...

  8. 朴素贝叶斯+Python3实现高斯朴素贝叶斯

    1. 什么是朴素贝叶斯法 朴素贝叶斯(naive Bayes)法是基于贝叶斯定理与特征条件独立假设的分类方法.对于给定的训练数据集,首先基于特征条件独立假设学习输入输出的联合概率分布:然后基于此模型, ...

  9. c语言性别体重身高的程序,1-1 C语言手撕高斯-朴素贝叶斯 - 通过身高和体重推测性别(机器学习)...

    目录 目录 目录 项目介绍 项目1-1的准确度 项目可行性:原理简介 高斯分布(正态分布) 朴素贝叶斯 代码流程 获取数据(数据清洗) 代码实现 头文件 allHead.h 源文件 handleDat ...

最新文章

  1. Neighbor2Neighbor: Self-Supervised Denoising from Single Noisy Images
  2. php 单一职责,读懂 SOLID 的「单一职责」原则
  3. SimpleJdbcInsert 和SimpleJdbcCall
  4. sringboot security基本用法
  5. AutoLayout的那些事儿
  6. 安兔兔发布9月份Android性能榜:855霸榜,华为竟垫底
  7. 基于JAVA+Servlet+JSP+MYSQL的在线购物系统
  8. android学习笔记---66_自定义标签页
  9. Centos6.3安装KVM
  10. [Java] 蓝桥杯ADV-166 算法提高 聪明的美食家
  11. GZip、Deflate压缩算法对应的C#压缩解压函数
  12. c#获取网络时间并同步本地时间
  13. 职工信息管理系统—C语言工程实践
  14. 免费遥感图像数据共享网汇总
  15. Python实战 | 手拉手教你爬取贝壳房源数据
  16. 计算机sci期刊 周期短,周期短的SCI期刊有哪些
  17. mybatis基础(上)
  18. 使用国产KT148A语音芯片sop8封装,用户可以自己更换声音,低成本,高秒数
  19. android禁用模拟器,Android 禁止应用在模拟器上运行
  20. \xe4\xb8\xad\xe6\x96\x87 phython 字符编码乱码问题

热门文章

  1. 计算机的内存和cpu,内存与CPU二者之间的关系_Intel服务器CPU_服务器产业-中关村在线...
  2. html锚点定位原理,html 页面内锚点定位及跳转方法总结
  3. matlab粒子群优化算法工具箱,MATLAB粒子群优化算法(PSO)
  4. 与Flash9的一次亲密接触!
  5. 微信小程序根据性别判断显示不同的图片
  6. k8s selector_k8s之Label与Selector
  7. 政务外网、政务专网、政务内网和互联网
  8. 帮助客户实现自助服务,企业可以打造产品知识库来解决
  9. 菜鸟网络营销赚钱指南
  10. 真正厉害的人,你永远察觉不到他的情绪