机器学习面试之KNN

KNN(K-NearestNeighbor)K近邻算法,无模型训练过程,样本即判断标准。

题目:以下哪个图是KNN算法的训练边界(A)


机器学习面试之KNN_第1张图片
KNN分类边界

      KNN算法肯定不是线性的边界, 所以直的边界就不用考虑了。另外这个算法是看周围最近的k个样本的分类用以确定分类,所以边界一定是坑坑洼洼的。

1)KNN算法简介

        给一个训练数据集和一个新的实例,在训练数据集中找出与这个新实例最近的k个训练实例,然后统计最近的k个训练实例中所属类别计数最多的那个类别,就是新实例的类。

2)KNN算法三要素

        k值的选择

        距离的度量(一般采用欧式距离)

        分类决策规则(多数表决投票规则)

3)k值的选择

        k值越小,说明模型越复杂,更加容易过拟合

        如果选择较小的K值,就相当于用较小的邻域中的训练实例进行预测,“学习”近似误差会减小,只有与输入实例较近或相似的训练实例才会对预测结果起作用,与此同时带来的问题是“学习”的估计误差会增大,换句话说,K值的减小就意味着整体模型变得复杂,容易发生过拟合;

        k值越大,说明模型越简单,如果k=N的时候就表明无论什么点都是训练集中类别最多的那个类

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

        K=N,则完全不足取,因为此时无论输入实例是什么,都只是简单的预测它属于在训练实例中最多的累,模型过于简单,忽略了训练实例中大量有用信息。

        所以一般k会取一个较小的值,然后用交叉验证来确定

        这里所谓的交叉验证就是将样本划分一部分出来为预测样本,比如95%训练,5%预测,然后k分别取1,2,3,4,5之类的,进行预测,计算最后的分类误差,选择误差最小的k

4)KNN的回归

        在找到最近的k个实例之后,可以计算这k个实例的平均值作为预测值。或者还可以给这k个实例添加一个权重再求平均值,这个权重与度量距离成反比(越近权重越大)。

5)KNN的优缺点

        优点:

                思想简单,理论成熟,既可以分类也可以回归

                可用于非线性分类

                训练时间复杂度为O(n)

                准确度高,对数据没有假设,对outlier不敏感

        缺点:

                计算量大

                样本不平衡问题(即有的类别的样本数量很多,优点样本数量很少)

                需要大量的内存

        在使用k近邻法进行分类时,对新的实例,根据其k个最近邻的训练实例的类别,通过多数表决的方式进行预测。由于k近邻模型的特征空间一般是n维实数向量,所以距离的计算通常采用的是欧式距离。关键的是k值的选取,如果k值太小就意味着整体模型变得复杂,容易发生过拟合,即如果邻近的实例点恰巧是噪声,预测就会出错,极端的情况是k=1,称为最近邻算法,对于待预测点x,与x最近的点决定了x的类别。k值得增大意味着整体的模型变得简单,极端的情况是k=N,那么无论输入实例是什么,都简单地预测它属于训练集中最多的类,这样的模型过于简单。经验是,k值一般去一个比较小的值,通常采取交叉验证的方法来选取最优的k值。

        实现k近邻法时,主要考虑的问题是如何对训练数据进行快速k近邻搜索,这点在特征空间的维数大以及训练数据容量大时尤其重要。k近邻法的最简单实现是线性扫描,这时要计算输入实例与每一个训练实例的距离,当训练集很大时,计算非常耗时,这种方法是不可行的。为了提高k近邻搜索的效率,可以考虑使用特殊的结构存储训练数据,以减少计算距离的次数。具体方法有很多,比如kd树方法。

你可能感兴趣的:(机器学习面试之KNN)