K近邻与K-means与DBSCAN算法
K-近邻算法(KNN)
KNN概述 (有监督算法,分类算法)
KNN是通过测量不同特征值之间的距离进行分类,它的思想是:如果一个样本在特征空间中的k个最相似(即:特征空间中最邻近)的样本中大多数属于某个类别,则该样本也属于这个类别。其算法描述为:
- 计算测试数据与各个训练数据之间的距离 ;
- 按照距离的递增关系进行排序;
- 选择距离最小的k个点;
- 确定前k个点所在类别的出现频率;
- 返回前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.调参更复杂,不同的参数组合对最后的聚类效果有较大影响。