k近邻算法_机器学习之K近邻分类算法的实现
由上述可知,KNN由三个基本要素决定:距离度量、K值选择和决策原则。决策原则通常用的多数表决法,所以真正关注的是距离度量和K值选择。这种计算方法没有涉及归纳和演绎过程,无需参数估计,因此又被称之为“懒惰算法”。
图1 KNN分类算法示意图
02 距离度量在计算样本之间的距离时,最常用的是闵可夫斯基距离,其公式表达如下:
其中,p是一个可变参数,当p=1时,即为曼哈顿距离(如图2红、蓝、黄线所示);当p=2时,即为欧式距离(如图2绿线所示)。欧式距离表达2个样本的直线距离,更是经常作为衡量距离的指标。
图2 曼哈顿距离和欧式距离
03K值的选择对于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% |
05
总结
KNN算法作为一种最简单的机器学习算法,具有思路简单、易于理解、易于实现、无需估计参数、无需训练、对数据分布没有要求等优点,适用于类域的交叉或重叠较多的待分样本。当然,不可避免的也存在缺点,如计算量大、内存要求高等,最大的问题在于当已知样本分类极度不平衡时,出现差错的可能性较大,需要采用权值加以改进。
数据库链接:
http://archive.ics.uci.edu/ml/datasets/Vertebral+Column
制作:胡建雄、周燕
初审:何冠豪
审核:肖建鹏、刘涛
指导:马文军
关于我们
《数据分析和应用》致力于为全国各地公共卫生与医学工作者(机构)提供专业可靠的统计咨询、研究设计、数据分析、高通量测序数据和序列分析、调研报告等服务(详细可见公众号菜单栏),欢迎有需要的人员和机构与我们联系。
邮箱:statisic@gdiph.org.cn
微信号:gdiph-stat
-欢迎扫码关注-
k近邻算法_机器学习之K近邻分类算法的实现相关推荐
- k近邻算法_机器学习分类算法之k近邻算法
本编文章将介绍机器学习入门算法-k近邻算法,将会用demo演示机器学习分类算法. 在先介绍算法时,先回顾分类和回归的区别.像文章分类识别也是这样处理的,如1代表体育,2代表科技,3代表娱乐属于分类问题 ...
- k近邻算法_图穷匕见:K近邻算法与手写数字识别
机器学习算法是从数据中产生模型,也就是进行学习的算法.我们把经验提供给算法,它就能够根据经验数据产生模型.在面对新的情况时,模型就会为我们提供判断(预测)结果.例如,我们根据"个子高.腿长. ...
- k均值算法 二分k均值算法_如何获得K均值算法面试问题
k均值算法 二分k均值算法 数据科学访谈 (Data Science Interviews) KMeans is one of the most common and important cluste ...
- K近邻算法:机器学习萌新必学算法
摘要:K近邻(k-NearestNeighbor,K-NN)算法是一个有监督的机器学习算法,也被称为K-NN算法,由Cover和Hart于1968年提出,可以用于解决分类问题和回归问题. 1. 为什么 ...
- k近邻算法_【白话机器学习】算法理论+实战之K近邻算法
1. 写在前面 如果想从事数据挖掘或者机器学习的工作,掌握常用的机器学习算法是非常有必要的,在这简单的先捋一捋, 常见的机器学习算法: 监督学习算法:逻辑回归,线性回归,决策树,朴素贝叶斯,K近邻,支 ...
- python k近邻算法_python中的k最近邻居算法示例
python k近邻算法 K最近邻居(KNN) (K-Nearest Neighbors (KNN)) KNN is a supervised machine learning algorithm t ...
- 通过交叉验证寻找K近邻算法的最优K值
问题引出 之前我们使用K近邻算法尝试寻找用户年龄与预估薪资之间的某种相关性,以及他们是否有购买SUV的决定.主要代码如下: from sklearn.neighbors import KNeighbo ...
- k均值算法 二分k均值算法_使用K均值对加勒比珊瑚礁进行分类
k均值算法 二分k均值算法 Have you ever seen a Caribbean reef? Well if you haven't, prepare yourself. 您见过加勒比礁吗? ...
- java实现 k nn算法_数据挖掘(二)——Knn算法的java实现
本文接数据挖掘-基于Kmeans算法.MBSAS算法及DBSCAN算法的newsgroup18828文本聚类器的JAVA实现(上). (update 2012.12.28 关于本项目下载及运行的常见问 ...
最新文章
- Android开发之单例模式
- 2021,春节联欢会
- webstorm 内存溢出怎么弄_webstrom 内存溢出,软件崩溃卡死解决的方法
- (转)The Standard C Library 经典的基础(下)
- 最全的spark基础知识解答
- use proxy for git
- Cartographer ROS for Turtlebots 初探
- 失焦事件触发_JavaScript event 事件详解
- 荣耀平板5710升级鸿蒙系统,荣耀平板也要升级至鸿蒙系统了 今年Q4开始
- Android 画圆
- 以华为公司为例的我国业务流程管理实践研究
- wMy_Python ~储存相关~
- ddl和dml(DDL和DML包含哪些动词)
- Java入门-学习黑马程序员Java基础视频教程(到P92)
- Android 关于佳博和汉印蓝牙热敏打印机开发
- wss://域名/xxx 404
- 骨传导耳机是怎么传声的、骨传导耳机的优点是什么
- 应广单片机程序模块化的工程建立
- 三级菜单-输出各省各市各县各镇
- 海量辅助无限多开 就在新浪页游助手