面试题_K近邻(KNN)与K-means与DBSCAN算法

K-近邻算法(KNN)

KNN概述 (有监督算法,分类算法)

  KNN是通过测量不同特征值之间的距离进行分类,它的思想是:如果一个样本在特征空间中的k个最相似(即:特征空间中最邻近)的样本中大多数属于某个类别,则该样本也属于这个类别。其算法描述为:

  1. 计算测试数据与各个训练数据之间的距离 ;
  2. 按照距离的递增关系进行排序;
  3. 选择距离最小的k个点;
  4. 确定前k个点所在类别的出现频率;
  5. 返回前k个点出现频率最高的类别作为测试数据的预测分类。

KNN优点

 1.理论成熟,思想简单,既可以用来做分类也可以用来做回归。
 2.可用于非线性分类 。
 3.适用于样本容量比较大的类域的自动分类。

KNN缺点

 1.计算量大,分类速度慢
 2.KNN在对属性较多的训练样本进行分类时,由于计算量大而使其效率大大降低效果。
 3.K值难以确定 :目前没有很好的方法,一般采用先定一个初始值,然后根据实验测试的结果调整K值。 
 4.对不平衡样本集比较敏感:当样本不平衡时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数。

K-Means算法

K-Means概述 (无监督算法,聚类算法,随机算法)

  在K-Means算法中,用质心表示cluster;且容易证明k-means算法收敛等同于所有质心不再发生变化。基本的k-means流程如下 :
 1. 选取k个初始质心(作为初始cluster);
 2. repeat : 对于每个样本点,计算得到距离最近的质心,将其类别标为该质心对应的cluster;重新计算K个cluster对应的质心。
 3. untill:质心不再发生变化。

K-Means缺点

 1. k-means是局部最优的,容易受到初始质量的影响;
 2. K值的选取也会直接影响聚类的结果。

K怎么确定?

  可以通过枚举方法确定,令K从2到一个固定值(如10),在每个K值上重复运行数次K-Means,并计算当前K的平均轮廓系数,最后选择轮廓系数最大的值对应的K作为最终的集群数目。

DBSCAN

DBSCAN概述

   DBSCAN是一种基于密度的聚类算法,这类密度聚类算法一般假定类别可以通过样本分布的紧密程度决定。同一类别的样本,他们之间是紧密相连的,在该类别任意样本周围不远处一定有同类别的样本存在。通过将紧密相连的样本划为一类,这样就得到了一个聚类类别。通过将所有各组紧密相连的样本划为各个不同的类别,则我们就得到了最终的所有聚类类别结果。DBSCAN算法的流程:
 1.根据邻域条件遍历所有点,将所有点分别标记为核心点、边界点或噪声点;
 2.删除噪声点;
 3.为距离在Eps之内的所有核心点之间赋予一条边;
 4.每组连通的核心点形成一个簇;
 5.将每个边界点指派到一个与之关联的核心点的簇中(哪一个核心点的半径范围之内)。

DBSCAN优点

 1.可以对任意形状的稠密数据集进行聚类,相对于K-Means之类的聚类算法一般只适用于凸数据集;
 2.可以在聚类的同时发现异常点,对数据集中的异常点不敏感;
 3.聚类结果没有偏移,相对的K-Means之类的聚类算法初始值对聚类结果有很大影响。

DBSCAN缺点

 1.如果样本集的密度不均匀,聚类间隔相差很大时,聚类质量较差,不适合用DBSCAN聚类;
 2.如果样本集较大时,聚类收敛时间较长,此时可以对搜索最近邻时建立的KD树进行规模限制来改进;
 3.调参更复杂,不同的参数组合对最后的聚类效果有较大影响。

参与评论 您还未登录,请先 登录 后发表或查看评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:深蓝海洋 设计师:CSDN官方博客 返回首页

打赏作者

zhangkkit

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值