基于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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。