由上述可知,KNN由三个基本要素决定:距离度量、K值选择和决策原则。决策原则通常用的多数表决法,所以真正关注的是距离度量和K值选择。这种计算方法没有涉及归纳和演绎过程,无需参数估计,因此又被称之为“懒惰算法”。
图1 KNN分类算法示意图
02 距离度量 在计算样本之间的距离时,最常用的是闵可夫斯基距离,其公式表达如下:其中,p是一个可变参数,当p=1时,即为曼哈顿距离(如图2红、蓝、黄线所示);当p=2时,即为欧式距离(如图2绿线所示)。欧式距离表达2个样本的直线距离,更是经常作为衡量距离的指标。
图2 曼哈顿距离和欧式距离
03 K值的选择 对于k值的选择,没有一个固定的经验,一般根据样本的分布进行初步确定(取训练样本数的平方根),再通过交叉验证选择一个合适的k值。K值选取过小,相当于用较小邻域中的训练实例进行预测,噪音数据或异常值会过度影响测试数据的分类,极端情况是K=1;K值选取过大,相当于用较大邻域中的训练实例进行预测,与输入实例较远的训练实例也会对预测起作用,极端情况是K=n。 04 案例分析(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) |
(2)探索和准备数据
A.查看数据结构和分类情况。代码和初步结果如下:B. 将数据打散,进行随机排序,并查看特征详细情况。可以发现,不同特征之间测量尺度不同,可能会潜在地导致分类出错。因此,需要将特征数据进行标准化处理。代码和初步结果如下:
C.数据标准化处理。数据标准化处理的方法有很多种,在这里我们使用“最大-最小标化法”,使标化后的数据落在0-1之间。代码和初步结果如下:
D. 创建训练数据和测试数据。将数据划分为训练数据集和测试数据集,通常的比例为7:3。在B步骤,我们已经将数据随机打散,因此我们将前210个作为训练集,后100个作为测试集。代码如下:
(3)基于训练集数据集训练模型
R语言中实现KNN算法的函数包有很多,在这里我们使用class包中的knn函数,其介绍如图3所示。训练集的样本数为210,我们取15作为初始K值(≈210的平方根)。
图3 class包knn函数介绍 (4)评价模型性能 评价模型性能是评估测试数据中预测的分类与实际分类的匹配程度。这个过程可以通过gmodels::CrossTable函数实现。 我们发现,经训练建立的KNN算法,可正确预测测试集(100个样本)中的81个样本,准确率为81%。(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% |
总结
KNN算法作为一种最简单的机器学习算法,具有思路简单、易于理解、易于实现、无需估计参数、无需训练、对数据分布没有要求等优点,适用于类域的交叉或重叠较多的待分样本。当然,不可避免的也存在缺点,如计算量大、内存要求高等,最大的问题在于当已知样本分类极度不平衡时,出现差错的可能性较大,需要采用权值加以改进。
数据库链接:
http://archive.ics.uci.edu/ml/datasets/Vertebral+Column
制作:胡建雄、周燕
初审:何冠豪
审核:肖建鹏、刘涛
指导:马文军
关于我们
《数据分析和应用》致力于为全国各地公共卫生与医学工作者(机构)提供专业可靠的统计咨询、研究设计、数据分析、高通量测序数据和序列分析、调研报告等服务(详细可见公众号菜单栏),欢迎有需要的人员和机构与我们联系。邮箱:statisic@gdiph.org.cn
微信号:gdiph-stat
-欢迎扫码关注-