python - 不同数量的集群,无需每次都重新计算树
问题描述
我们在 python 中使用 sklearn 并尝试使用 full_tree 在一系列集群编号(即 N = 2-9)上运行凝聚聚类(Wards),而无需通过使用缓存为 N 的每个单独值重新计算树. 这在 2016 年的一篇旧帖子中得到了回答,但该答案似乎不再有效。请参阅(sklearn 凝聚聚类:动态更新聚类数量)。换句话说,在不同的 N 值上运行拟合,而不是每次都重新聚类。但是,我们遇到了语法错误,之后无法调用存储在缓存中的任何集群的标签。代码看起来像:
x = AgglomerativeClustering(memory="mycachedir", compute_full_tree=True
但x.fit_predict(inputDF{2})
不符合内存访问命令的语法有人知道在这种情况下从缓存中调用标签的语法吗?谢谢 PS我是新手,如果我不清楚,请提前道歉。
2016 年发布的尝试解决方案(sklearn 凝聚集群:动态更新集群数量)。
代码看起来像:
x = AgglomerativeClustering(memory="mycachedir", compute_full_tree=True
但x.fit_predict(inputDF{2})
不符合内存访问命令的语法
我们期望在给定的数组输入上运行聚类并检索每个集群的标签,当我们在一个范围内改变集群的数量“N”时,使用缓存而不是每次都重新计算树
解决方案
sklearn API 非常适合这个。
使用 scipy 的凝聚聚类要好得多。因为它包含两个步骤:构建链接/树状图,然后从中提取平面聚类。第一步是使用 Ward 的 O(n³),但我认为第二步只有 O(n)。在 ELKI 中也可以找到类似的方法。但不幸的是,sklearn 遵循这种源自分类的狭隘“拟合预测”视图,并且不支持这种两步法。
如果我没记错的话,scipy 中还有其他功能,但 sklearn 中没有。看看吧。
推荐阅读
- rust - 对货物使用多个标志
- c# - 我可以使用 gRpc 代替 SignalR 在客户端更新通知吗?
- sql - SQL Server:如果带有int ID的数字,则内部连接字符串
- javascript - 使用 Lerna 将 JavaScript 导入 TypeScript 应用程序
- java - 一个 osgi 捆绑包可以成为生产者,而它从另一个捆绑包中消费吗?
- c# - sed一个udp数据包到openvpn的方法是什么
- java - “我猜你的年龄”游戏无法正常运行
- javascript - JavaScript 生成带有特殊字符 JSON 的标题
- mediawiki - 哪个版本的 MediaWiki 出现了“页面预览”功能?
- react-native - 如何在反应原生应用程序中跟踪设备上的所有图像?