拟解决基本问题描述
问题一:数据量:1000
特征:
每年获得的飞行常客里程数
玩视频游戏所耗时间比
每周消费冰淇淋公升数
标签:不喜欢的人魅力一般的人 极具魅力的人
问题二:垃圾邮件过滤
数据量50
标签:
非垃圾邮件(25)垃圾邮件(25)
数据准备与数据预处理
(I)问题一 约会网站配对问题
(1)数据归一化:
可适用于KNN算法
(2)数据归类
数据范围 |
0~0.25 |
0.25~0.5 |
0.5~0.75 |
0.75~1.0 |
特征分类 |
Less |
Enough |
More |
A lot |
(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 |
(II)问题二:垃圾邮件过滤
(1)录入数据
(2)统计所有单词
去标点,切分网址类数据,过滤掉长度小于三的字符串
(3)对应构建词向量
数据可视化
模型基本原理与算法实现
KNN算法:
1、计算测试对象与训练集中所有对象的距离,可以是欧式距离、余弦距离等,比较常用的是较为简单的欧式距离;
2、找出上步计算的距离中最近的 K 个对象,作为测试对象的邻居;
3、找出 K 个对象中出现频率最高的对象,其所属的类别就是该测试对象所属的类别。
决策树算法:
决策树的主函数:本质上是个递归函数,该函数主要功能是根据某种规则生长出决策树的各个分支节点,并根据终止条件结束算法。
a) 输入需要分类的数据集和类别标签
b) 根据某种分类规则得到最优的划分特征,并创建特征的划分节点——计算最优特征子函数
c) 按照该特征的每个取值划分数据集为若*分——划分数据集子函数
d) 根据划分子函数的计算结果构建出新的节点,作为树生长出的新分支
e) 检验是否符合递归终止条件
f) 将划分的新节点包含的数据集和类别标签作为输入,递归执行上述步骤
朴素贝叶斯:
根据贝叶斯定理,对一个分类问题,给定样本特征x,样本属于类别y的概率是
只要分别估计出,特征xi在每一类的条件概率就可以了。类别y的先验概率可以通过训练集算出,同样通过训练集上的统计,可以得出对应每一类上的,条件独立的特征对应的条件概率向量。
算法的数学归纳
测试方法与结果
决策树分类图:
正确率比较
约会网站问题 |
|
|
|
|
KNN |
决策树 |
朴素贝叶斯 |
测试数据 |
500 |
500 |
500 |
错误数 |
25 |
33 |
— |
错误率 |
5% |
6.6% |
7.8% |
|
|
|
|
垃圾邮件识别 |
|
|
|
测试数据 |
10 |
|
|
错误数 |
1 |
|
|
错误率 |
10% |
|
|
|
|
|
数据集处理情况对比
代码修改方向
|
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有算法的一个优点为对异常值不敏感,但是注意,我们在预处理的时候,如果能将极端数据去掉后再进行归一化,分类效果会更好。
决策树算法对于数据预处理要求高一点,需要预分类,分类过程如果面向问题本身会更加好,用于制作实际算法投入运用的话,由用户来进行一个标度效果对于特定用户本身会更好。但是数据过多的时候,决策树剪枝方面要多进行考虑,但是势必带来准确度降低。
朴素贝叶斯方法对于数据的要求较高,预处理的过程较多,但是效果不错,对于数据较少的情况依旧适用。