1.K近邻分类算法(KNN)

来源:互联网 发布:linux配置jdk环境 编辑:程序博客网 时间:2024/06/05 03:20
1.KNN概述
说明:K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个比较成熟的方法,也是最简单的机器学习算法之一。
思路:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。
适用范围:对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合。KNN最邻近规则,主要应用领域是对未知事物的识别,即判断未知事物属于哪一类。
判断思想:基于闵可夫斯基距离,判断未知事物的特征和哪一类已知事物的的特征最接近。
2.距离
2.1.闵可夫斯基距离

闵可夫斯基距离的三个常见的例子:
◆r=1: 街区距离(City block distance, L1 norm)
◆r=2: 欧式距离(Euclidean distance, L2 norm)
◆r=∞: 极大距离(Supremum distance, Lmax or L∞ norm),是两向量对应元素之间差距最大的距离
2.2.示例
四个向量的 x 与 y 坐标如下:
◦ p1 = <0, 2> ◦ p2 = <2, 0> ◦ p3 = <3, 1> ◦ p4 = <5, 1>
街区距离:d(p1,p2)=|0-2|+|2-0|=4,d(p1,p3)=|0-3|+|2-1|=4,d(p1,p4)=|0-5|+|2-1|=6
欧式距离:d(p1,p2)=sqrt(((0-2)^2+(2-0)^2))=sqrt(8)=2.8
3.应用
3.1.预测离散型变量
1.首先基于一个包含x值, 以及离散型的真实y值的训练数据集构建分类模型;
2.然后将该模型用来预测新的只包含x值的测试数据集的y值。
3.2典型应用
◆精准营销 (电子商务)
◆信用审批 (银行/金融)
◆医学诊断 (健康医疗)
◆欺诈/入侵检测 (互联网)
4.评测指标
◆准确率
◆速度
构建分类模型的时间(训练速度)
使用分类模型的时间(预测速度)
◆鲁棒性:模型在处理噪音和缺失值方面的能力
◆可扩展性:模型用在更大规模的数据集上的能力
◆可解释性
5.示例:红酒分类
5.1.示例数据
对于红酒品质的分类, 可以基于红酒的理化指标(例如:酒精的浓度、 pH值、 糖的含量、非挥发性酸含量、 挥发性酸含量、 柠檬酸含量等)作为特征, 建立分类模型, 然后对红酒品质进行预测。 本案例中, 我们将使用UCI数据库中的 Wine Quality Data Set 数据集,利用k-近邻分类算法来进行红酒品质的分类。

5.2.分析
0、 1、 2、 3为训练集,4为测试集,k = 1, 2, 3, 4
街区距离
d(4, 0) = |7.4-7.4|+ |0.70-0.70|+ |0.00-0.00|+ |1.9-1.9|+ |0.076-0.076|+ |11.0-11.0|+ |34.0-34.0|+ |0.9978-0.9978|+ |3.51-3.51|+ |0.56-0.56|+|9.4-9.4|=0.0
d(4, 1) = |7.4-7.8|+ |0.70-0.88|+ |0.00-0.00|+ |1.9-2.6|+ |0.076-0.098|+ |11.0-25.0|+ |34.0-67.0|+ |0.9978-0.9968|+ |3.51-3.20|+ |0.56-0.68|+|9.4-9.8|=49.133=49.1
d(4, 2) = 25.7 d(4, 3) = 37.6
K=1:最相邻为0,q=5
K=2:最相邻为0和2,取众数,q=5
K=3:最相邻为0、2和3,取众数,q=5
K=4:最相邻为0、1、2和3,取众数,q=5
5.3.实例
A.java单机版
1).计算测试数据和训练数据中每个点之间的距离;
2).对距离进行排序,截取K个最近距离的数据;
3).对K个数据中的结果计算众数;
4).返回结果
代码实现:https://github.com/pingszi/machinelearning.git -> knn->java
B.mapreduce大数据版
1).测试数据读入内存,训练数据做为mapper读取的数据,适用于训练数据多而测试数据少的情况;
2).mapper遍历测试数据,计算与训练数据的距离,context.write(测试数据,距离-训练数据的结果);
3).reducer接收到测试数据和测试数据与所有训练数据距离的集合,对距离进行排序,截取K个最近距离的数据,并对K个数据中的结果计算众数,context.write(测试数据,结果);
https://github.com/pingszi/machinelearning.git -> knn->mapreduce

原创粉丝点击