python - pyclustering clarans.get_clusters() 返回空列表
问题描述
我正在尝试使用pyclustering模块进行 CLARANS 聚类,但是对于我尝试过的所有数据clarans(data, number_clusters, numlocal, maxneighbor) ,无论参数值是什么,所有方法都返回 [] (一个空列表)。我做了一个随机数据来测试方法,但答案是一样的,唯一有效的数据是 iris 数据 datasets.load_iris() 形式的 sklearn模块。难道我做错了什么?
这是测试数据:
import pandas as pd
import numpy as np
import seaborn as sns
from pyclustering.cluster.clarans import clarans
x1 = np.random.normal(10, 5, 100)
x2 = np.random.normal(30, 5, 100)
x = np.concatenate((x1, x2), axis=0)
y1 = np.random.normal(50, 5, 100)
y2 = np.random.normal(60, 5, 100)
y = np.concatenate((y1, y2), axis=0)
Gr = np.array(['G1']*100 + ['G2']*100)
df = pd.DataFrame(x, columns=['X'])
df['Y'] = y
df['Gr'] = Gr
这是我运行聚类技术时(我将 df 转换为 2D 列表):
datalist = np.zeros((200,2))
for i in df.index:
datalist[i][0] = round(float(df['X'][i]), 2)
datalist[i][1] = round(float(df['Y'][i]), 2)
cluster_clarans = clarans(datalist, 2, 6, 4)
cluster_clarans.get_clusters()
答案是:
[]
解决方案
process()
在打印出簇之前,您忘记使用函数执行处理。
这个说法
cluster_clarans = clarans(datalist, 2, 6, 4)
初始化类对象。然后,您需要调用 process 方法。
cluster_clarans.process()
现在,当您打印出集群时,您将获得 2 个列表,每个列表都包含每个集群中数据点的索引。get_clusters
请参阅此处的官方文档。
print(cluster_clarans.get_clusters())
这是下面的完整代码。请注意,我已更改以下随机数据的大小:
import pandas as pd
import numpy as np
import seaborn as sns
from pyclustering.cluster.clarans import clarans
x1 = np.random.normal(30, 10, 20)
x2 = np.random.normal(60, 5, 20)
x = np.concatenate((x1, x2), axis=0)
y1 = np.random.normal(20, 5, 20)
y2 = np.random.normal(40, 15, 20)
y = np.concatenate((y1, y2), axis=0)
Gr = np.array(['G1']*20 + ['G2']*20)
df = pd.DataFrame(x, columns=['X'])
df['Y'] = y
df['Gr'] = Gr
datalist = np.zeros((40,2))
for i in df.index:
datalist[i][0] = round(float(df['X'][i]), 2)
datalist[i][1] = round(float(df['Y'][i]), 2)
# Initialize the cluster object
cluster_clarans = clarans(datalist, 2, 6, 4)
# Process the data
cluster_clarans.process()
# Get the points in each clusters
print(cluster_clarans.get_clusters())
# Output: [[9,14,15,16,20,21,27,28,29,30,31,32,33,34,35,37,38,39],
[0,1,2,3,4,5,6,7,8,10,11,12,13,17,18,19,22,23,24,25,36]]
您可以在此处阅读有关该process()
功能的更多信息。
推荐阅读
- r - R 开发工具未正确安装
- hybris - 是否可以修改 items.xml 中项目类型的顺序?
- python - 我想将所有工作表添加到excel中的一张工作表中
- linux - ORA-01034: ORACLE 不可用 ORA-27101: 共享内存领域不存在 Linux-x86_64 错误: 2: 没有这样的文件或目录
- django - 无法在 TINYMCE_DEFAULT_CONFIG = { 'content_css' 中导入我自己的 css 文件:
- r - 获取变量时出现“ncdf4”R 包错误
- c++ - 使用 pybind11 将自定义结构(指针向量)从 C++ 传递到 python 的方法是什么?
- python-2.7 - 是否可以使用绑定变量创建 Oracle 视图?
- slack - 如果 HTTP 请求的完成时间比特定时间长,如何在 Slack 上发出警报
- c# - 将枚举值添加到操作内的列表中