KNN,决策树,朴素贝叶斯对比与应用

时间:2024-03-15 09:34:04

拟解决基本问题描述

问题一:数据量:1000

特征:

每年获得的飞行常客里程数

玩视频游戏所耗时间比

每周消费冰淇淋公升数

标签:不喜欢的人魅力一般的人 极具魅力的人

问题二:垃圾邮件过滤

数据量50

标签:

非垃圾邮件(25)垃圾邮件(25)

数据准备与数据预处理

 

(I)问题一  约会网站配对问题

KNN,决策树,朴素贝叶斯对比与应用

 

(1)数据归一化:

KNN,决策树,朴素贝叶斯对比与应用可适用于KNN算法

 

 

(2)数据归类

 

数据范围

0~0.25

0.25~0.5

0.5~0.75

0.75~1.0

特征分类

Less

Enough

More

A lot

KNN,决策树,朴素贝叶斯对比与应用

(3)对于朴素贝叶斯,数据归类时用数字标注类别

 

数据范围

0~0.25

0.25~0.5

0.5~0.75

0.75~1.0

特征分类

Less

Enough

More

A lot

数据标记

1

2

3

4

KNN,决策树,朴素贝叶斯对比与应用

 

(II)问题二:垃圾邮件过滤

(1)录入数据

KNN,决策树,朴素贝叶斯对比与应用

(2)统计所有单词

去标点,切分网址类数据,过滤掉长度小于三的字符串

(3)对应构建词向量

 

数据可视化

KNN,决策树,朴素贝叶斯对比与应用
KNN,决策树,朴素贝叶斯对比与应用KNN,决策树,朴素贝叶斯对比与应用

 

模型基本原理与算法实现

 

KNN算法

1、计算测试对象与训练集中所有对象的距离,可以是欧式距离、余弦距离等,比较常用的是较为简单的欧式距离;

2、找出上步计算的距离中最近的 K 个对象,作为测试对象的邻居;

3、找出 K 个对象中出现频率最高的对象,其所属的类别就是该测试对象所属的类别。

决策树算法

决策树的主函数:本质上是个递归函数,该函数主要功能是根据某种规则生长出决策树的各个分支节点,并根据终止条件结束算法。 

a)        输入需要分类的数据集和类别标签

b)        根据某种分类规则得到最优的划分特征,并创建特征的划分节点——计算最优特征子函数

c)        按照该特征的每个取值划分数据集为若*分——划分数据集子函数

d)        根据划分子函数的计算结果构建出新的节点,作为树生长出的新分支

e)        检验是否符合递归终止条件

f)         将划分的新节点包含的数据集和类别标签作为输入,递归执行上述步骤

朴素贝叶斯:

根据贝叶斯定理,对一个分类问题,给定样本特征x,样本属于类别y的概率是

KNN,决策树,朴素贝叶斯对比与应用

只要分别估计出,特征xi在每一类的条件概率就可以了。类别y的先验概率可以通过训练集算出,同样通过训练集上的统计,可以得出对应每一类上的,条件独立的特征对应的条件概率向量。 

 

算法的数学归纳

KNN,决策树,朴素贝叶斯对比与应用

测试方法与结果

决策树分类图:

 

KNN,决策树,朴素贝叶斯对比与应用

正确率比较

约会网站问题

 

 

 

 

KNN

决策树

朴素贝叶斯

测试数据

500

500

500

错误数

25

33

错误率

5%

6.6%

7.8%

 

 

 

垃圾邮件识别

 

 

测试数据

10

 

错误数

1

 

错误率

10%

 

 

 

 

数据集处理情况对比

KNN,决策树,朴素贝叶斯对比与应用

代码修改方向

 

0.9    0.8    0.7    1

0.2    0.5    0.3    2

0.3    0.5     0.96    3

最简单的

对于每个属性划分为两类,

比如仅仅Less more两类。

对应朴素贝叶斯参考程序的0,1

1  1  1  1

0  0  0  2

0  0  1  3

 

分类太粗糙,

一个界限下非黑即白

可以考虑的

 

将一个属性的多种程度独立开

0001 0001 0010 1

1000 0100 0100 2

0100 0100 0001 3

理论可行,但是数据相关性较强,

算成都比正统方法繁琐

实际并无采用

最正统的

计算出

P(lessfly|1)P(lessfly|2)…

P(enoughfly|1)…

P(morefly|1)…

P(alotfly|1)…

P(lessgame|1)…

最正统思维,适配性最高


总结

 

KNN

决策树

朴素贝叶斯

优点

精度高

对异常值不敏感

无数据输入假定。

 

计算复杂度不高

输出结果易于理解。

对中间值缺失不敏感

可以处理不相关特征数据

在数据较少的情况下仍然有效,

可以处理多类别问题

缺点

计算复杂度高,

空间复杂度高。

可能产生过度匹配问题

对于输入数据的准备方式较为敏感

使用数据类型

数值型 标称型

标称型数据

 

 

 

 

 

 

小结:

通过对于1000个数据的三种方法对比计算,发现无明显准确率差别。

KNN算法,对于数值型的数据适配度比较高,且预处理较少,一般单一类数据归一化即可,选择求距离的公式也可以依托实际进行。注意,KNN有算法的一个优点为对异常值不敏感,但是注意,我们在预处理的时候,如果能将极端数据去掉后再进行归一化,分类效果会更好。

决策树算法对于数据预处理要求高一点,需要预分类,分类过程如果面向问题本身会更加好,用于制作实际算法投入运用的话,由用户来进行一个标度效果对于特定用户本身会更好。但是数据过多的时候,决策树剪枝方面要多进行考虑,但是势必带来准确度降低。

朴素贝叶斯方法对于数据的要求较高,预处理的过程较多,但是效果不错,对于数据较少的情况依旧适用。