基于python的贝叶斯分类算法,python实现贝叶斯

  基于python的贝叶斯分类算法,python实现贝叶斯

  在本文中,我使用我最喜欢的机器学习库scikit-learn在Python上实现朴素贝叶斯分类器。然后,用训练好的朴素贝叶斯模型预测人口收入。

  关于朴素贝叶斯分类器的文章讨论了贝叶斯定理。我想让你们了解一下贝叶斯定理的基础知识,如果我们快速看一下贝叶斯定理的基础知识。

  贝叶斯定理是基于条件概率的。概率有助于计算发生了什么。如果你不明白,用下面的例子来帮助你理解。

  条件概率的例子

  下面的例子有助于理解条件概率的定义。迷你蜡烛已经买了iPhone。购买mac book

  迷你蜡烛在他们去电影院的时候带来了提神的饮料。

  迷你蜡烛带冷饮买花生。

  朴素贝叶斯分类器根据贝叶斯定理正常工作。朴素贝叶斯分类器假设所有特征都是相互独立的,无论特征是相互依赖的还是依赖于其他特征的存在。朴素贝叶斯分类器认为,所有这些属性都会独立贡献用户购买MacBook的概率。

  为了学习朴素贝叶斯定理的重要概念。请阅读我们关于贝叶斯定理的文章。这有助于理解与朴素贝叶斯相关的中心概念。

  文章介绍了朴素贝叶斯定理,讨论了三种常用的朴素贝叶斯算法:zqdxnnaiveBayes。

  多项式朴素贝叶斯

  伯努利朴素贝叶斯

  作为朴素贝叶斯定理的扩展,zqdxnnaiveBayes现已在“人口收入”数据集上实现。

  Zqdxn朴素贝叶斯

  ZqdxnnaiveBayes算法是NB算法的一种特殊类型,尤其适用于特征具有连续值的情况。同时假设所有特征服从zqdxn分布,即正态分布。

  人口普查收入数据集

  人口普查收入数据集是对某人的收入是否超过$ 50K/年($ 50K/年或更多)或== 50K= 。数据是qxdbbz= =

  该数据集由UCI知识库提供,并通过此链接发布。它由15列离散数据和连续数据组成。

  变量名变量范围

  1 .年龄[ 1790年]

  2 .工作类别[州政府,私人企业,联邦政府,地方政府,私人企业

  3.fnlwgt[77516- 257302]

  4 .教育[‘学士’、‘硕士’、‘第十一’、‘硕士’、‘第九’、‘某学院’、‘assoc-acdm’、ath

  5 .教育_数字[ 116 ]

  6 .婚姻状况[未婚,已婚-公民-配偶,离婚,已婚-配偶不在, sed

  职业[行政-文书,执行-管理,搬运-清洁工,专业教授,其他服务

  8 .关系[非家庭成员,丈夫,妻子,亲生子女,未婚,其他亲属]

  9 .种族[白人,黑人,亚洲太平洋岛民,美洲印第安爱斯基摩人,其他]

  10 .性别[男性,女性]

  11 .资本收益

  12 .资本_损失[ 04356 ]

  13 .每周小时数[ 199 ]

  14 .本国[美国,古巴,牙买加,印度,墨西哥,南方,波多黎各

   n ,菲律宾,意大利,波兰,哥伦比亚,柬埔寨,泰国,厄瓜多尔,老挝,台湾,海地,葡萄牙,多米尼加共和国,萨尔瓦多,法国,危地马拉,中国,日本,南斯拉夫,秘鲁,outing-us(关岛-USVI等),苏格兰,shy航空多巴哥,希腊,尼加拉瓜,越南,香港,爱尔兰,匈牙利,荷兰]

  15 .收入[=50k ,=50K]=50k ,

  最后一个变量由两个值组成:“==

  zqdxnNB在人口普查收入数据集中的应用

  导入python机器学习库

  我们需要导入pandas、numpy和sklearn库,我们需要从sklearn导入impactor。

  如果没有安装python机器学习库,可以在运行本文代码之前安装。

  Train_test_split模块用于将数据集分成训练集和测试集。accuracy_score模块将用于计算我们的zqdxn朴素贝叶斯算法的准确性。

  数据导入

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

  我们传递四个参数。“成人.数据”参数是文件名。header参数用于向pandas提供关于第一行数据是否包含标题的详细信息。在我们的数据集中,没有标题。所以,我们一个也不放过。

  Delimiter参数用于提供分隔符来分隔信息数据。这里,我们使用 *,* 分隔符。此分隔符包含数据值前后的空格。当数据值使用的空格数不总是相同时,这非常有用。

  让我们为数据框添加一个标题。以下代码片段可用于执行此任务

  处理缺失数据

  让我们测试一下数据集中是否有空值。我们可以使用is方法。

  脚本输出

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

  让我们测试是否有任何分类属性包含“?”。有时候吗?或,而不是缺少值。使用以下代码片段,我们将测试我们的成人_df数据帧是否包含值为“?”的数据帧分类变量。

  脚本输出

  上述代码片段的输出显示,work class属性中有1836个缺失值。祖国属性中有1843个职业属性和583个缺失值。

  数据预处理

  对于预处理,我们将复制原始数据帧。我们将成人_测向复制为成人_测向_修订数据帧。

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

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

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

  数据补充步骤

  现在,是时候估计缺失值了。我们的一些分类缺少值,即“?”。我们会换掉它吗?用上面描述的方法。是第一行的值。例如,我们是否希望用私有值替换工作区属性的?价值。

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

  您可以通过打印成人_ df _ rev来检查数据框中的更改。

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

  单温编码器

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

  使用上面的代码片段,我们创建了几个分类列,比如“marriage _ cat”、“race_cat”等等。您可以使用成人_df_rev.head查看数据框的前6行。

  通过打印成人_df_rev.head的结果,您将能够看到所有的列都应该被重新索引。它们的顺序不对。要重新索引这些列,可以使用下面提供的代码片段:

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

  数据标准化

  我们的数据框的所有数据值都是数字。现在,我们需要将它们转换成统一的比例。我们可以使用下面的公式来标准化这些值。

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

  数据切片

  让我们将数据分为训练集和测试集。我们可以通过使用sklearn的train_test_split方法轻松执行这一步。

  使用上面的代码片段,我们将数据分成了特性和目标集。特征集由14列组成,也就是说,预测变量和目标集由具有类值的一列组成。

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

  zqdxn的朴素贝叶斯实现

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

  我们已经建立了一个高斯神经网络分类器。用训练数据训练分类器。我们可以用fit的方法来训练它。建立分类器后,我们准备预测模型。我们可以使用预测方法,将测试集特征作为其参数。

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

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

  脚本输出

  0.80141447980643965

  太好了!我们的模型给出了80%的准确率。这不是一个简单的实现。您可以创建随机测试数据集并测试模型,以了解经过训练的zqdxn朴素贝叶斯模型的性能。

  我们可以使用Python pickle来保存训练有素的scikit-learn模型。可以查看如何使用Python Pickle保存训练有素的scikit-learn模型。中文:3358dataaspire.com/February 20,2017/高斯-朴素贝叶斯-分类器-实现-python/

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: