朴素贝叶斯) )函数实现朴素贝叶斯分类算法,与线性判别的核心函数一样,分为两种函数格式分别进行介绍。 在此之前,必须安装和部署klaR软件包。 以iris数据集为例进行朴素贝叶斯分类。
首先,以Species为判别对象变量,用data_train生成贝叶斯判别规则。 步骤如下。
是库(klar )
是库(质量)
set.seed(1234 ) )。
ind-sample(2,nrow ) iris ),replace=TRUE,prob=c ) 0.7,0.3 ) )
data_train - iris[ind==1,]
data_test - iris[ind==2,]
fit _ Bayes1-朴素贝叶斯(特殊~,data_train ) )。
Names(fit_Bayes1) )。
[1] ' apriori ' ' tables ' ' levels ' ' call ' ' x ' ' use kernel ' ' varnames '
在此输出结果中,apriori ()与lda ) )函数提供的prior项一样,记录了在执行过程中使用的先验概率。
fit_Bayes1$apriori
群组化
setosa versicolor virginica
0.3571429 0.3392857 0.3035714
tables部分包含用于建立判别规则的所有变量的分类条件概率,这些变量是运行贝叶斯判别算法的重要过程之一。
fit_Bayes1$tables
$Sepal.Length
[,1] [,2]
setosa 5.010000 0.3455208
versicolor 5.976316 0.4784176
virginica 6.605882 0.6866436
$Sepal.Width
[,1] [,2]
setosa 3.440000 0.3733425
versicolor 2.776316 0.2944846
virginica 2.991176 0.3213302
$Petal.Length
[,1] [,2]
setosa 1.480000 0.1757037
versicolor 4.297368 0.4641102
virginica 5.611765 0.5819324
$Petal.Width
[,1] [,2]
setosa 0.255000 0.1108244
versicolor 1.336842 0.2019112
virginica 2.035294 0.2717869
其他判别变量类别项levels、判别命令项call、是否使用标准密度估计usekernel、以及与判别规则制作相关的特征变量名称varnames的输出结果如下。
fit_Bayes1$levels
[1] ' setosa ' ' versi color ' ' virgin ICA '
fit_Bayes1$call
朴素贝叶斯.默认(x=x,grouping=Y ) )。
fit_Bayes1$usekernel
[1]法尔斯
fit_Bayes1$varnames
[1] ' sepal.length ' ' sepal.width ' ' petal.length ' ' petal.width '
然后,根据得到的判别规则,绘制合适的密度曲线图
打印(fit _ Bayes1) )。
从Sepal.Length (花萼长度)看,setosa (山鸢尾)长4.6cm~5.3cm,versicolor (杂色鸢尾)长5,5 cm~6.5 cm,virginica )
从Sepal.Width (萼宽)看,versicolor和virginica的萼宽不同
并不是很大,setosa的宽度和另外两类存在较为明显的差异,所以但从花萼宽度来看还是很容易区分出setosa这种花类的。Petal.Length(花瓣长度)和Petal.Width(花瓣宽度)的密度曲线图非常相似,setosa的花瓣长、宽有着非常明显的特征,长度不超过2cm,宽度大多数不少过0.5cm。而versicolor和virginica的花瓣长、宽也有较为明显的差异。就花瓣长宽总体来说,virginica > versicolor > setosa。
接着,我们对模型进行预测分析和评测
> pre_Bayes1 <- predict(fit_Bayes1, data_test)
> pre_Bayes1
$class
5 14 16 26 28 29 36 39 40 50
setosa setosa setosa setosa setosa setosa setosa setosa setosa setosa
53 58 60 61 66 72 74 81 86 90
versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor versicolor
92 100 111 113 116 117 120 121 122 123
versicolor versicolor virginica virginica virginica virginica versicolor virginica virginica virginica
124 131 135 137 140 142 147 149
virginica virginica versicolor virginica virginica virginica virginica virginica
Levels: setosa versicolor virginica
$posterior
setosa versicolor virginica
5 1.000000e+00 2.790555e-19 4.804157e-25
14 1.000000e+00 4.681860e-20 8.584231e-26
16 1.000000e+00 4.965007e-18 1.617037e-22
26 1.000000e+00 2.919231e-16 6.817218e-23
28 1.000000e+00 5.355506e-18 5.209729e-24
29 1.000000e+00 3.397560e-18 2.601146e-24
36 1.000000e+00 1.103180e-18 6.604019e-25
39 1.000000e+00 1.239266e-18 9.601292e-25
40 1.000000e+00 7.167103e-18 5.268064e-24
50 1.000000e+00 2.808498e-18 1.783320e-24
53 5.323015e-115 5.701487e-01 4.298513e-01
58 9.659583e-32 9.999991e-01 8.658274e-07
60 1.655466e-64 9.998612e-01 1.387868e-04
61 4.541736e-38 9.999992e-01 8.394677e-07
66 1.000900e-87 9.856329e-01 1.436707e-02
72 1.205796e-66 9.998444e-01 1.555779e-04
74 3.191784e-91 9.989301e-01 1.069908e-03
81 1.804099e-51 9.999953e-01 4.709269e-06
86 1.451633e-96 9.003209e-01 9.967912e-02
90 2.868701e-65 9.999491e-01 5.088571e-05
92 7.614003e-94 9.934054e-01 6.594628e-03
100 5.874664e-69 9.998619e-01 1.381040e-04
111 2.203389e-149 1.088649e-03 9.989114e-01
113 1.856574e-179 1.510435e-05 9.999849e-01
116 2.569809e-179 1.886245e-06 9.999981e-01
117 1.497545e-159 4.554217e-03 9.954458e-01
120 2.939555e-117 9.735871e-01 2.641290e-02
121 5.876038e-205 4.261153e-08 1.000000e+00
122 4.934524e-136 3.048338e-02 9.695166e-01
123 2.031354e-257 7.578507e-10 1.000000e+00
124 2.725711e-127 2.649040e-01 7.350960e-01
131 6.078848e-208 1.428685e-06 9.999986e-01
135 3.522568e-144 6.518680e-01 3.481320e-01
137 1.691260e-202 2.829088e-08 1.000000e+00
140 2.364394e-174 1.501887e-05 9.999850e-01
142 7.278610e-172 1.764858e-06 9.999982e-01
147 4.272198e-138 6.431249e-02 9.356875e-01
149 1.879617e-183 8.795346e-07 9.999991e-01
> table(data_test$Species,pre_Bayes1$class)
setosa versicolor virginica
setosa 10 0 0
versicolor 0 12 0
virginica 0 2 14
> error_Bayes1=sum(as.numeric(as.numeric(pre_Bayes1$class)!=as.numeric(data_test$Species)))/nrow(data_test)
> error_Bayes1
[1] 0.05263158