机器学习算法面试题——最近邻算法【KNN】(一)

(1)写出KNN的公式:

给定训练数据集:

T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } T = \{(x_1, y_1), (x_2, y_2),..., (x_N, y_N)\}

其中, x i χ R n x_i \in \chi \subseteq R^n 为实例的特征向量, y i γ = { c 1 , c 2 , . . . , c k } y_i \in \gamma = \{c_1, c_2, ..., c_k\} 为实例的类别, i = 1 , 2 , . . . , N i = 1, 2, ..., N , 实例特征向量 x x

y = a r g m a x c j x i N K ( x ) I ( y i = c j ) , i = 1 , 2 , . . . , N ; j = 1 , 2 , . . . , K y = argmax_{c_j} \sum_{x_i \in N_K(x)} I(y_i = c_j), i = 1, 2, ..., N; j = 1, 2, ..., K

$I $为指示函数。

(2)KNN的原理:

给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最近类的 k k 个实例,这 k k 个实例的多数属于某个类,就把该输入实例分为这个类。

(3)判断KNN中K很大/小的时候,拟合情况:

如果选择较大的 k k 值,就相当于用较大邻域中的训练实例进行预测。其优点是可以减少学习的估计误差,但缺点是学习的近似误差会增大,这时与输入实例较远的(不相似的)训练实例也会对预测起作用,使预测发生错, k k 的增大意味着整体模型变得简单。

如果选择较小的 k k 值,就相当于用较小的邻域中的训练实例进行预测,“学习”的近似误差会减少,只有与输入实例较近的(相似的)训练实例才会对预测结果起作用,但缺点是估计误差会增大,预测结果会对近邻的实例点非常敏感,如果近邻的实际的恰巧是噪声,预测就会出错。换句话说, k k 的减少意味着模型变复杂,容易发生过拟合。

(4)kmeans和KNN的区别:

KNN K-Means
1.KNN是分类算法
2.监督学习
3.喂给它的数据集是带label的数据,已经是完全正确的数据
1.K-Means是聚类算法
2.非监督学习
3.喂给它的数据集是无label的数据,是杂乱无章的,经过聚类后才变得有点顺序,先无序,后有序
没有明显的前期训练过程,属于memory-based learning 有明显的前期训练过程
K的含义:来了一个样本x,要给它分类,即求出它的y,就从数据集中,在x附近找离它最近的K个数据点,这K个数据点,类别c占的个数最多,就把x的label设为 K的含义:K是人工固定好的数字,假设数据集合可以分为K个簇,由于是依靠人工定好,需要一点先验知识

相似点:都包含这样的过程,给定一个点,在数据集中找离它最近的点。即二者都用到了NN(Nears Neighbor)算法,一般用KD树来实现NN。

(5)KNN算法中K是如何选择的:

  • 如果选择较小的K值,就相当于用较小的邻域中的训练实例进行预测,“学习”近似误差会减小,只有与输入实例较近或相似的训练实例才会对预测结果起作用,与此同时带来的问题是“学习”的估计误差会增大。换句话说,K值的减小就意味着整体模型变得复杂,容易发生过拟合;
  • 如果选择较大的K值,就相当于用较大领域中的训练实例进行预测,其优点是可以减少学习的估计误差,但缺点是学习的近似误差会增大。这时候,与输入实例较远(不相似的)训练实例也会对预测器作用,使预测发生错误,且K值的增大就意味着整体的模型变得简单。
  • K=N,此时无论输入实例是什么,都只是简单的预测它属于在训练实例中最多的累,模型过于简单,忽略了训练实例中大量有用信息。
  • 实际中,使用交叉验证的方法选择最优的K的取值。

(6)K-Means或KNN中,通常使用欧式距离来表示最近的数据点之间的距离,有时候也使用曼哈度距离,对比两者的区别:

  • 欧式距离最常见的是两个或多个点之间的距离表示法,又称为欧几里得距离。也就是通常所说的L2范数,公式如下。欧式距离的缺点是它将样本的不同属性之间的差别等同看待,这一点有时候不能满足实际要求。
    L 2 ( x i , x j ) = ( l = 1 n x i ( l ) x j l 2 ) 1 2 L_2(x_i, x_j) = (\sum_{l = 1}^n|x_i^{(l)} - x_j^{l}|^2)^{\frac{1}{2}}

  • 曼哈顿距离,也就是欧式空间中的在直角坐标系上两个点所形成的线段对轴产生的投影的距离总和。也就是我们所说的L1距离。例如,坐标(x1,y1)的点P1与坐标(x2, y2)的点P2的曼哈顿距离计算公式为:
    L 1 ( x i , x j ) = l = 1 n x i ( l ) x j ( l ) L_1(x_i, x_j) = \sum_{l = 1}^n|x_i^{(l)} - x_j^{(l)}|
    参考资料:
    【1】统计学习方法——李航
    【2】牛客网——KNN

猜你喜欢

转载自blog.csdn.net/weixin_43763859/article/details/106828296