本章强行带入朴素贝叶斯的算法进行分类。
为什么说是强行,因为NB(朴素贝叶斯)算法其实不算是一个好的对于数值型分类的方法,一般应用的部分的特征值通常是因子型;举个例子,对于我们的iris数据集:
head(iris_train)
Sepal.Length Sepal.Width Petal.Length Petal.Width
75 6.4 2.9 4.3 1.3
16 5.7 4.4 1.5 0.4
120 6.0 2.2 5.0 1.5
91 5.5 2.6 4.4 1.2
93 5.8 2.6 4.0 1.2
127 6.2 2.8 4.8 1.8
Species
75 versicolor
16 setosa
120 virginica
91 versicolor
93 versicolor
127 virginica
我们看到,除了结果分类的Species以外,其他的四个分类都是连续的数值型,因为朴素贝叶斯的主要思想是求一件事情发生的条件概率,而没有分类的连续数值型是无法求出条件概率的。举个例子,下雨天路上车少的概率是80%,这个很容易表达成条件概率:
P(车少|下雨天)=0.8
扩展下,某一个区域下雨的概率是50%,车少的概率是10%:
P(下雨天)=0.5
P(车少)=0.1
如果有一天我们大侦探福尔摩斯听到这一天车很少,脑海中迅速会回想起这一天的天气以及作案手段,他的计算方式是这样的:
P(车少|下雨天)*P(下雨天)=P(车少)*P(下雨天|车少)
左右两边相等,是因为求得结果都是下雨天且车少的概率,说到这了,求出:
P(下雨天|车少)=40%
但是,如果我们这里不是车少,比如我们看到下雨天车辆<100辆,然后我们看到120辆车,问这个概率的话,我们是没有先验条件的,也就是我们不知道120辆车的时候,下不下雨,所以从这个意义上说,NB算法针对于那些给定发生的、因子型的特征值处理的要更好,否则如果我们在做处理的时候(后面会具体模拟下),会损失掉一些数据,比如我们把数据分段,100辆以下的是少,120辆以上的是多,100-120是中,等等。所以NB也很适合文本分类,因为文本是一类典型的已知的因子。
再回到我们的iris数据集,看看每个参数的分布情况:
summary(iris)
Sepal.Length Sepal.Width Petal.Length
Min. :4.300 Min. :2.000 Min. :1.000
1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600
Median :5.800 Median :3.000 Median :4.350
Mean :5.843 Mean :3.057 Mean :3.758
3rd Qu.:6.400 3rd Qu.:3.300 3