《机器学习实战》NaiveBayes算法原理及实现「终于解决」

《机器学习实战》NaiveBayes算法原理及实现「终于解决」一、问题描述鸢尾花(IRIS)有很多种,但又因为特征很是相近,不好区分,通过大量数据归纳的特征,我们通过花萼长度(Sepal.Length),花萼宽度(Sepal.Width),花瓣长度(Petal.Length),花瓣宽度(Petal.Width),4个属性预测鸢尾花卉属于(Setosa,Versicolour,Virginica)三个种类中的哪一类,从而更加有效地进行区分。二、算法原理朴素贝叶…

大家好,欢迎来到IT知识分享网。

一、问题描述

鸢尾花(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

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

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/25168.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信