@
目录一、算法概念
什么是KNN?
K-近邻 (KNN) 是一种监督算法。KNN 背后的基本思想是在训练空间中找到距离新数据点最近的 K 个数据点,然后根据 k 个最近数据点中多数类别对新数据点进行分类,类似于“物以类聚”的思想,将一个样本的类别归于它的邻近样本。K-近邻算法是一种惰性学习模型(lazy learning),也称为基于实例学习模型,这与勤奋学习模型(eager learning)不一样。
勤奋学习模型在训练模型的时候会很耗资源,它会根据训练数据生成一个模型,在预测阶段直接带入数据就可以生成预测的数据,所以在预测阶段几乎不消耗资源。
惰性学习模型在训练模型的时候不会估计由模型生成的参数,他可以即刻预测,但是会消耗较多资源,例如KNN模型,要预测一个实例,需要求出与所有实例之间的距离。
K-近邻算法是一种非参数模型,参数模型使用固定的数量的参数或者系数去定义模型,非参数模型并不意味着不需要参数,而是参数的数量不确定,它可能会随着训练实例数量的增加而增加,当数据量大的时候,看不出解释变量和响应变量之间的关系的时候,使用非参数模型就会有很大的优势,而如果数据量少,可以观察到两者之间的关系的,使用相应的模型就会有很大的优势。
存在一个样本集,也就是训练集,每一个数据都有标签,也就是我们知道样本中每个数据与所属分类的关系,输入没有标签的新数据后,新数据的每个特征会和样本集中的所有数据对应的特征进行比较,算出新数据与样本集其他数据的欧几里得距离,这里需要给出K值,这里会选择与新数据距离最近的K个数据,其中出现次数最多的分类就是新数据的分类,一般k不会大于20。
KNN在做回归和分类的主要区别,在于最后做预测时候的决策不同。在分类预测时,一般采用多数表决法。在做回归预测时,一般使用平均值法。
多数表决法:分类时,哪些样本离我的目标样本比较近,即目标样本离哪个分类的样本更接近。
平均值法: 预测一个样本的平均身高,观察目标样本周围的其他样本的平均身高,我们认为平均身高是目标样本的身高。
这里就运用了KNN的思想。KNN方法既可以做分类,也可以做回归,这点和决策树等算法相同。
由上图KNN分类算法可以发现,数据分为蓝色和绿色两个类别,当有一个新的数据点(红色)出现,并且 K = 5时,可以看到红色点有 3 个绿色近邻样本和 2个蓝色近邻样本,这说明蓝点将被归类为绿色类,因为多数投票为 3。同样,当 K 值变化时,圆内的近邻样本数量会增加,新的数据点被归类到其对应的多数投票类中。
在 KNN 回归中,因变量是连续的,分布在整个特征空间中。当有新的数据点红色点出现时,会使用某种距离度量(如欧几里得距离)找到最接近的新数据点的 K 个近邻样本。找到这些邻居后,新数据点的预测值通过计算这些邻居的因变量值的平均值来确定。
例如,假设我们想预测学生的考试成绩,而已知的特征是学习时长。我们已经有了许多学生的学习时长和对应的考试成绩数据。现在,针对一个新来的学生,我们知道他的学习时长,通过 KNN 回归,我们可以找到学习时长最接近的 K 个学生,然后将这 K 个学生的考试成绩取平均值,作为这个新学生的成绩预测。
二、算法原理
(一)K值选择
$K$值的选择与样本分布有关,一般选择一个较小的 $K$值,可以通过交叉验证来选择一个比较优的 $K$值,默认值是5。如果数据是三维以下的,如果数据是三维或者三维以下的,可以通过可视化观察来调参。
当$k=1$时的 $k$近邻算法称为最近邻算法,此时将点$X$分配给特征空间中其最近邻的点的类。即:$C_{n}^{1nn}(X)=Y_{(1)}$
$K$值的选择会对 $k$近邻法的结果产生重大影响。若 $K$值较小,则相当于用较小的邻域中的训练样本进行预测,"学习"的偏差减小。
只有与输入样本较近的训练样本才会对预测起作用,预测结果会对近邻的样本点非常敏感。
若 $k$近邻的训练样本点刚好是噪声,则预测会出错。即: 值的减小意味着模型整体变复杂,易发生过拟合。
优点:减少"学习"的偏差。
缺点:增大"学习"的方差(即波动较大)。
若 $K$值较大,则相当于用较大的邻域中的训练样本进行预测。
这时输入样本较远的训练样本也会对预测起作用,使预测偏离预期的结果。 $K$值增大意味着模型整体变简单。
优点:减少"学习"的方差(即波动较小)。
缺点:增大"学习"的偏差。
应用中, $K$值一般取一个较小的数值。通常采用交叉验证法来选取最优的 $K$值, $K$值的选择取决于数据集和问题。较小的 $K$值可能导致过度拟合,而较大的 $K$值可能导致欠拟合,可以尝试不同的 $K$值,以找到特定数据集的最佳值。
(二)距离度量
距离度量是 KNN 算法中用来计算数据点之间相似性的重要组成部分,以下是几种常见的距离度量类型:
1、欧式距离
欧式距离是 KNN 中最广泛使用的距离度量,表示两个数据点在欧几里得空间中的直线距离。
计算公式如下:
$$d(x,y)=\sqrt{\sum_{i=1}n\left(x_i-y_i\right)2}$$
2、曼哈顿距离
曼哈顿距离(Manhattan Distance)是一种衡量两点之间距离的方式,两个点之间的距离是沿着网格(即水平和垂直方向)的路径总和,而不是像欧几里得距离那样的直线距离。
计算公式如下:
$$d(x,y)=\sum_{i=1}^n|x_i-y_i|$$
3、闵可夫斯基距离
闵可夫斯基距离是一个广义的距离度量,可以根据参数
标签:KNN,plt,模型,样本,test,Sentosa,DSML,数据 From: https://www.cnblogs.com/KennethYuen/p/18466891