美文网首页
Python机器学习基础教程学习笔记(7)——朴素贝叶斯分类器

Python机器学习基础教程学习笔记(7)——朴素贝叶斯分类器

作者: neumeng | 来源:发表于2019-10-18 08:40 被阅读0次

    Python机器学习基础教程学习笔记(7)——朴素贝叶斯分类器

    朴素贝叶斯分类器(Naive Bayesian Classifier)

    • 朴素贝叶斯分类器比线性模型训练速度更快
    • 代价是泛化能力要比线性更稍差

    朴素贝叶斯模型如此高效的原因在于:

    • 它通过单独查看每个特征来学习参数,并从每个特征中收集简单的类别统计数据

    sk-learn中实现了三种朴素贝叶斯分类器:

    • GaussianNB:应用于任意连续数据。
    • BernoulliNB:假定输入的数据为二分类数据。
    • MultifomialNB:假定输入数据为计数数据。

    BernoulliNB和MultifomialNB主要用于文本数据分类。

    BernoulliNB分类器计算每个类别中每个特征不为0的元素个数。

    import numpy as np
    import matplotlib.pyplot as plt
    import pandas as pd
    import mglearn
    
    # 4个数据点,每个点有4个二分特征
    X = np.array([
        [0,1,0,1], # 类别0:
        [1,0,1,1], # 类别1:
        [0,0,0,1], # 类别0:
        [1,0,1,0]  # 类别1:
    ])
    # 一共有两个类别:0和1
    y = np.array([0,1,0,1])
    
    counts = {}
    # 计算每个类别中每个特征不为0的元素个数
    for label in np.unique(y):
        counts[label]=X[y==label].sum(axis=0)
    print("Feature counts:\n{}".format(counts))
    
    Feature counts:
    {0: array([0, 1, 0, 2]), 1: array([2, 0, 2, 1])}
    
    • MultifomialNB计算每个类别中每个特征的平均值。
    • GaussianNB会保存每个类别中每个特征的平均值和标准差。
    • 要想做出预测,需要将数据点与每个类别的统计数据进行比较,并将最匹配的类别作为预测结果。
    • MultifomialNB和BernoulliNB预测公式的形式都与线性模型完全相同。
    • 朴素贝叶斯模型coef_的含义与线性模型稍有不同,因为coef_不同与w。

    优点、缺点和参数

    • MultinomialNB和BernoulliNB都有一个参数alpha,用于控制模型复杂度。

    • alpha的工作原理是,算法向数据中添加alpha那么多的数据点,这些点对所有特征都取正值。这可以将统计数据“平滑化”(smoothing)。

    • alpha越大,平滑性越强,模型复杂度就越低。

    • 算法性能对alpha值的鲁棒性相对较好,也就是说,alpha值对模型性能并不重要。

    • 但是调整这个参数通常都会使精度略有提高。

    • GaussianNB主要用于高维数据,而另外两种朴素贝叶斯模型则广泛用于稀疏计数数据,比如文本。

    • MultinomialNB的性能通常要优于BernoulliNB,特别是在饮食很多非零特征的数据集(即大型文档)上。

    • 朴素贝叶斯模型的许多优点和缺点都与线性模型相同。

    • 它的训练和预测速度都很快,训练过程也很容易理解。

    • 该模型对高维稀疏数据的效果很好,对参数的鲁棒性也相对较好。

    • 朴素贝叶斯 模型是很好的基准模型,常用于非常大的数据集,在这些数据集上即使训练线性模型可能也要花费大量时间。

    相关文章

      网友评论

          本文标题:Python机器学习基础教程学习笔记(7)——朴素贝叶斯分类器

          本文链接:https://www.haomeiwen.com/subject/mmgbmctx.html