我们知道,k-近邻算法有三个核心要素:k值的选取、邻居距离的度量和分类决策的制订。下面分别对它们进行简单介绍。
3.4.1 k值的选取
k近邻算法优点很明显,简单易用,可解释性强,但也有其不足之处。例如,“多数表决”会在类别分布偏斜时浮现缺陷。也就是说,k值的选取非常重要,出现频率较多的样本将会主导测试点的预测结果。
k值的选取,对k-近邻算法的分类性能有很大影响。如果k值选取较小,相当于利用较小邻域的训练实例去预测,“学习”而得的近似误差较小,但预测的结果对训练样例非常敏感。如果这个近邻恰好就是噪声,那么预测就会出错。也就是说,k值较小,分类算法的健壮性较差。
倘若k值较大,则相当于在较大邻域中训练实例进行预测,它的分类错误率的确有所下降,即学习的估计误差有所降低。但随着k值的增大,分类错误率又会很快回升。这是因为,k值增大带来的健壮性,很快就会被多出来的邻居“裹挟而来”的噪声点所抑制,也就是说,学习的近似误差会增大。
换句话说,对于k值的选取,过犹不及。通常,人们采取交叉验证(Cross Validation,简称CV)的方式来选取最优的k值。即对于每一个k值(k=1,2,3,…),都做若干次交叉验证,然后计算出它们各自的平均误差,最后择其小者定之。
3.4.2邻居距离的度量
不量化,无以度量远近。
k-近邻算法要计算“远亲近邻”,就要求样本的所有特征都能做到可比较的量化。如果样本数据的某些特征是非数值类型的,那也要想办法将其量化。比如颜色,不同的颜色(如红、绿、蓝)就是非数值类型的,它们之间好像没有什么距离可言。但如果将颜色(这种非数值类型)转换为灰度值(数值类型:0~255),那么就可以计算不同颜色之间的距离(或说差异度)。
此外,不同样本可能有多个特征,不同特征亦有不同的定义域和取值范围,它们对距离计算的影响可谓大相径庭。比如,对于颜色而言,245和255之间相差10。但对于天气的温度,37°C和27°C之间也相差10。这两个距离都是10,但相差的幅度却大不相同。这是因为,颜色的值域是0~255,而通常气温的年平均值在-40°C~40°C,这样,前者的差距幅度在10/256=3.9%,而后者的差距幅度是10/80=12.5%。因此,为了公平起见,样本的不同特征需要做归一化(Normalization)处理,即把特征值映射到[0,1]范围之内处理。
归一化机制有很多,最简单的方法莫过于min-max缩放,其过程是这样的:对于给定的特征,首先找到它的最大值(MAX)和最小值(MIN),然后对于某个特征值x,它的归一化值
在特征空间上,某两个点之间的距离也是它们相似度的反映。距离计算的方式不同,也会显著影响谁是它的“最近邻”,从而也会显著影响分类结果。
样本的特征向量, 为类别标签。对于一个新样本 ,它在训练集合中的最近邻居标记为 ,可用公式(3-4)来选取它的最近邻居:
新样本 和训练集中的样本 之间的距离。于是,新样本的类别就被预测为距离它最近的k个邻居的标签,记作 。
很显然,是如何度量任意两个样本之间的距离。对于m维样本xi和样本xj之间的距离Lp,通常可以用欧几里德距离(Euclidean Distance,简称欧氏距离)表示:
当m = 2,对于二维平面两点 与 间的欧氏距离可表示为:
衡量两个向量的距离很多种标准,除了欧几里得距离之外,还有绝对值距离或称曼哈顿距离(Manhattan Distance,简称曼式距离)