一、问题描述

鸢尾花(IRIS)有很多种,但又因为特征很是相近,不好区分,通过大量数据归纳的特征,我们通过花萼长度(Sepal.Length),花萼宽度(Sepal.Width),花瓣长度(Petal.Length),花瓣宽度(Petal.Width),4个属性预测鸢尾花卉属于(Setosa,Versicolour,Virginica)三个种类中的哪一类,从而更加有效地进行区分。

二、算法原理

朴素贝叶斯最核心的部分是贝叶斯法则,而贝叶斯法则的基石是条件概率。

《机器学习实战》NaiveBayes算法原理及实现

Bayesianinferenc(贝叶斯推断):根据一个已发生事件的概率,计算另一个事件的发生概率,在可以选择分类中概率最大的就是该事件的分类。

三、数据描述及可视化

《机器学习实战》NaiveBayes算法原理及实现

横坐标:花萼长度(Sepal.Length)

纵坐标:花萼宽度(Sepal.Width)

《机器学习实战》NaiveBayes算法原理及实现

横坐标:花瓣长度(Petal.Length)

纵坐标:花瓣宽度(Petal.Width)

四、算法的程序实现

def trainNB0(trainMatrix,trainCategory):
    numTrainDocs = len(trainMatrix)
    numWords = len(trainMatrix[0])
    pAbusive = sum(trainCategory)/float(numTrainDocs)
    p0Num = ones(numWords); p1Num = ones(numWords)      #change to ones() 
    p0Denom = 2.0; p1Denom = 2.0                        #change to 2.0
    for i in range(numTrainDocs):
        if trainCategory[i] == 1:
            p1Num += trainMatrix[i]
            p1Denom += sum(trainMatrix[i])
        else:
            p0Num += trainMatrix[i]
            p0Denom += sum(trainMatrix[i])
    p1Vect = log(p1Num/p1Denom)          #change to log()
    p0Vect = log(p0Num/p0Denom)          #change to log()

    return p0Vect,p1Vect,pAbusive

def classifyNB(vec2Classify, p0Vec, p1Vec, pClass1):
    p1 = sum(vec2Classify * p1Vec) + log(pClass1)    #element-wise mult
    p0 = sum(vec2Classify * p0Vec) + log(1.0 - pClass1)
    if p1 > p0:
        return 1
    else: 
        return 0

五、测试结果及分析

选取50%、60%、70%、80%的数据做测试集,绘制正确率折线图,对比1、2两种算法的正确率

测试数据比例           正确率                  错误率

10%                       1.000000               0

20%                       1.000000               0

30%                       0.936170               0.063830

40%                       0.966102               0.033898

50%                       0.957447               0.042553

60%                      0.920000               0.080000

70%                       0.950000              0.065217

80%                       0.933333               0.066667

90%                       0.330827               0.669173

《机器学习实战》NaiveBayes算法原理及实现

在测试数据量到80%之前算法分类出错的概率都非常低,80%之后错误率有明显提高。

六、总结与体会

模型所需估计的参数很少,对缺失数据不太敏感,算法也比较简单。理论上,模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为模型假设属性之间相互独立,这个假设在实际应用中往往是不成立的,这给NBC模型的正确分类带来了一定影响.

七、参考文献

【1】朴素贝叶斯分类器(NaiveBayes Classifiers)https://blog.csdn.net/sinat_36246371/article/details/60140664

【2】Peter Harrington。《机器学习实战》

【3】python使用matplotlib绘制柱状图教程

http://www.jb51.net/article/104924.htm

非常感谢阅读!如有不足之处,请留下您的评价和问题




相关文章:

  • 2021-10-14
  • 2022-12-23
  • 2021-08-08
  • 2021-10-07
  • 2021-04-14
  • 2022-12-23
  • 2021-09-23
  • 2022-12-23
猜你喜欢
  • 2021-05-05
  • 2021-11-23
  • 2021-12-03
  • 2021-10-10
  • 2021-10-14
  • 2021-06-26
  • 2021-10-18
相关资源
相似解决方案