大家好,我是一名Python数据分析师,希望通过这篇文章分享我在机器学习领域的学习经历。为此,我编写了“人工智能四部曲”系列:《15天学会Python编程》、《每天10分钟,用Python学数据分析》、《Python数据可视化实战》以及《33天搞定机器学习》。
聚类算法在用户画像、广告推荐、新闻推送和图像分割等方面有着广泛应用,其中层次聚类是一种常见且重要的算法。在上一篇文章中,我们已经探讨了K-means算法,有兴趣的朋友可以回顾一下。本文是《33天搞定机器学习》系列的第21篇,我们将介绍另一种常用的聚类算法——层次聚类。
层次聚类假设类别之间存在层级结构,逐步将样本聚集成多层次的类别。这种方法可以通过自顶向下的分裂策略或自底向上的聚合策略来实现。
聚合聚类的基本思路是,最初将每个样本视为一个独立的类别,随后不断合并距离相近的两类,直至满足特定条件,形成层次化的分类结构。
分裂聚类则相反,初始时所有样本属于同一类别,之后逐步将距离较远的样本分为新的类别,直至满足特定条件,同样形成层次化的分类结构。
本文重点讨论聚合聚类。
层次聚类算法的合并或拆分都是基于簇间相似度来进行的,通常用距离来衡量簇间或样本间的相似度。距离越小,相似度越高;反之亦然。以下是几种常见的簇间距离度量方法:
最小距离法:以簇间样本点距离的最小值作为度量标准。但该方法容易受到极端值的影响。
最大距离法:以簇间样本点距离的最大值作为度量标准。同样,该方法也容易受到极端值的影响。
平均距离法:为了平衡上述两种方法的缺点,可以采用平均距离法,即以簇间样本点距离的平均值作为度量标准。
样本间的距离计算方法与K-means算法类似,这里不再赘述。
了解了点与点、点与簇、簇与簇之间的距离度量标准后,接下来需要掌握层次聚类的具体步骤:
以上步骤可能比较抽象,下面是一个形象的GIF展示:
在Scikit-Learn库中,sklearn.cluster.AgglomerativeClustering
类提供了层次聚类功能,其主要参数包括:
层次聚类算法相对简单易用。这里以经典的鸢尾花数据集为例。每朵鸢尾花有四个特征:萼片长、萼片宽、花瓣长和花瓣宽。我们的目标是根据这四个特征的不同将鸢尾花分成不同的类别,以便更好地帮助植物学家进行研究。
以下是可视化结果:
希望这些内容对大家有所帮助,欢迎大家订阅以获取更多相关代码和数据集。