【说在前面】本人博客新手一枚,象牙塔的老白,职业场的小白。如下内容仅为我的看法,欢迎批评指正,不喜勿喷![认真看图][认真看图]html
【补充说明】聚类算法能够做为独立方法将数据聚成不一样簇,也能够做为数据挖掘任务(例如分类、关联规则等)的预处理!python
【补充说明】聚类算法与分类算法的主要区别在于训练时的样本有无标签,聚类算法无监督学习,分类算法有监督学习!面试
【再说一句】本文主要介绍机器学习中聚类算法的演变路径,和往常同样,不会详细介绍各算法的具体实现,望理解!算法
例如余弦类似度等,主要优点在于不受原线性变换的影响,能够轻松地转换为距离,但其运算速度相对较慢。数据库
主要步骤以下:网络
(1)肯定要聚类的数量K,并随机初始化K个簇的中心点。框架
(2)将每一个样本分配到与其距离最近的中心点所在的簇(这里采用欧氏距离)。机器学习
(3)计算每个簇内全部样本点的平均值,做为该簇的新中心点。函数
迭代重复以上这些步骤,直到各簇中心点在迭代过程当中变化不大(即小于设定的阈值)。post
K-Means聚类的优势:
K-Means聚类的缺点:
例如k-means++、intelligent k-means、genetic k-means、CLARANS等。这里以常见的k-means++为例,进行介绍。
k-means++按照以下的思想选取K个聚类中心:
例如k-medoids、k-medians等。这里以常见的k-medians为例,进行介绍。
k-medians对于中心点的选取方式是中位值。缘由在于,噪声和离群点对中位值的变化影响不大。可是须要排序,速度较慢。
例如k-modes等。这里以常见的k-modes为例,进行介绍。
k-modes算法采用差别度来代替k-means算法中的距离。k-modes算法中差别度越小,则表示距离越小。
例如kernel k-means、谱聚类等。这里以常见的kernel k-means为例,进行介绍。
kernel k-means经过一个非线性映射,将输入空间中的数据点映射到一个高维特征空间中,使得样本在核空间线性可分,在特征空间聚类。
值得一提的是,谱聚类算法是创建在图论中的谱图理论基础上,其本质是将聚类问题转化为图的最优划分问题,是一种点对聚类算法。
均值漂移聚类是基于滑动窗口的算法,寻找数据点的密集区域。相似登山,每一次迭代都向密度更高的区域移动,直到收敛。
主要步骤以下:
(1)肯定滑动窗口半径r,以随机选取的中心点C、半径为r的圆形滑动窗口开始滑动。
(2)每一次滑动到新区域,计算窗口内的均值做为中心点,窗口内的点数量做为密度。在每一次移动中,窗口会想密度更高的区域移动。
(3)移动窗口,直到窗口内的密度再也不增长为止。
其中,步骤1到3会产生不少个滑动窗口,当多个滑动窗口重叠时,保留包含最多点的窗口,而后根据数据点所在的滑动窗口进行聚类。
Mean-Shift聚类的优势:
Mean-Shift聚类的缺点:
DBSCAN的聚类定义很简单,由密度可达关系导出的最大密度相连的样本集合,即为最终聚类的一个簇。
主要步骤以下:
(1)首先任意选择一个没有类别的核心对象做为种子,而后找到全部这个核心对象可以密度可达的样本集合,即为一个聚类簇。
(2)接着继续选择另外一个没有类别的核心对象去寻找密度可达的样本集合,这样就获得另外一个聚类簇。
一直运行到全部核心对象都有类别为止。
DBSCAN聚类的缺点:
OPTICS聚类经过优先对高密度进行搜索,而后根据高密度的特色设置参数,改善了DBSCAN的不足。
固然还有其余算法,例如DENCLUE聚类等。
GMM聚类采用几率模型来表达原型,即经过统计获得每一个样本点属于各个类的几率,而不是断定它彻底属于一个类,也会被称为软聚类。
主要步骤以下:
(1)选择簇的数量,并随机初始化每一个簇的高斯分布参数(即均值和方差)。
(2)给定每一个簇的高斯分布,计算每一个数据点属于每一个簇的几率。一个点越靠近高斯分布的中心就越可能属于该簇。
(3)计算高斯分布参数,使几率最大化(EM最大指望),可用数据点几率的加权计算这些新的参数,权重就是数据点属于该簇的几率。
重复迭代步骤2和3,直到迭代中的变化不大。
GMM聚类的优势:
GMM聚类的缺点:
例如基于神经网络模型的聚类SOM、基于统计学的聚类COBWeb等。
对给定的数据集进行层次似的分解,直到某种条件知足为止。具体又可分为“自底向上”和“自顶向下”两种方案。
是一种自底向上聚合策略的层次聚类算法。
主要步骤以下:
(1)先将数据集中的每一个样本看作是一个初始聚类簇。
(2)而后在算法运行的每一步中,找出距离最近的两个聚类簇进行合并。该过程不断重复,直至达到预设的聚类簇个数。
其中,如何计算簇之间的距离,并进行合并:
AGNES聚类的优势:
AGNES聚类的缺点:
BIRCH算法是个树形结构,树的每个节点是由若干个聚类特征CF组成。BIRCH算法比较适合于数据量大,类别数K也比较多的状况。
对于CF Tree,通常有几个重要参数:
BIRCH聚类的优势:
BIRCH聚类的缺点:
例如Diana、ROCK、CURE、CAMELEON等。
核心原理就是:
(1)将数据空间划分为网格单元,将数据对象集映射到网格单元中,并计算每一个单元的密度。
(2)根据预设的阈值判断每一个网格单元是否为高密度单元,由邻近的稠密单元组造成”类“。
网格聚类的优势:
网格聚类的缺点:
STING、CLIQUE、WaveCluster等是该类方法中的表明性算法。如下是CLIQUE的例子:
例如基于约束的聚类(COD)、基于图网络的聚类(图团体检测)等。
大佬对经常使用的聚类算法从可伸缩性、适合的数据类型、高维性、异常数据的抗干扰度、聚类形状和算法效率6个方面进行了综合性能评价。
还有一些对聚类的评测指标,这里不打算展开介绍了。我的感受经过聚类来辅助具体业务场景的分析会比较重要,就像开头说的那样,聚类算法能够做为独立方法将数据聚成不一样簇,也能够做为数据挖掘任务(例如分类、关联规则等)的预处理。这里要提一嘴的是,不少聚类算法都已经被封装在sklearn中,方便调用。
固然,聚类算法有不少的应用场景,例如目标用户群体分类、异常值检测等。说到这里,我接着想写一个“异常检测”专题了。
若是您对数据挖掘感兴趣,欢迎浏览个人另几篇博客:数据挖掘比赛/项目全流程介绍
若是你对智能推荐感兴趣,欢迎先浏览个人另几篇随笔:智能推荐算法演变及学习笔记
若是您对人工智能算法感兴趣,欢迎浏览个人另外一篇博客:人工智能新手入门学习路线和学习资源合集(含AI综述/python/机器学习/深度学习/tensorflow)、人工智能领域经常使用的开源框架和库(含机器学习/深度学习/强化学习/知识图谱/图神经网络)
若是你是计算机专业的应届毕业生,欢迎浏览个人另一篇博客:若是你是一个计算机领域的应届生,你如何准备求职面试?
若是你是计算机专业的本科生,欢迎浏览个人另一篇博客:若是你是一个计算机领域的本科生,你能够选择学习什么?
若是你是计算机专业的研究生,欢迎浏览个人另一篇博客:若是你是一个计算机领域的研究生,你能够选择学习什么?
若是你对金融科技感兴趣,欢迎浏览个人另外一篇博客:若是你想了解金融科技,不妨先了解金融科技有哪些可能?
以后博主将持续分享各大算法的学习思路和学习笔记:hello world: 个人博客写做思路