面经 机器学习 KNN(K近邻)

  • 简述一下KNN算法的原理?

    近朱者赤近墨者黑: k 近邻算法实际上利用训练数据集对特征向量空间进行划分,并作为其分类的“模型”。

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

    k近邻模型的三要素:距离度量、k值选择、分类决策规则

  • KNN算法优点和缺点?

    优点

    • 思想简单,理论成熟
    • KNN可以处理多分类问题和回归问题
    • 可以用来非线性分类
    • 由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属的类别,因此对于类域的交叉或重叠较多的待分类样本集来说,KNN方法较其他方法更为适合
    • 比较适用于样本容量比较大的类域的自动分类
    • 准确度高,对数据没有假设,对离群值不敏感。

    缺点

    • 效率低, 尤其是特征数非常多的时候 。因为每一次分类或者回归,都需要计算目标分类点与训练数据所有点之间的距离。
    • 对训练数据依赖度大,当样本分布不均衡,比如其中一类样本过大,新的未知实例容易被归类到这个主导样本, 对稀有类别的预测准确率低 。如下图由于k近邻的点疏密程度不一样,若k值稍微大一点,则会导致分类错误
    • 维数灾难,KNN对多维度的数据处理也不是很好。随着维度增加,看似相近的两个点之间的距离越来越大,就会越来越不像。
    • KD树,球树之类的模型建立需要大量的内存 。
    • 不具有显示的学习过程,导致预测时速度比起逻辑回归之类的算法慢
  • 不平衡样本可以给KNN预测结果造成哪些问题,有没有什么好的解决方式?

    可能造成大数量的样本占多数,但是这类样本不接近目标样本。而数量小的这类样本很靠近目标样本。

    改进方法:和该样本距离小的邻居权值大,远的权值小 (加权投票法)

  • 训练样本是否要一视同仁?

    在训练集中,有些样本可能是更值得依赖的。

    可以给不同的样本施加不同的权重,加强依赖样本的权重,降低不可信赖样本的影响。

  • KNN 计算量过大问题的解决办法?

    目前常用的解决方法是事先对已知样本点进行剪辑,事先去除对分类作用不大的样本

    分组方式:将样本集按近邻关系分解成组,给出每组的质心得位置,以质心作为代表点,和位置样本计算距离,选出距离最近的一个或若干个组,再在组的范围内应用一般KNN算法,由于并不是将位置样本与所有样本计算距离,故该计算可减少计算量,但不能减少存储量。

  • 什么是欧式距离和曼哈顿距离?

    L p L_p Lp 距离

  • 为什么用欧式距离不用曼哈顿距离?

    不用曼哈顿距离,因为它只计算水平或垂直距离,有维度的限制。另一方面,欧氏距离可用于任何空间的距离计算问题。因为,数据点可以存在于任何空间,欧氏距离是更可行的选择。

  • 如何选择合适的距离衡量?

    众所周知当变量数越多,欧式距离的区分能力就越差。

    变量值域对距离的影响:值域越大的变量常常会在距离计算中占据主导作用,因此应先对变量进行标准化。

  • KNN中k如何选取?

    • 如果选择较小的k值,就相当于用较小的邻域中的训练实例进行预测,模型整体地复杂度会上升,如果邻近的实例点恰巧是噪声,预测就会出错,容易发生过拟合。
    • 如果选择较大的k值,就相当于用较大的邻域中的训练实例进行预测,容易欠拟合,使预测不准确。
    • k值小的时候 近似误差小,估计误差大。 k值大 近似误差大,估计误差小。反映了对近似误差与估计误差之间的权衡
    • 如果k=N,则所有预测结果都为训练集实例中最多的分类。
    • 在应用中,k值一般取一个较小的数值,通常使用交叉验证选取最优 k k k,算是超参数。
    • 二分类问题, k k k 选择奇数有助于避免平票。
  • 在KNN的样本搜索中,如何进行高效的匹配查找?

    1. 线性扫描(数据多时,效率低)
    2. 构建数据索引——Clipping和Overlapping两种。前者划分的空间没有重叠,如k-d树;后者划分的空间相互交叠,如R树。
  • 那什么是KD树?怎么构建的?

    kd树是对数据点在k维空间中划分的一种数据结构,主要用于多维空间关键数据的搜索。本质上,kd树就是一种平衡二叉树。

    构建过程:KDTree的构建是一个递归的过程,不断地对k维空间进行切分,生成子结点。在超矩形区域(结点)上选择一个坐标轴和在此坐标轴上的一个切分点,确定一个超平面,这个超平面通过选定的切分点并垂直于选定的坐标轴,将当前超矩形区域切分为左右两个子区域(子结点)。这时,实例被分到两个子区域。这个过程直到子区域内没有实例时终止(终止时的结点为叶结点)。在此过程中,将实例保存在相应的结点上。

  • KD树建立过程中切分维度的顺序是否可以优化?

    先对各个维度计算方差,选取最大方差的维度作为候选划分维度(方差越大,表示此维度上数据越分散);对split维度上的值进行排序,选取中间的点为node-data;按照split维度的node-data对空间进行一次划分;对上述子空间递归以上操作,直到空间只包含一个数据点。分而治之,且循环选取坐标轴。从方差大的维度来逐步切分,可以取得更好的切分效果及树的平衡性。

  • KD树每一次继续切分都要计算该子区间在需切分维度上的中值,计算量很大,有什么方法可以对其进行优化? TODO

    在构建KD树前,依据每一维度先排序,在之后的切分中直接使用。

  • 能简单介绍一下KD树的查找,以及增、删、改的实现流程吗? TODO

    先二叉查找,找到候选最近点;沿着路径进行回溯,画圆,是否父节点平面交割,以判断是否需要进入另一个平面进行查找;依次回溯,画圆,寻找最近点。

  • KDTree的k与KNN的k的区别?

    KNN中的K代表最近的K个样本,KD树中的K代表样本特征的维数。

  • 能否大幅减少训练样本量,同时又保持分类精度?TODO

    在精度下降有限的前提下,降低维度,减少算法的计算量

    浓缩技术(condensing): 基于 Fuzzy ART 的 K- 最近邻分类改进算法,该算法用模糊自适应共振理论(Fuzzy ART)对 K- 最近邻的训练样本集进行浓缩, 以改善 K- 最近邻的计算速度。(就是对样本的维度进行简化,提取出特征明显的维度进行计算

    CHI 概率统计方法进行初步特征提取和模式聚合;(如果某一维在各个类别中取值基本相同, 那么此维对于文本分类的贡献率就相对较低, 如果在各个类别中取值有较大的差异, 那么就具有较强的文本分类能力, 而方差正好是反应变量分布均匀状态的主要指标。)可引入CLA(Classifier’s Local Accuracy)技术进行分类可信度分析以实现两种算法的融合

    编辑技术(editing)

  • K-Means与KNN有什么区别 ?

    K-means是聚类算法,KNN用来分类和回归

  • KNN算法怎样处理缺失值?

    KNN算法缺失数据需要额外处理,一般根据训练集数据的相似性填充,即先找到与缺失数据最近的k个邻居,取其均值、中位数、众数等来填充缺失值。


笔记在我github上,欢迎持续关注

知乎地址
Github地址

至少会持续更新到2023年!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值