scikit-learn - 如何将一组数字分成两个簇并返回对应索引的两个子集?
问题描述
我有一个标量数组pm
, 和一个索引列表,idx
,所以pm[idx]
是 的子集pm
。如何pm[idx]
分成两个簇(根据欧几里得距离)并获得两组对应的索引(最好使用scikit-learn)?
例如,
pm = array([0,1,2,3,4,100,105])
idx = [0,2,3,5,6]
我怎样才能获得idx1 = [0,2,3]
and idx2 = [5,6]
?
解决方案
基本上你想过滤你的数据pm
,这可以用你的 idx 数组轻松完成。您可以对过滤后的数据进行聚类以获得两个组。
可以完美应用基于分区的聚类算法,例如k-Means或SingleLink 。在scikit-learn
你可以使用/sklearn.cluster.AgglomerativeClustering
.
由于这些聚类算法希望您的数据具有列中的特征和行中的实例,因此您需要重塑数据。
然后,您可以从生成的集群标签中使用列表推导创建单独的索引数组。(没有找到一个相同的numpy函数)
您的解决方案可能如下所示:
cluster_algorithm = AgglomerativeClustering(n_clusters=2)
labels = cluster_algorithm.fit_predict(np.expand_dims(pm[idx], axis=-1))
print(labels)
>>> [1 1 1 0 0]
idx_labels = [np.where(labels == e)[0] for e in set(labels)]
idx_labels # [array([3, 4], dtype=int64), array([0, 1, 2], dtype=int64)]
推荐阅读
- excel - VBA Excel 类模块成员未填充字符串
- r - 在 R 中创建一个面板数据框 - 其中一个变量中的值随时间变化
- node.js - npm get-video-duration 错误:找不到 ffprobe 可执行文件
- node.js - 如何使用 discord.js bot 获取该公会中用户的角色
- c# - 使用 Moq 来模拟功能
- python - 如何解决“exec:\”Python\“:$PATH 中找不到可执行文件”:未知。用于 AWS 上的简单 python 脚本
- python - 可以在视图或切片上使用 pandas 替换方法来修改原始数据框吗?
- javascript - 如何将成功(数据)中的一些代码重构为脚本中的函数
- dialogflow-es - actions-on-google-dialogflow-session-entities-plugin 在 dialogflow 的内联编辑器中不起作用
- typescript - 量角器黄瓜打字稿:未定义。使用以下代码段实现: