统计学习方法第三章——knn算法
首先要明确的第一个重点是,k邻近不具有显示的学习过程,它是基于实例的一种学习方法,简单来说就是给定一堆西瓜的数据,然后输入一个新西瓜的数据,找到与这个新西瓜最近的k个西瓜,这k个西瓜如果大多数是属于又甜又好吃的西瓜,那么就把这个西瓜分为又甜又好吃的西瓜这一类的西瓜中。
从上述的描述中不难看出,有三个要注意的一个是K值,也就是周围有几个西瓜和新西瓜相邻,如果k太小,那么好处是近似误差会减小,只有特征与这几个西瓜相似的才对预测新西瓜的“甜”“好吃”起作用,但是相同的,会带来一个问题,就是假如在这几个西瓜中不甜的多,那么会带来估计误差,这也就是k值减小使得模型变的复杂,复杂度上升,容易发生过拟合。k太大也就容易理解了,如下图
二是距离的度量,一般采用欧式距离,但也有不同的距离度量可供选择,不同的距离所确定的最近邻点不同。
1:a)
(1)曼哈顿距离:
(2)欧几里得距离:
(3)切比雪夫距离:
(4)闵可夫斯基距离:
(5)马氏(Mahalanobis)距离 :
三是分类决策规则的不同,往往采用的策略是多数表决策略,如果采用的是多数表决策那么,我们可以进行如下推导:
接下来就是实践。我们来看一下不同的k值不同的分类决策对性能有什么影响。
对于经典的IRIS数据集我进行了如下实验
matlab代码如下: