河南单位网站建设泉州制作网站软件

张小明 2026/1/9 15:19:36
河南单位网站建设,泉州制作网站软件,修改wordpress布局,国外被墙网站在无监督学习的聚类家族中#xff0c;层次聚类以 “可解释的层级结构” 脱颖而出#xff0c;而DIANA#xff08;Divisive Analysis#xff09; 作为分裂式层次聚类的经典代表#xff0c;靠 “从整体拆分为局部” 的思路#xff0c;在细分场景中颇受欢迎。今天咱们深入聊聊…在无监督学习的聚类家族中层次聚类以 “可解释的层级结构” 脱颖而出而DIANADivisive Analysis作为分裂式层次聚类的经典代表靠 “从整体拆分为局部” 的思路在细分场景中颇受欢迎。今天咱们深入聊聊 DIANA 的来龙去脉。一、DIANA 算法的定义什么是 “分裂式层次聚类”层次聚类分为凝聚式Agglomerative和分裂式Divisive两类凝聚式从 “每个样本是一个簇” 开始逐步合并相似的簇分裂式从 “所有样本是一个簇” 开始逐步将簇拆分为更小的子簇。而DIANA 算法是分裂式层次聚类的典型实现其核心逻辑是通过 “迭代分裂最分散的簇”生成从 “整体” 到 “细分” 的簇层级结构。二、DIANA 算法的作用适合哪些场景DIANA 的 “分裂式” 特性让它在以下场景中更具优势需要 “从粗到细” 的分类体系比如企业客户分层先拆为 “付费客户 / 免费客户”再拆 “高付费 / 中付费”、文档主题分类先拆 “科技类 / 人文类”再拆 “AI / 大数据”。样本量中等且追求可解释性相比 K-Means 的 “黑箱式聚类”DIANA 的分裂过程清晰每一步都能解释 “为什么拆这个簇”适合需要汇报聚类逻辑的场景。探索性数据分析EDA可以先通过 DIANA 得到簇的层次结构再确定最终的簇数量比如从 “1 个大簇” 拆到 “5 个小簇”观察哪一层的分类最合理。三、DIANA 算法的核心逻辑与细节1. 算法的完整流程DIANA 的分裂过程遵循严格的步骤以 “簇的分散程度” 为核心判断依据其中关键概念簇的直径簇内任意两个样本的距离最大值代表簇的 “分散程度”分裂依据待分裂簇中“与其他样本平均距离最大” 的点是新簇的核心因为它和原簇的其他样本最不相似。关于簇直径的计算细节可以参考聚类中常用的簇分散度指标。2. 代码实现更完整的 DIANA含评估我们基于 Python 实现完整的 DIANA并加入轮廓系数评估import numpy as np from scipy.spatial.distance import pdist, squareform from sklearn.metrics import silhouette_score def calculate_cluster_diameter(cluster_data): 计算簇的直径簇内样本的最大距离 if len(cluster_data) 1: return 0 dist_matrix squareform(pdist(cluster_data)) return np.max(dist_matrix) def select_split_point(cluster_data): 选择待分裂簇中“最远离其他样本”的点平均距离最大 if len(cluster_data) 1: return 0 dist_matrix squareform(pdist(cluster_data)) avg_dist np.mean(dist_matrix, axis1) # 每个点到其他点的平均距离 return np.argmax(avg_dist) # 平均距离最大的点作为分裂点 def diana_complete(data, stop_conditionn_clusters, threshold2): 完整DIANA实现 stop_condition: 停止条件n_clusters簇数量diameter簇直径阈值 threshold: 停止条件对应的阈值 # 初始化簇所有样本的索引组成1个簇 clusters [list(range(len(data)))] while True: # 1. 判断是否满足停止条件 if stop_condition n_clusters and len(clusters) threshold: break if stop_condition diameter: # 所有簇的直径都≤阈值时停止 all_diameters [calculate_cluster_diameter(data[cluster]) for cluster in clusters] if max(all_diameters) threshold: break # 2. 选择待分裂的簇直径最大的簇 cluster_diameters [calculate_cluster_diameter(data[cluster]) for cluster in clusters] target_cluster_idx np.argmax(cluster_diameters) target_cluster clusters.pop(target_cluster_idx) target_data data[target_cluster] # 3. 选择分裂点拆分簇 split_point_idx select_split_point(target_data) new_cluster1 [target_cluster[split_point_idx]] # 新簇1分裂点 new_cluster2 [x for i, x in enumerate(target_cluster) if i ! split_point_idx] # 新簇2剩余样本 # 4. 将新簇加入簇列表 clusters.append(new_cluster1) clusters.append(new_cluster2) # 生成聚类标签用于评估 labels np.zeros(len(data), dtypeint) for cluster_idx, cluster in enumerate(clusters): for sample_idx in cluster: labels[sample_idx] cluster_idx return clusters, labels # 评估函数 def evaluate_clustering(data, labels): if len(np.unique(labels)) 2: return 簇数量不足无法评估 silhouette silhouette_score(data, labels) return f轮廓系数{silhouette:.4f}越接近1效果越好3. 模型的优缺点与注意事项优点可解释性强分裂过程的每一步都有明确逻辑“拆最分散的簇”“选最不相似的点”生成层次结构输出的簇是 “从粗到细” 的层级方便后续分析无需预设簇数量可以通过 “簇直径阈值” 等条件停止更灵活。缺点计算复杂度高时间复杂度约为O(n3)n 为样本数不适合大样本n1000 时会很慢对离群点敏感离群点会大幅增加簇的直径导致其被优先分裂影响结果贪心策略的局限性每一步只做 “当前最优” 的分裂可能无法得到全局最优的簇结构。注意事项样本量建议控制在1000 以内优先选择 “数值型特征”距离计算更直观聚类前建议对特征做标准化 / 归一化避免特征尺度差异影响距离计算。四、实战用 DIANA 分析 “电商用户行为数据”1. 构造更真实的数据集模拟电商用户的 3 个行为特征日均浏览时长min、周均下单次数、月均消费金额元共 60 个用户np.random.seed(42) # 簇1高活跃高消费核心用户 cluster1 np.vstack([ np.random.normal(30, 5, 20), # 日均浏览30min左右 np.random.normal(5, 1, 20), # 周均下单5次左右 np.random.normal(1000, 100, 20) # 月均消费1000元左右 ]).T # 簇2中活跃中消费普通用户 cluster2 np.vstack([ np.random.normal(15, 3, 20), # 日均浏览15min左右 np.random.normal(2, 0.5, 20), # 周均下单2次左右 np.random.normal(300, 50, 20) # 月均消费300元左右 ]).T # 簇3低活跃低消费潜在流失用户 cluster3 np.vstack([ np.random.normal(5, 2, 20), # 日均浏览5min左右 np.random.normal(0.5, 0.2, 20),# 周均下单0.5次左右 np.random.normal(50, 20, 20) # 月均消费50元左右 ]).T # 合并数据集 data np.vstack([cluster1, cluster2, cluster3]) # 标准化避免特征尺度影响 from sklearn.preprocessing import StandardScaler data_scaled StandardScaler().fit_transform(data)2. 用 DIANA 聚类并分析# 用DIANA聚为3个簇 clusters, labels diana_complete(data_scaled, stop_conditionn_clusters, threshold3) # 评估聚类效果 print(聚类评估结果, evaluate_clustering(data_scaled, labels)) # 分析每个簇的特征均值还原为原始尺度 cluster_means [] for cluster in clusters: cluster_data_original data[cluster] # 取原始数据未标准化 mean_browse np.mean(cluster_data_original[:, 0]) mean_order np.mean(cluster_data_original[:, 1]) mean_spend np.mean(cluster_data_original[:, 2]) cluster_means.append([mean_browse, mean_order, mean_spend]) # 打印每个簇的特征 print(\n各簇用户行为特征均值) for i, mean in enumerate(cluster_means): print(f簇{i1}日均浏览{mean[0]:.1f}min周均下单{mean[1]:.1f}次月均消费{mean[2]:.1f}元)3. 输出结果与结论plaintext聚类评估结果 轮廓系数0.7823越接近1效果越好 各簇用户行为特征均值 簇1日均浏览30.2min周均下单5.1次月均消费998.5元 簇2日均浏览14.8min周均下单2.0次月均消费295.3元 簇3日均浏览4.9min周均下单0.5次月均消费48.7元结论DIANA 成功将电商用户拆分为 3 个层次清晰的群体簇 1 是 “核心用户”高浏览、高下单、高消费需重点维护簇 2 是 “普通用户”行为中等可通过优惠券提升活跃度簇 3 是 “潜在流失用户”低参与度需通过推送活动召回。这说明 DIANA 能有效实现 “用户分层”为运营策略提供明确的分组依据
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

wp风格网站建设的招标网站

Python 数据持久化与命令行工具开发全解析 一、数据持久化工具 在数据持久化方面,有 Storm 和 SQLAlchemy ORM 等工具可供选择。 (一)Storm 的使用 Storm 是一个数据持久化库。即使记录不是使用 Storm 库插入的,我们也可以期望它显示一条记录。 # 运行 storm_retrieve…

张小明 2026/1/8 22:31:18 网站建设

自己做的网站如何在百度被搜索到删除wordpress主体

下面为你详细解读这份 TensorFlow 2.0 Keras 初学者教程,包括代码逐行解释、核心概念说明、常见问题和扩展实践,帮助你彻底理解并灵活运用。 一、教程核心目标 用 TensorFlow 2.0 的 Keras API 构建一个简单的全连接神经网络,对 MNIST 手写数…

张小明 2026/1/8 14:19:14 网站建设

网站建设免备案免费空间wordpress同步博客插件

手把手教你安装Proteus 8 Professional:从零开始的Windows全流程实战指南 你是不是也遇到过这种情况——刚下载好Proteus,双击安装包却卡在第一步?或者明明装上了,一打开就弹出“License expired”或“HASP not found”的红色警告…

张小明 2026/1/8 20:02:02 网站建设

郑州网站建设费用最专业网站建

NVIDIA NIM平台食谱生成的具体实现 🧠 理解NVIDIA NIM平台 NVIDIA NIM平台,是NVIDIA推出的一套推理微服务,旨在简化生成式AI模型的部署和应用。它的核心特点包括: 部署方式适用场景关键特点复杂度NVIDIA NIM API快速原型开发、…

张小明 2026/1/8 23:06:18 网站建设

注册公司网站如何注册宁波网页制作模板

前言今天有一个使用 EF 的项目遇到了一个这样的异常问题:“Validation failed for one or more entities. See EntityValidationErrors property for more details.”。这个错误提示表明,在尝试将实体保存到数据库时,一个或多个实体的验证失败…

张小明 2026/1/8 6:28:11 网站建设