300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 朴素贝叶斯分类器python_python实现高斯朴素贝叶斯分类器

朴素贝叶斯分类器python_python实现高斯朴素贝叶斯分类器

时间:2022-06-30 01:33:48

相关推荐

朴素贝叶斯分类器python_python实现高斯朴素贝叶斯分类器

在这篇文章中,我们将使用我最喜欢的机器学习库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模型。英文原文://02/20/gaussian-naive-bayes-classifier-implementation-python/

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。