出品:Python数据之道
作者:叶庭云
整理:Lemon
机器学习KNN算法实践
预测城市空气质量
「Python数据之道」导读: 之前在公众号上分享过 “图解KNN算法” 的内容(点击下面链接前往),今天来分享下使用KNN算法进行案例实践,进一步加深对KNN算法的理解。
一、KNN算法简介
KNN(K-Nearest Neighbor)最邻近分类算法是数据挖掘分类(classification)技术中常用算法之一,其指导思想是"近朱者赤,近墨者黑",即由你的邻居来推断出你的类别。
KNN 最邻近分类算法的实现原理:为了判断未知样本的类别,以所有已知类别的样本作为参照,计算未知样本与所有已知样本的距离,从中选取与未知样本距离最近的K个已知样本,再根据少数服从多数的投票法则(majority-voting),将未知样本与K个最邻近样本中所属类别占比较多的归为一类。
KNN算法的核心思想:寻找最近的k个数据,推测新数据的分类
KNN算法的关键:
样本的所有特征都要做可比较的量化 若是样本特征中存在非数值的类型,必须采取手段将其量化为数值。例如样本特征中包含颜色,可通过将颜色转换为灰度值来实现距离计算。
样本特征要做归一化处理 样本有多个参数,每一个参数都有自己的定义域和取值范围,他们对距离计算的影响不一样,如取值较大的影响力会盖过取值较小的参数。所以样本参数必须做一些 scale 处理,最简单的方式就是所有特征的数值都采取归一化处置。
需要一个距离函数以计算两个样本之间的距离 通常使用的距离函数有:欧氏距离、余弦距离、汉明距离、曼哈顿距离等,一般选欧氏距离作为距离度量,但是这是只适用于连续变量。在文本分类这种非连续变量情况下,汉明距离可以用来作为度量。通常情况下,如果运用一些特殊的算法来计算度量的话,K近邻分类精度可显著提高,如运用大边缘最近邻法或者近邻成分分析法。
以计算二维空间中的 A(x1,y1)
、B(x2,y2)
两点之间的距离为例,常用的欧氏距离的计算方法如下图所示:
确定
K
的值 K 值选的太大易引起欠拟合,太小容易过拟合,需交叉验证确定K值。KNN 算法的优点:简单,易于理解,易于实现,无需估计参数,无需训练;适合对稀有事件进行分类;特别适合于多分类问题(multi-modal,对象具有多个类别标签),
KNN
比SVM
的表现要好。KNN算法的缺点:KNN算法在分类时有个主要的不足是:当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的 K 个邻居中大容量类的样本占多数。该算法只计算最近的邻居样本,某一类的样本数量很大,那么或者这类样本并不接近目标样本,或者这类样本很靠近目标样本。无论怎样,数量并不能影响