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

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)——朴素贝叶斯分类器)