搜文章
推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > 数据分析和应用 > 机器学习之K近邻分类算法的实现

机器学习之K近邻分类算法的实现

数据分析和应用 2020-09-16


K近邻算法(k-nearest neighbors, KNN)是最基本的机器学习算法之一。所谓的K,就是距离最近的K个邻居的意思。其实,KNN在我们平常的生活中也会不自主的应用,比如,俗语说的“人以类聚、物以群分”。KNN方法既可以做分类,也可以做回归,在这里我们重点关注分类算法。

01
  KNN算法的核心思想

机器学习之K近邻分类算法的实现
KNN算法的核心思想是,选取某未知样本周围距离最短的K个已知样本,根据一定的决策原则判断未知样本的类别(如少数服从多数)。举个例子,如图1所示,蓝方和红三角都是已知的类别,绿圆表示未知的样本。那么按照KNN算法的思想和少数服从多数的原则,当取最近邻点(即K=1)时,绿圆应为蓝方;当K=5时,绿圆应为红三角。

由上述可知,KNN由三个基本要素决定:距离度量、K值选择和决策原则。决策原则通常用的多数表决法,所以真正关注的是距离度量和K值选择。这种计算方法没有涉及归纳和演绎过程,无需参数估计,因此又被称之为“懒惰算法”。

机器学习之K近邻分类算法的实现

图1 KNN分类算法示意图

02
  距离度量

机器学习之K近邻分类算法的实现
在计算样本之间的距离时,最常用的是闵可夫斯基距离,其公式表达如下:

机器学习之K近邻分类算法的实现

其中,p是一个可变参数,当p=1时,即为曼哈顿距离(如图2红、蓝、黄线所示);当p=2时,即为欧式距离(如图2绿线所示)。欧式距离表达2个样本的直线距离,更是经常作为衡量距离的指标。


机器学习之K近邻分类算法的实现

图2 曼哈顿距离和欧式距离

03
K值的选择

机器学习之K近邻分类算法的实现
对于k值的选择,没有一个固定的经验,一般根据样本的分布进行初步确定(取训练样本数的平方根),再通过交叉验证选择一个合适的k值。K值选取过小,相当于用较小邻域中的训练实例进行预测,噪音数据或异常值会过度影响测试数据的分类,极端情况是K=1;K值选取过大,相当于用较大邻域中的训练实例进行预测,与输入实例较远的训练实例也会对预测起作用,极端情况是K=n。

04
案例分析

机器学习之K近邻分类算法的实现
机器学习之K近邻分类算法的实现

(1)收集数据

本文以KNN算法筛检脊椎病变患者为案例。脊椎病变相关的数据来源于机器学习知识库(UC Irvine Machine Learning Repository),该数据集为真实公开的非人造数据。该数据集记录了病人的骨盆和形状位置特征,均为连续型变量。因变量为分类变量,用于甄别病人正常与不正常(Normal &Abnormal)。数据集说明如表1所示。
表1 数据集变量名解释

特征/标签名

说明

pelvic incidence

骨盆投射角

pelvic tilt

骨盆倾斜

lumbar lordosis angle

腰椎前凸角度

sacral slope

骶骨倾斜

pelvic radius

骨盆半径

grade of spondylolisthesis

品位滑脱

class

分类标签,分为正常与不正常

(Normal   &Abnormal)

机器学习之K近邻分类算法的实现

(2)探索和准备数据

A.查看数据结构和分类情况。代码和初步结果如下:

机器学习之K近邻分类算法的实现


B. 将数据打散,进行随机排序,并查看特征详细情况。可以发现,不同特征之间测量尺度不同,可能会潜在地导致分类出错。因此,需要将特征数据进行标准化处理。代码和初步结果如下:

机器学习之K近邻分类算法的实现


C.数据标准化处理。数据标准化处理的方法有很多种,在这里我们使用“最大-最小标化法”,使标化后的数据落在0-1之间。代码和初步结果如下:

机器学习之K近邻分类算法的实现

机器学习之K近邻分类算法的实现


D. 创建训练数据和测试数据。将数据划分为训练数据集和测试数据集,通常的比例为7:3。在B步骤,我们已经将数据随机打散,因此我们将前210个作为训练集,后100个作为测试集。代码如下:

机器学习之K近邻分类算法的实现

机器学习之K近邻分类算法的实现

(3)基于训练集数据集训练模型

R语言中实现KNN算法的函数包有很多,在这里我们使用class包中的knn函数,其介绍如图3所示。训练集的样本数为210,我们取15作为初始K值(≈210的平方根)。

机器学习之K近邻分类算法的实现

图3 class包knn函数介绍

机器学习之K近邻分类算法的实现

机器学习之K近邻分类算法的实现
(4)评价模型性能
评价模型性能是评估测试数据中预测的分类与实际分类的匹配程度。这个过程可以通过gmodels::CrossTable函数实现。

机器学习之K近邻分类算法的实现

机器学习之K近邻分类算法的实现

我们发现,经训练建立的KNN算法,可正确预测测试集(100个样本)中的81个样本,准确率为81%。
机器学习之K近邻分类算法的实现

(5)算法优化和提升

我们可以通过改变K值,根据准确率选择合适的K值。由表2可知,当k=20时,该算法识别的准确率最高。

表2 不同K值下的脊椎病变患者筛检准确率

K

真阳性数量

真阴性数量

准确率

1

61

24

85%

5

58

20

78%

10

56

20

76%

12

61

21

82%

15

60

21

81%

17

62

22

84%

20

63

23

86%

25

63

19

82%

30

62

19

81%

05

总结

机器学习之K近邻分类算法的实现

KNN算法作为一种最简单的机器学习算法,具有思路简单、易于理解、易于实现、无需估计参数、无需训练、对数据分布没有要求等优点,适用于类域的交叉或重叠较多的待分样本。当然,不可避免的也存在缺点,如计算量大、内存要求高等,最大的问题在于当已知样本分类极度不平衡时,出现差错的可能性较大,需要采用权值加以改进。



数据库链接:

http://archive.ics.uci.edu/ml/datasets/Vertebral+Column

数据分析和应用 发起了一个读者讨论 关于机器学习算法,您有什么建议呢?

制作:胡建雄、周燕

初审:何冠豪

审核:肖建鹏、刘涛

指导:马文军

机器学习之K近邻分类算法的实现

关于我们

《数据分析和应用》致力于为全国各地公共卫生与医学工作者(机构)提供专业可靠的统计咨询、研究设计、数据分析、高通量测序数据和序列分析、调研报告等服务(详细可见公众号菜单栏),欢迎有需要的人员和机构与我们联系。

邮箱:statisic@gdiph.org.cn         

-欢迎扫码关注-



版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《机器学习之K近邻分类算法的实现》的版权归原作者「数据分析和应用」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注数据分析和应用微信公众号

数据分析和应用微信公众号:gdiph-stat

数据分析和应用

手机扫描上方二维码即可关注数据分析和应用微信公众号

数据分析和应用最新文章

精品公众号随机推荐