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]- ^ Fisher, R.A. (1936); The use of multiple measurements in taxonomic problems. Annual Eugenics, 7, Part II, 179-188.