# 更好的朴素贝叶斯：从朴素贝叶斯算法中收益最大的12个技巧

> 原文： [https://machinelearningmastery.com/better-naive-bayes/](https://machinelearningmastery.com/better-naive-bayes/)

Naive Bayes是一种简单而强大的技术，您应该在分类问题上进行测试和使用。

它易于理解，可以提供良好的结果，并且可以快速构建模型并做出预测。仅出于这些原因，您应该仔细查看算法。

在最近的博客文章中，[学习了如何在python](http://machinelearningmastery.com/naive-bayes-classifier-scratch-python/ "How To Implement Naive Bayes From Scratch in Python") 中从零开始实现Naive Bayes算法。

在这篇文章中，您将学习从Naive Bayes算法中获得最大收益的技巧和窍门。

[![Better Naive Bayes](img/407cd2016e6e4e31481076cfa4675a2d.jpg)](https://3qeqpr26caki16dnhd19sv6by6v-wpengine.netdna-ssl.com/wp-content/uploads/2014/12/Better-Naive-Bayes.jpg)

更好的朴素贝叶斯
摄影：[邓肯赫尔](https://www.flickr.com/photos/dullhunk/6097248541)，保留一些权利

## 1.缺少数据

朴素贝叶斯可以处理缺失数据。

在模型构建时和预测时，算法分别处理属性。

因此，如果数据实例具有属性的缺失值，则可以在准备模型时将其忽略，并在计算类值的概率时忽略。

## 2.使用日志概率

概率通常很小。要计算联合概率，您需要将概率相乘。当您将一个小数字乘以另一个小数字时，您得到的数字非常小。

浮点值的精度可能会遇到困难，例如欠载。要避免此问题，请在对数概率空间中工作（取概率的对数）。

这是有效的，因为要在朴素贝叶斯做出预测，我们需要知道哪个类具有更大的概率（等级）而不是特定概率。

## 获取免费算法思维导图

![Machine Learning Algorithms Mind Map](img/2ce1275c2a1cac30a9f4eea6edd42d61.jpg)

方便的机器学习算法思维导图的样本。

我已经创建了一个由类型组织的60多种算法的方便思维导图。

下载，打印并使用它。

## 3.使用其他分配

要将Naive Bayes与分类属性一起使用，您需要计算每个观察的频率。

要将朴素贝叶斯与实值属性一起使用，您可以使用高斯分布来汇总属性的密度。或者，您可以使用另一种更好地描述数据分布的函数形式，例如指数。

不要将自己局限于Naive Bayes算法示例中使用的分布。选择最能表征您的数据和预测问题的分布。

## 4.使用概率进行特征选择

特征选择是选择最能表征预测变量的数据属性。

在Naive Bayes中，每个属性的概率都是独立于训练数据集计算的。您可以使用搜索算法将不同属性的概率组合在一起，并在预测输出变量时评估其表现。

## 5.细分数据

他们的数据明确定义是否能够很好地响应Naive Bayes概率方法？

通过简单的概率方法（如Naive Bayes）识别和分离易于处理的段可以提高表现并关注更难以建模的问题元素。

探索不同的子集，例如Naive Bayes很可能处理的平均或流行案例。

## 6.重新计算概率

计算每个属性的概率非常快。

朴素贝叶斯的这种好处意味着您可以在数据发生变化时重新计算概率。这可能是每月，每天，甚至每小时。

这对于其他算法来说可能是不可想象的，但是如果在建模的问题中存在一些时间漂移，则应该在使用朴素贝叶斯时进行测试。

## 7.用作生成模型

Naive Bayes方法表征了问题，而这又可以用于对看不见的数据做出预测。

该概率表征也可用于生成问题的实例。

在数字向量的情况下，可以对概率分布进行采样以创建新的虚构向量。

在文本（Naive Bayes的一个非常流行的应用程序）的情况下，该模型可用于创建虚构的输入文档。

这对你的问题有什么用？

至少，您可以使用生成方法来帮助提供模型所表征的背景。

## 8.删除冗余功能

如果数据包含高度相关的特征，朴素贝叶斯的表现会降低。

这是因为高度相关的特征在模型中被投票两次，而不是夸大它们的重要性。

使用相关矩阵相互评估属性的相关性，并删除那些相关性最高的特征。

尽管如此，总是在这样的变化之前和之后测试你的问题，并坚持使用导致更好结果的问题形式。

## 9.并行化概率计算

每个属性的概率是独立计算的。这是方法中的独立性假设以及它的名称“朴素”的原因。

您可以通过并行计算属性概率来利用此假设来进一步加速算法的执行。

根据数据集和资源的大小，您可以使用不同的CPU，不同的计算机或不同的集群来执行此操作。

## 10.比您想象的更少的数据

Naive Bayes不需要很多数据就能很好地运行。

它需要足够的数据来理解与输出变量隔离的每个属性的概率关系。

鉴于模型中忽略了属性之间的交互，我们不需要这些交互的示例，因此通常比其他算法（例如逻辑回归）更少的数据。

此外，不太可能以较小的样本尺寸过拟合训练数据。

如果您没有太多的训练数据，请尝试Naive Bayes。

## 11.零观测问题

如果属性分布与训练数据集相比存在显着差异，那么朴素贝叶斯将不可靠。

一个重要的例子是分类属性具有在训练中未观察到的值的情况。在这种情况下，模型将分配0概率并且无法做出预测。

应检查这些案例并以不同方式处理。在解决了这些案例后（已知答案），应重新计算概率并更新模型。

## 12.无论如何它都有效

关于Naive Bayes的一个有趣观点是，即使违反了独立性假设并且属性之间存在明确的已知关系，它仍然有效。

重要的是，这是您需要[在给定问题上检查各种算法](http://machinelearningmastery.com/why-you-should-be-spot-checking-algorithms-on-your-machine-learning-problems/ "Why you should be Spot-Checking Algorithms on your Machine Learning Problems")的原因之一，因为结果很可能会让您大吃一惊。

## 摘要

在这篇文章中，您学到了很多关于如何使用和从Naive Bayes算法中获得更多信息的知识。

你有一些使用本文未涉及的朴素贝叶斯的技巧和提示发表评论。