Featured image of post K-近邻(KNN)分类器(一)

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

前言

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

正文

算法流程

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

实现流程

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

优缺点

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

例题

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

数据

每年获得的飞行常客里程数每周消费的冰淇淋公升数玩视频游戏所耗时间百分比类别
409208.3269760.9539523
144887.1534691.6739042
260521.4418710.8051241
7513613.1473940.4289641
383441.6697880.1342961
7299310.1417401.0329551
359486.8307921.2131923
4266613.2763690.5438803
674978.6315770.7492781
3548312.2731691.5080533

实现要点

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

预测结果 选择K=4,随机抽取70%作为训练集,30%作为测试集,最终对测试集预测类别,并计算准确率和混淆矩阵作为评估 代码链接

comments powered by Disqus