KNN算法
1.1 简介
K近邻 (k-Nearest Neighbors, KNN) 算法是一种分类与回归算法,是机器学习算法中最基础、最简单的算法之
一 , 1968年由 Cover和 Hart 提出, 应用场景有字符识别、 文本分类、 图像识别等领域。
1.2 核心思想
一个样本与数据集中的k个样本最相似, 如果这k个样本中的大多数属于某一个类别, 则该样本(就可以认为)也属于这个类别,具体来说即每个样本都可以用它最接近的k个邻居来代表。
如下图,如果 K = 1,未知数据(绿色的问号点)被小圈中的邻居红色方块”决策“为class2 ;如果 K = 5, 未知数据就会被大圈里的邻居蓝色三角形”决策“为class1(理由是,有3个蓝色三角,大于红色方块的数目)。
1.3 算法执行
1.构造训练样本集,并且样本集中每一数据都有一个标签;
2.输入没有标签的数据,根据每 一个维度的特征,从样本集选出k个最靠近的邻居;
3.用这k个邻居去投票得出未知数据的标签。
1.4 KNN算法的三要素
1.距离待预测点的邻居的个数K(已知设定);
2.样本点之间距离的计算方式;
3.决策函数的选择;
1.5 K值的选择和影响
1.K是k近邻算法中的唯一一个超参数。
超参数: 在机器学习的上下文中,超参数是在开始学习过程之前设置值的参数,而不是通过训练得到的参数数据
。通常情况下,需要对超参数进行优化,给学习机选择一组最优超参数,以提高学习的性能和效果(简单的说超
参 数就是参数中的参数)。
1.5.1 K值的选择
K的选取一般来源于经验,一般选取一个较小的大于1的奇数,一般在 (1, n \sqrt {n} n)之间
1.n较小时,n取 ( 1 , 10 ) (1,10) (1,10)中的奇数;
2.n较大时,n取( 1 , n / 2 ) (1,\sqrt n/2) (1, n /2)中的奇数;
k值过小或过大的对预测结果的影响:
K值偏小
k取值偏小时,预测结果对近邻点的周围的实例及其敏感,容易受到噪声点的干扰,导致过拟合。
不妨取k的一个极小值来分析,比如 k = 1,那么绿色三角形原本属于红色方块的类别,但却由于一个最邻近的噪声点呗误判为蓝色方块类型。
k取值偏大
k取值偏大时,相当于用较大邻域中的训练实例进行预测,其优点是可以减少学习的估计误差,但会导致欠拟合,因为离测试点很远的实例也会影响到预测结果,这就违背了KNN算法的基本思想 ——用邻居数据点的去决策出未知点的类别。
如下图,由于值取值太大,所以即使离三角形很远的点也被纳入的考虑范围,所以导致预测结果失真。
1.6 样本点距离的计算方法
1.6.1 闵科夫斯基距离
L p = ( ∑ i = 1 n ∣ x i − y i ∣ p ) 1 p L_{p}=(\sum_{i=1}^{n}|x_{i}-y_{i}|^{p})^{\frac{1}{p}} Lp=(∑i=1n∣xi−yi∣p)p1
当p=1时就是曼哈顿距离;当p=2时就是欧几里德距离;当p趋近于无穷大时就是切比雪夫距离;
1.6.2曼哈顿距离
L 1 = ( ∑ i = 1 n ∣ x i − y i ∣ ) L_{1}=(\sum_{i=1}^{n}|x_{i}-y_{i}|) L1=(∑