Skip to main content
Version: 2.17.1

K近邻

  • 算法介绍

    K近邻(KNN)算法是一种基于实例的学习方法,它把训练集中与输入样本最相似的K个样本作为预测时的参考点,在该K个数据点中按照投票法选择出现次数最多的类别作为分类结果。

  • 使用场景

  1. 对于距离度量比较合适且特征值较少的数据集或者少量数据分类问题、多分类问题和回归问题;
  2. 推荐系统领域指标之间的相似性计算等。
  • 优势介绍
  1. 算法简单易懂,实现容易,适合处理高维特征数据;
  2. 对于异常值不敏感,能够较好地处理非线性决策边界;
  3. 不需要先验信息和假设模型,可适用于各种不同类型的数据集。
  • 劣势介绍
  1. 预测速度相对较慢,当数据集规模变得更大时算法表现会退化;
  2. 对于大量特征之间存在关联和耦合的数据,可能产生比较差的效果;
  3. 所有特征被认为具有相同的重要性,无法解释变量之间内在的关系。
  • 参数介绍

    仅支持通过可视化方式,配置读取该组件参数,参数详情如下表所示:

页签参数参数名称是否必选参数描述默认值
数据源表名inputTable数据表
默认参数选择特征标签列labelColName输入表中选择标签列名类型。
模型参数默认邻居的数量n_neighbors用于kneighbors查询的默认邻居的数量。5
模型参数权重函数weights用于预测的权重函数包括uniform、distance。uniform统一的权重.在每一个邻居区域里的点的权重都是一样的;distance权重点等于他们距离的倒数。使用此函数,更近的邻居对于所预测的点的影响更大;callable,一个用户自定义的方法,此方法接收一个距离的数组,然后返回一个相同形状并且包含权重的数组。uniform
调优参数最近邻选择函数algorithm包括auto、ball_tree、kd_tree、brute。ball_tree是可以克服kd树高纬失效,其构造过程是以质心C和半径r分割样本空间,每个节点是一个超球体;kd_tree构造kd树存储数据以便对其进行快速检索的树形数据结构,kd树也就是数据结构中的二叉树。以中值切分构造的树,每个结点是一个超矩形,在维数小于20时效率高;brute使用暴力搜索,也就是线性扫描,当训练集很大时,计算非常耗时;auto会基于传入fit方法的内容,选择最合适的算法。auto
调优参数叶子数量leaf_size传入BallTree或者KDTree算法的叶子数量。此参数会影响构建、查询BallTree或者KDTree的速度,以及存储BallTree或者KDTree所需要的内存大小。此可选参数根据是否是问题所需选择性使用。30
  • 推荐参数值
  1. n_neighbors:用于指定k值即邻居数量,默认为5;
  2. weights:用于指定权重函数,默认为等权重(uniform)。可选项有:‘distance’、‘uniform’、自定义距离度量函数等;
  3. algorithm:用于指定KNN计算时所采用的算法,可以是‘auto’, ‘ball_tree’, ‘kd_tree’或‘brute’。其中‘auto’会根据数据自行选择最合适的算法。默认是‘auto’;
  4. leaf_size:用于指定KD树或Ball Tree建立过程中叶子节点中样本点的数量,默认为30。当algorithm为‘kd_tree’或‘ball_tree’时才有效;
  • 调参建议
  1. 邻居数量K, 较小的K值可以更好地拟合训练数据, 但可能过于敏感或产生过拟合, 较大的K值可以降低噪声对输出造成的影响, 通常将K设置在5-20之间会有比较理想的效果;
  2. 距离度量方法, 普遍使用的距离度量方法是欧式距离(Euclidean Distance)。不同的距离度量方法与数据集的特点密切相关,曼哈顿距离(Manhattan Distance)适用于特征数量较少的情况下,而关于其他类型的距离度量方法,请参考sklearn.neighbors文档中的“metric”指令。
  3. 输入数据缩放,由于KNN算法依赖于样本之间的距离,所以当不同的特征之间尺度大小不同时,需要对数据进行缩放。例如,将每个特征向量缩放到0-1之间。这可以很大程度上改善KNN算法的性能。
  4. 建议使用交叉验证来确定超参数,并采用准确率等指标来评估模型在测试集上的性能。同时,可以使用比较ROC曲线、AUC、精度和召回率等指标用来判断KNN算法的分类效果。