一、分类算法中的学习概念
因为分类算法都是有监督学习,故分为以下2种学习。
1、急切学习:在给定的训练元组之后、接受到测试元组之前就构造好分类模型。
算法有:贝叶斯、基于规则的分类(决策树)、向后传播分类、SVM(支持向量机)、基于关联规则挖掘的分类。
2、懒惰学习:直到给定一个测试元组才开始构造分类模型。也称为基于实例的学习法。
算法有:KNN。
二、KNN的特点
优点:实现方便、支持增量学习、能对超多边形的复杂决策空间建模
缺点:计算量开销大、大规模存储支持。
三、KNN算法原理
非常简单、就是在测试元组中找和训练元组向量空间上最接近的K个点中,类别最多的那个分类。
向量空间距离无非那么几种:欧式、闵科夫斯基、曼哈顿等。
四、KNN算法的细节
1、注意属性在向量空间的规范化、规范化公式和聚类[0,1]规范化公式一样。
2、比较的属性如果是2元变量或者分类变量,设定好差值。(注意最大差区间仍要在规范化空间内部)
3、确实属性值的处理:
① 分类(2元变量)变量直接设置差值为规范化空间的最大值。
② 数值类型属性 若:
Ⅰ:2个元组对应属性均缺失,差值直接为规范化空间最大值。
Ⅱ:如果只有一个缺失,另一个取值为V,则距离差值为|1-V| 和
|0-V| 的最大值 (即Max(|规范化空间的上下界-V|))
4、确定K的值:通过对样本的实验(多次和人工结合),取出误差最小的分类结果。
5、对噪声的处理:在训练的过程中对噪声的元组直接Kill掉。
五、KNN算法的单机实现
1、准备训练数据、对数据预处理和训练:(具体实验和人工干预具体分析)
2、存储训练数据的结果
3、预处理测试数据
4、通过训练数据得到参数K
5、维护一个大小为K的PriorityQueue用于存储最近的KNNNode
6、随机从训练元组中选出K个元素计算好测试元素和这个训练元素的距离并且记录训练元组的组编号放入优先队列(优先堆)中。
7、遍历整个训练元组数据集合,如果测试距离小于优先队列的对头元素的距离。则移除对头、并且压入这个新的KNNNode,然后从新保持优先队列顺序。
8、遍历完成后,计算最大的分组的组号。则测试元组属于这个分组。
六、KNN算法的分布式实现
MAHOUT源码稍后补充。