还剩17页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
层次聚类分析法目录123层次聚类简介算法原理与类型距离度量与联结方法概念定义与基本策略凝聚法与分裂法的工作原理不同距离计算方法及其影响45实践应用案例分析与总结Stata与Python中的实现方法第一章层次聚类简介什么是层次聚类?自动发现数据结构层次聚类是一种无监督学习方法,旨在发现数据中潜在的层次结构,无需预先指定类别数量无需预先假设数据分布形式,能够自然呈现数据的层次关系其核心思想是通过逐步合并或拆分样本,形成一个完整的嵌套聚类树(也称为树状图或系统发生树)可视化层次关系这种方法特别适合于探索性数据分析,帮助研究者理解数据的内在分组关系和结构特征通过树状图直观展示样本间的相似性和聚类过程灵活的聚类粒度层次聚类的两种基本策略凝聚法()分裂法()Agglomerative Divisive自底向上策略自顶向下策略
1.初始时将每个样本视为独立的类
1.初始时将所有样本视为一个类
2.计算类间距离,合并最相似的两类
2.寻找最佳分裂点,将类分为两个子类
3.不断迭代合并直到所有样本归为一类
3.递归分裂直到每个样本成为独立的类最常用的层次聚类方法计算复杂度高,应用较少两种方法理论上可以生成完全相同的层次结构,但实际应用中由于算法实现和计算复杂度的差异,凝聚法更为常用层次聚类流程示意凝聚法•从单个样本出发,逐步合并最相似的类•合并过程形成一个树状的层次结构•可以通过水平切割树状图获得不同数量的聚类分裂法•从整体样本出发,递归地分裂为子类•寻找最优分裂点,使子类内部相似度最高•计算复杂度为O2^n,实际应用受限第二章算法原理与距离度量深入理解层次聚类的核心机制凝聚法算法步骤初始化将每个样本视为单独的簇,N个样本形成N个簇计算所有样本对之间的距离矩阵D找出最近簇对在距离矩阵D中找出距离最小的两个簇i和j将i和j记录为合并对象合并簇将簇i和簇j合并成新的簇k更新簇的数量N=N-1更新距离矩阵计算新簇k与所有其他簇的距离更新距离矩阵D,删除i和j的行列,添加k的行列迭代直到完成重复步骤2-4,直到所有样本归为一类或达到预设的簇数量阈值整个过程可以用树状图(Dendrogram)直观地表示,展示样本间的层次合并关系分裂法算法步骤初始化寻找分裂点将所有N个样本视为一个大簇找出簇内距离最远的两个样本,作为两个新簇的初始中心计算簇内所有样本对之间的距离矩阵这一步通常采用某种聚类算法(如K-means)来实现最优分裂分配样本递归分裂将其余样本分配到距离最近的中心,形成两个子簇对每个子簇重复步骤2-3进行递归分裂更新簇的数量N=N+1直到满足停止条件(如达到预设的簇数量或每个簇只包含一个样本)分裂法的计算复杂度随样本数量呈指数增长,因此在大规模数据集上应用受限,但它在某些特定问题上可能提供更好的结果常用距离度量方法最小距离法在层次聚类中,如何计算两个簇之间的距离是算法的核心问题不同的距离度量方法会产生不同的聚类结果,适用于不同的数据特性Single Linkage选择合适的距离度量方法对聚类结果有决定性影响,应根据数据特性和分析目标来选择两个簇中最近的两个点之间的距离倾向于形成链状或细长的簇最大距离法Complete Linkage两个簇中最远的两个点之间的距离倾向于形成紧凑的球状簇平均距离法Average Linkage两个簇所有点对之间距离的平均值介于最小和最大距离法之间的折中方案法WardWards Method最小化合并后类内方差增量倾向于形成大小相近的簇不同联结方法的聚类效果比较单联结(最小距离)优点能够识别非球形簇缺点对噪声和离群点敏感,容易形成链状效应适用不规则形状的数据簇全联结(最大距离)优点对噪声和离群点不敏感缺点偏向于形成大小相等的簇,可能拆分大簇适用紧凑型数据簇均值联结(平均距离)优点折中的方案,适应性较强缺点计算复杂度较高适用一般数据集的首选方法联结法Ward优点倾向于形成紧凑且大小相等的簇缺点偏向于球形簇,不适合非欧氏距离适用希望得到大小相近的簇第三章中的层次聚类操作Stata实用工具与操作流程层次聚类基本命令Stata12聚类命令结构距离矩阵聚类cluster linkage[变量列表],linkage方法clustermat linkage矩阵名,linkage方法直接对变量进行聚类分析,支持多种联结方法对预先计算好的距离矩阵进行聚类•single-最小距离法适用于自定义距离度量或非数值变量的情况•complete-最大距离法•average-平均距离法•ward-Ward最小方差法34树状图生成生成聚类变量cluster dendrogramcluster generate新变量=groupk可选参数根据聚类结果生成分类变量,k为指定的类别数•labels变量-指定样本标签可用于后续分析和验证•cutnumbern-指定切割数量•horizontal-水平显示•showcount-显示簇的样本数量操作流程示例Stata生成并查看树状图执行聚类分析数据准备*基础树状图cluster dendrogram**使用单联结法cluster带样本标签的树状图cluster*导入数据import excelsinglelinkage zv3zv6zv7zv8*dendrogram,labelsV1*指定切sample.xlsx,firstrow*标准化或使用Ward法cluster wardslinkage割为4类的树状图cluster dendrogram,变量(推荐)egen zv3=stdV3egen zv3zv6zv7zv8*查看聚类变量labelsV1cutnumber4zv6=stdV6egen zv7=stdV7egen editclus1zv8=stdV8标准化变量(normalization)是层次聚类的重要预处理步骤,可以消除不同量纲带来的影响,使各变量在聚类中的权重相当树状图解读Stata•垂直轴表示聚类的距离或相异度•水平轴表示各个样本或簇•分支点表示两个簇的合并•分支高度表示合并时的距离要确定最佳聚类数,可以
1.观察树状图的自然断点
2.寻找距离跳跃较大的合并点
3.在相对高的层次切割树状图切割线的位置决定了最终的聚类数量,这是层次聚类的一个重要优势可以在分析后灵活决定聚类数生成聚类变量示例聚类结果解读示例*生成4类分类变量cluster generatetype1=group4*生成2类分类变量cluster generatetype2=group2*查看结果tabulatetype1tabulate type2*交叉表分析tabulate type1type2聚类编号样本数主要特征115高收入、高学历群体223中等收入、中等学历群体38低收入、高学历群体412低收入、低学历群体生成聚类变量后,可以进行进一步的统计分析注意聚类结果的解读应结合原始变量的均值、方差等统计特征,以确定每•描述性统计各类的特征比较个类的典型特点•方差分析验证类间差异显著性•可视化分析散点图、箱线图等第四章中的层次聚类实现Python利用scikit-learn库进行高效聚类分析中的scikit-learn AgglomerativeClusteringPython的scikit-learn库提供了强大的AgglomerativeClustering类,实现了凝聚型层次from sklearn.cluster importAgglomerativeClusteringimport numpy聚类算法as npimportmatplotlib.pyplot aspltfrom scipy.cluster.hierarchy主要参数import dendrogram#创建聚类模型model=AgglomerativeClustering n_clusters=4,affinity=euclidean,n_clusterslinkage=ward#拟合模型并获取聚类标签labels=聚类数量affinity model.fit_predictX#可视化聚类结果plt.scatterX[:,0],X[:,1],距离度量方式c=labels,cmap=rainbowplt.title层次聚类结果plt.show•euclidean(欧氏距离)•manhattan(曼哈顿距离)•cosine(余弦相似度)linkage联结策略•ward•complete•average•singlecompute_full_tree是否计算完整树代码示例Pythonimport numpyas npimportpandas aspdimport matplotlib.pyplot aspltfrom scipy.cluster.hierarchy importdendrogram,linkagefrom sklearn.preprocessing importStandardScaler#
1.数据准备df=pd.read_excelsample.xlsxX=df[[变量1,变量2,变量3,变量4]].values#
2.数据标准化scaler=StandardScalerX_scaled=scaler.fit_transformX#
3.计算层次聚类Z=linkageX_scaled,method=ward#
4.绘制树状图plt.figurefigsize=12,8dendrogram Z,labels=df[ID].values,leaf_rotation=
90.,leaf_font_size=
10.,plt.title层次聚类树状图plt.xlabel样本plt.ylabel距离plt.axhliney=6,color=r,linestyle=--#切割线plt.tight_layoutplt.savefigdendrogram.png,dpi=300plt.show#
5.从树状图确定聚类数后,应用聚类from sklearn.cluster importAgglomerativeClusteringmodel=AgglomerativeClusteringn_clusters=4,affinity=euclidean,linkage=warddf[cluster]=model.fit_predictX_scaled#
6.分析每个簇的特征cluster_summary=df.groupbycluster.meanprintcluster_summary这个完整示例展示了从数据导入到聚类结果分析的全流程,包括数据标准化、构建层次树、可视化树状图和聚类结果解读。
个人认证
优秀文档
获得点赞 0