朴素贝叶斯模型是一种基于贝叶斯定理与特征条件独立假设的分类方法,
是经典的机器学习算法之一,也是为数不多的基于概率论的分类算法。
优点:算法逻辑简单,易于实现
缺点:朴素贝叶斯模型前提是假设属性之间相互独立,但这个在现实中往往是不存在的,当属性过多或属性之间相关性大时效果不太好
网上有非常多的关于朴素贝叶斯模型概率的数理方法,
我不打算在这写这些数理上的东西,仅通过python代码实现并讲解朴素贝叶斯模型实现过程
之所以说算法简单,在下面一大串的代码中真正和朴素贝叶斯模型有关的代码有关的就三句
1、以下两句这句的目的是计算训练集中的样本各属性的平均值与标准差
当然还有一些别的算法:如:Multinomial Naïve Bayes,多项式NB、Bernoulli Naïve Bayes,多元贝努利NB等
本例使用数据集简介:以鸢尾花的特征作为数据,共有数据集包含150个数据集,
分为3类setosa(山鸢尾), versicolor(变色鸢尾), virginica(维吉尼亚鸢尾)
每类50个数据,每条数据包含4个属性数据 和 一个类别数据.
通过这150个数据来演示朴素贝叶斯模型实现
这还有两篇文章也是关于鸢尾花的机器学习实验,有兴趣也可以了解一下
机器学习(2)--邻近算法(KNN)
机器学习(3.2)--PCA降维鸢尾花数据降维演示
是经典的机器学习算法之一,也是为数不多的基于概率论的分类算法。
优点:算法逻辑简单,易于实现
缺点:朴素贝叶斯模型前提是假设属性之间相互独立,但这个在现实中往往是不存在的,当属性过多或属性之间相关性大时效果不太好
网上有非常多的关于朴素贝叶斯模型概率的数理方法,
我不打算在这写这些数理上的东西,仅通过python代码实现并讲解朴素贝叶斯模型实现过程
之所以说算法简单,在下面一大串的代码中真正和朴素贝叶斯模型有关的代码有关的就三句
1、以下两句这句的目的是计算训练集中的样本各属性的平均值与标准差
mean=clfItems.mean(axis=0)#计算每个属性的平均值
stdev= np.sqrt(np.sum((clfItems-mean)**2,axis=0)/float(len(clfItems)-1))#计算每个属性的标准差
2、以下这句就是测试集中每条记录在与训练集中进行比对所应用的朴素贝叶斯算法,
#测试集中每条记录的每个属性在与训练集中进行比对应用的朴素贝叶斯算法,
probabilities= np.exp(-1*(testItem[0:-1]-trainClfData[clfItem][:,0])**2/(trainClfData[clfItem][:,1]**2*2)) / (np.sqrt(2*np.pi)*trainClfData[clfItem][:,1])
这里应用的是Gaussian Naïve Bayes,高斯NB,
当然还有一些别的算法:如:Multinomial Naïve Bayes,多项式NB、Bernoulli Naïve Bayes,多元贝努利NB等
本例使用数据集简介:以鸢尾花的特征作为数据,共有数据集包含150个数据集,
分为3类setosa(山鸢尾), versicolor(变色鸢尾), virginica(维吉尼亚鸢尾)
每类50个数据,每条数据包含4个属性数据 和 一个类别数据.
通过这150个数据来演示朴素贝叶斯模型实现
这还有两篇文章也是关于鸢尾花的机器学习实验,有兴趣也可以了解一下
机器学习(2)--邻近算法(KNN)
机器学习(3.2)--PCA降维鸢尾花数据降维演示
废话不说,附上全部代码
# -*- coding:utf-8 -*-
#鸢尾花的特征作为数据
data='''5.1,3.5,1.4,0.2,Iris-setosa
4.9,3.0,1.4,0.2,Iris-setosa
4.7,3.2,1.3,0.2,Iris-setosa
4.6,3.1,1.5,0.2,Iris-setosa
5.0,3.6,1.4,0.2,Iris