廊坊做网站价格,可信网站行业验证必须做吗,网站如何做视频教程,开发一个软件的步骤文章目录1.基本概念1.1 距离or相似度1.2 类或簇1.3 类与类之间的距离2. 层次聚类算法基本理论2.1 Python代码实现层次分析法例题3. K均值聚类方法3.1 K均值算法特性3.2 Python实现K均值聚类是针对给定的样本#xff0c;依据它们特征的相似度或距离#xff0c;将其归并到若干个…文章目录1.基本概念1.1 距离or相似度1.2 类或簇1.3 类与类之间的距离2. 层次聚类算法基本理论2.1 Python代码实现层次分析法例题3. K均值聚类方法3.1 K均值算法特性3.2 Python实现K均值聚类是针对给定的样本依据它们特征的相似度或距离将其归并到若干个“类”或“簇”的数据分析问题。属于无监督学习核心思路是让同一簇内样本相似度高、不同簇间相似度低。聚类的算法包括很多常见的可以总结为下表归其根本是聚类的核心概念是距离或相似度有多种相似度或距离的定义相似度直接影响聚类的结果所以其选择是聚类的根本问题。下面对“相似度或距离”进行介绍1.基本概念1.1 距离or相似度1.2 类或簇1.3 类与类之间的距离2. 层次聚类算法基本理论2.1 Python代码实现层次分析法例题importnumpyasnpimportmatplotlib.pyplotaspltfromscipy.cluster.hierarchyimportlinkage,dendrogram,fcluster# 1. 定义距离矩阵# 输入的5×5距离矩阵样本0-4distance_matrixnp.array([[0,7,2,9,3],[7,0,5,4,6],[2,5,0,8,1],[9,4,8,0,5],[3,6,1,5,0]])# 2. 生成层次聚类的链接矩阵凝聚式基于距离矩阵fromscipy.spatial.distanceimportsquareform condensed_distsquareform(distance_matrix)# 执行凝聚式层次聚类方法平均链接也可选single/complete等linkage_matrixlinkage(condensed_dist,methodaverage)# method可选single/complete/averageplt.figure(figsize(8,5))dendrogram(linkage_matrix,labels[f样本{i}foriinrange(5)],# 样本标签leaf_rotation0,# 标签旋转角度leaf_font_size12,color_threshold3,# 聚类颜色阈值可调整above_threshold_colorgray)plt.title(层次聚类树状图平均链接)plt.xlabel(样本)plt.ylabel(距离)plt.tight_layout()plt.show()# 4. 从层次聚类中提取指定簇数的聚类结果n_clusters2# 目标簇数clustersfcluster(linkage_matrix,tn_clusters,criterionmaxclust)print(f各样本的聚类结果簇数{n_clusters})foriinrange(5):print(f样本{i}→ 簇{clusters[i]})3. K均值聚类方法3.1 K均值算法特性总的来说K均值的和核心优点简单高效算法逻辑直观迭代分配样本 更新中心时间复杂度低通常为(O(nkt))n是样本数、k是簇数、t是迭代次数适合大规模数据。易实现与调参仅需指定簇数k和距离度量常用欧氏距离参数少、工程落地成本低结果易解释:簇中心均值可直接作为簇的“代表”便于理解每个簇的特征如用户分群中簇中心对应典型用户的行为特征。缺点有对初始中心敏感随机选择的初始簇中心可能导致不同的聚类结果易陷入局部最优需通过 “K-Means”优化初始中心选择缓解。需预先指定簇数kk的选择依赖经验可通过肘部法则、轮廓系数辅助但无绝对标准选不好会直接影响聚类效果。对数据分布有局限仅适用于球形、密度均匀的簇对非球形如环形、密度差异大的簇效果差。抗噪声异常值能力弱簇中心是均值异常值会显著 “拉偏” 中心导致聚类结果失真。3.2 Python实现K均值importnumpyasnpfromsklearn.clusterimportKMeansimportmatplotlib.pyplotasplt Xnp.array([[0,2],# 样本0作为第一个初始簇中心[0,0],# 样本1作为第二个初始簇中心[1,0],# 样本2[5,0],# 样本3[5,2]# 样本4])sample_labels[f样本{i}foriinrange(5)]# 样本标签# 2. 手动指定初始簇中心前两个样本样本0和样本1init_centersX[:2]# 取前两个样本作为初始中心print( 手动指定的初始簇中心 )print(f初始中心1样本1{init_centers[0]})print(f初始中心2样本2{init_centers[1]})# 3. 初始化并训练K-Means模型指定初始中心kmeansKMeans(n_clusters2,# 簇数固定为2匹配初始中心数量initinit_centers,# 手动指定初始簇中心核心修改点n_init1,# 仅运行1次因为手动指定了初始中心无需多次初始化random_state42# 固定随机种子结果可复现)y_predkmeans.fit_predict(X)# 拟合数据并预测簇标签# 4. 输出核心结果print(\n K均值聚类最终结果 )print(f最终簇中心\n{kmeans.cluster_centers_})print(f簇内平方和SSE{kmeans.inertia_:.2f})# 评估簇内紧凑度print(\n各样本的簇分配)forsample,labelinzip(sample_labels,y_pred):print(f{sample}→ 簇{label})# 5. 可视化聚类过程与结果含初始中心最终中心plt.figure(figsize(10,7))# 绘制所有样本点scatterplt.scatter(X[:,0],X[:,1],cy_pred,s120,cmapviridis,alpha0.8,edgecolorsblack)# 绘制初始簇中心蓝色三角形区分最终中心plt.scatter(init_centers[:,0],init_centers[:,1],cblue,s300,marker^,label初始中心样本0/1,edgecolorsblack)# 绘制最终簇中心红色星号plt.scatter(kmeans.cluster_centers_[:,0],kmeans.cluster_centers_[:,1],cred,s300,marker*,label最终簇中心,edgecolorsblack)# 标注每个样本的编号fori,sampleinenumerate(sample_labels):plt.text(X[i,0]0.1,X[i,1]0.1,sample,fontsize12,fontweightbold)# 图表美化plt.xlabel(特征1,fontsize12)plt.ylabel(特征2,fontsize12)plt.title(K均值聚类结果初始中心为前两个样本,fontsize14)plt.grid(alpha0.3)# 网格线增强可读性plt.legend(locupper right)plt.axis(equal)# 等比例坐标轴避免视觉变形plt.tight_layout()plt.show()在这里插入代码片这里的样本0和样本4对应书中的样本1和样本5