简单明了的分类算法:OneR
分类算法的目的就是根据训练集的特征将新的数据进行预测,当然能够找到特征之间的联系越多那么最后的分类结果也就应该越准确。但是有没有一个比较简单的算法,能够使用极少的特征就能够进行简单的分类呢?那就是OneR算法了。
OneR的全称为:One Rule,顾名思义也就是一条规则的意思。也就是说我们最终仅仅根据训练集中的一个特征就能够实现对数据的分类。如果只是使用一条规则的话,很显然这个分类的准确度不会很高,但是在某些特定的数据集中这个简单的算法也能够得到比较好的表现。
为了明白这个算法的工作原理,首先举一个比较简单的例子:就拿人的身高和眼睛大小以及肤色的数据对人进行分类是男是女。其中的编号不属于特征范畴,只是为了后续介绍数据使用。
编号 身高 眼睛大小 肤色 性别
1 180 正常 偏白 男
2 175 较大 偏黑 男
3 170 正常 偏黑 男
4 170 较大 偏黑 女
5 165 正常 偏白 女
6 160 较大 偏白 女
上述表格中随机写了一系列数据,我们来根据这些数据介绍一下OneR算法。
既然OneR算法是根据一个规则,也就是某一个特征来进行分类的,那么如何找到这个规则就比较重要了。
就拿上述的例子来看,我们有:身高、眼睛大小、肤色这三种特征,身高是属于连续值的范畴,眼睛大小是属于离散数据为:正常、较大,肤色也是离散数据:偏白、偏黑。
我们首先使用简单的方法将其转换为离散值,将大于(或等于)身高平均值的记为1,小于身高平均值的记为0,那么现在的数据就是这样。
编号 身高 眼睛大小 肤色 性别
1 1 正常 偏白 男
2 1 较大 偏黑 男
3 1 正常 偏黑 男
4 1 较大 偏黑 女
5 0 正常 偏白 女
6 0 较大 偏白 女
接下来我们就需要根据这些数据找到一个可以用来分类的特征规则。这个特征究竟是根据身高、眼睛大小、肤色呢?
其实根据我们的生活常识,知道在这三种特征中身高的可靠性比较高的。但是如何根据计算找到身高这个特征呢?
如何找到用来分类的规则(特征)。
其实简单的想一下就知道了,当然是使用这个特征之后我们的划分结果的正确率是最高的。我们需要进行一些简单的计算,要确保使用这个特征进行分类得到的准确率最高。因为只有准确率最高我们才能够得到比较正确的分类结果,所以我们的任务就可以转换为找到一个特征,根据这个特征进行分类的时候能够得到最高的正确率。
但是要明白,某个特征可能会有多个特征值,所以计算特征的准确率的话,需要包含其中的所有特征值可能性。也就是说这个特征的准确率是根据所有的特征值计算出来的。而对于某个特征对应的特征值来看,当然是选择分类最多的那个作为本次特征值的分类结果,然后再根据本次特征值的分类结果计算出错误个数。最后汇总到一起计算出该特征的准确率。
下面对上述样本集中的身高、眼睛大小、肤色分别计算准确率。
身高。
我们可以看到身高这个特征共有两种特征值:0和1。
如果身高特征值为1的话,那么符合特征值的数据编号为:{1,2,3,4},对应的分类为:{男,男,男,女}。很明显如果身高这个特征值为1的话,在本次样本集中男生占了3/4,女生占了1/4。那么我们就选择分类结果最多的那个作为身高特征值为1的划分结果,也就是性别为男。所以现在可以简单的认为如果身高特征值为1的话,我们就简单的认为性别为男。但是很显然这个结论是有错误的,在本次样本集中这个结论的错误个数为1,因为在身高特征值为1的情况下有1样本的性别为女,与我们的结论不符。
如果身高特征值为0的话。那么符合特征值的数据编号为:{5,6},对应的分类为:{女,女}。这个计算结果比较明显了。如果身高特征值为0的话,女生占了2/2。那么我们就选择性别为女作为身高特征值为0的分类结果。也就是说如果身高的特征值为0的话,我们就认为性别为女。这个结论可能有错误,但是在本次的数据集中是全部正确的。
在计算完身高的全部特征值之后就可以计算准确率了,我们在身高特征值为0的情况下,我们将其划分为女,这个准确率为百分之百。在身高特征值为1的情况下我们将其划分为男,有一个数据是错误的。所以如果按照身高进行划分的话,得到的准确率为:5/6=0.833。
眼睛大小。
眼睛大小这个特征共有两种特征值:正常、较大。
如果眼睛大小是正常的话,符合特征值的数据编号为:{1,3,5},对应的分类结果为:{男,男,女}。同样的男生占了2/3,女生占了1/3,那么就简单的认为如果眼睛大小为正常的话,就认为性别为男性。同样的在本次数据集中,这个结论的错误个数为1,因为当前特征值分类结果中有一个是女性。
如果眼睛大小是较大的话,符合特征值的数据编号为:{2,4,6},对应的分类结果为:{女,女,男}。同样的女生占了2/3,男生占了1/3,那么就简单的认为如果眼睛大小为较大的话,就认为性别为女性。同样的在本次数据集中,这个结论的错误个数为1。
有关眼睛大小的所有特征值计算完成之后就可以计算准确率了。我们在眼睛大小为正常的情况下,将其划分为男,这个结论在样本集中有一个数据是错误的;同样的在眼睛大小为较大的情况下,将其划分为女,这个结论在样本集中有一个数据是错误的。所以如果按照眼睛大小进行划分的话,准确率为:4/6=0.667。
肤色。
肤色特征共有两个特征值:偏黑、偏白。
如果肤色偏黑的话,符合特征值的数据编号为:{2,3,4},对应的分类结果为:{男,男,女}。男生占了2/3,女生1/3。所以如果肤色偏黑的话,就简单认为是男生,这个结论的错误个数为1。
如果肤色偏白的话,符合特征值的数据编号为:{1,5,6},对应的分类结果为:{男,女,女}。男生占了1/3,女生占了2/3,。所以如果肤色偏白的话,就简单的认为是女生,这个结论的错误个数为1。
所以肤色的准确率为:4/6=0.667。
现在得到了各个特征的准确率。身高的划分准确率为:0.833;肤色和眼睛大小的准确率都为:0.667。所以我们使用身高作为划分特征。
也就是如果有新的数据,我们只看身高这一项数据就将其进行分类。但是分类器的准确率的话是需要使用测试数据进行计算的,我们计算出来的0.833只是根据训练样本集的准确率,只是为了找出用来划分的规则。