K-近邻(KNN)分类器(一)

前言

自此开始机器学习篇,先从最简单的分类器——K-近邻分类器开始

正文

算法流程

K-近邻算法伪代码如下,
对未知类别属性的数据集中的每个点依次执行以下操作:
(1) 计算已知类别数据集中的点与当前点之间的距离;
(2) 按照距离递增次序排序;
(3) 选取与当前点距离最小的k个点;
(4) 确定前k个点所在类别的出现频率;
(5) 返回前k个点出现频率最高的类别作为当前点的预测分类。

实现流程

(1) 收集数据:可以使用任何方法。
(2) 准备数据:距离计算所需要的数值,最好是结构化的数据格式。
(3) 分析数据:可以使用任何方法。
(4) 测试算法:计算错误率。
(5) 使用算法:首先需要输入样本数据和结构化的输出结果,然后运行k-近邻算法判定输 入数据分别属于哪个分类,最后应用对计算出的分类执行后续的处理

优缺点

优点:精度高、对异常值不敏感、无数据输入假定。
缺点:计算复杂度高、空间复杂度高。
适用数据范围:数值型和标称型。

例题

我的朋友海伦一直使用在线约会网站寻找适合自己的约会对象。尽管约会网站会推荐不同的 人选,但她并不是喜欢每一个人。经过一番总结,她发现曾交往过三种类型的人: 不喜欢的人 、 魅力一般的人 、极具魅力的人 ,在数据中分别用1、2、3表示。
海伦收集约会数据已经有了一段时间,她把这些数据存放在文本文件datingTestSet.txt中。海伦的样本主要包含以下3种特征: 每年获得的飞行常客里程数 、玩视频游戏所耗时间百分比 、 每周消费的冰淇淋公升数 。试帮助海伦分类出新约会的人所属类型。

数据

每年获得的飞行常客里程数 每周消费的冰淇淋公升数 玩视频游戏所耗时间百分比 类别
40920 8.326976 0.953952 3
14488 7.153469 1.673904 2
26052 1.441871 0.805124 1
75136 13.147394 0.428964 1
38344 1.669788 0.134296 1
72993 10.141740 1.032955 1
35948 6.830792 1.213192 3
42666 13.276369 0.543880 3
67497 8.631577 0.749278 1
35483 12.273169 1.508053 3

实现要点

(1)求不同人的特征的欧式距离
(2)使用最大最小标准化将数据归一化处理
(3)正确实现KNN算法过程
(4)可用混淆矩阵和准确率来评估模型最后的预测效果
(5)可随机地选择一定比例的训练集和测试集

预测结果
选择K=4,随机抽取70%作为训练集,30%作为测试集,最终对测试集预测类别,并计算准确率和混淆矩阵作为评估
K-近邻(KNN)分类器(一)代码链接待审核