跳转到内容

R 中的数据挖掘算法/分类/朴素贝叶斯

来自维基教科书,开放的书籍,面向开放的世界

本章介绍了用于分类的朴素贝叶斯算法。朴素贝叶斯 (NB) 基于对贝叶斯定理(来自概率论)的应用,并带有强烈的(朴素的)独立性假设。它特别适合输入维度很高的情况。尽管它很简单,但朴素贝叶斯通常可以胜过更复杂的分类方法。


朴素贝叶斯

[编辑 | 编辑源代码]

朴素贝叶斯分类器可以处理任意数量的独立变量,无论它们是连续的还是分类的。给定一组变量, = {}, 我们希望为事件 在可能的结果集合 = {} 中构建后验概率。用更熟悉的语言来说, 是预测器, 是因变量中存在的分类级别集。使用贝叶斯规则

其中 是类成员资格的后验概率,即 属于 的概率。

实际上,我们只对该分数的分子感兴趣,因为分母不依赖于,并且特征的值是给定的,因此分母实际上是常数。分子等价于联合概率

这里引入了“朴素”条件独立假设:假设每个特征在条件上与其他任何特征统计独立,当。这意味着

,因此联合模型可以表示为

这意味着在以上独立性假设下,类变量上的条件分布可以表示为

其中 (证据)是一个仅依赖于 的缩放因子,即,如果特征变量的值已知,则为常数。

最后,我们可以用一个类别等级 对一个新案例 F 进行标记,该等级实现最高的后验概率。


可用实现

[edit | edit source]

CRAN 上至少有两个 R 实现的朴素贝叶斯分类可用

安装和运行朴素贝叶斯分类器

[edit | edit source]

E1071 是一个 CRAN 包,因此可以从 R 中安装。

> install.packages('e1071', dependencies = TRUE)

安装后,可以将 e1071 加载为库。

> library(class) 
> library(e1071) 

它附带了一些著名的数据集,可以作为 ARFF 文件(Weka 的默认文件格式)加载。我们现在加载一个示例数据集,著名的鸢尾花数据集 [1],并使用默认参数学习一个朴素贝叶斯分类器。首先,让我们看一下鸢尾花数据集。

数据集

[edit | edit source]

鸢尾花数据集包含 150 个实例,对应于三种等频的鸢尾花品种(山鸢尾、杂色鸢尾和维吉尼亚鸢尾)。下图展示了杂色鸢尾,来自维基共享资源。

杂色鸢尾

每个实例包含四个属性:萼片长度(厘米)、萼片宽度(厘米)、花瓣长度(厘米)和花瓣宽度(厘米)。下一张图片显示了每个属性与其他属性的对比图,不同类别用颜色区分。

> pairs(iris[1:4], main = "Iris Data (red=setosa,green=versicolor,blue=virginica)",
      pch = 21, bg = c("red", "green3", "blue")[unclass(iris$Species)])
鸢尾花属性的绘图

执行和结果

[edit | edit source]

首先,我们需要指定要使用的基数。

> data(iris)
> summary(iris)
  Sepal.Length    Sepal.Width     Petal.Length    Petal.Width   
 Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100  
 1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300  
 Median :5.800   Median :3.000   Median :4.350   Median :1.300  
 Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199  
 3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800  
 Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500  
       Species  
 setosa    :50  
 versicolor:50  
 virginica :50  

之后,我们就可以使用前 4 列创建数据集的朴素贝叶斯模型,来预测第五列。(通过以下方式对目标列进行因子化:dataset$col <- factor(dataset$col) )

            
> classifier<-naiveBayes(iris[,1:4], iris[,5]) 
> table(predict(classifier, iris[,-5]), iris[,5])
            
             setosa versicolor virginica
  setosa         50          0         0
  versicolor      0         47         3
  virginica       0          3        47

分析

[edit | edit source]

这个简单的案例研究表明,朴素贝叶斯分类器在数据集上犯的错误很少,尽管数据集很简单,但它不是线性可分的,如散点图所示,并且通过查看混淆矩阵也可以看出,所有误分类都在杂色鸢尾和维吉尼亚鸢尾实例之间。

参考文献

[edit | edit source]
  1. ^ Fisher, R.A. (1936); The use of multiple measurements in taxonomic problems. Annual Eugenics, 7, Part II, 179-188.
华夏公益教科书