拟解决基本问题描述
问题一:数据量: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有算法的一个优点为对异常值不敏感,但是注意,我们在预处理的时候,如果能将极端数据去掉后再进行归一化,分类效果会更好。
决策树算法对于数据预处理要求高一点,需要预分类,分类过程如果面向问题本身会更加好,用于制作实际算法投入运用的话,由用户来进行一个标度效果对于特定用户本身会更好。但是数据过多的时候,决策树剪枝方面要多进行考虑,但是势必带来准确度降低。
朴素贝叶斯方法对于数据的要求较高,预处理的过程较多,但是效果不错,对于数据较少的情况依旧适用。