我想用 HDBSCAN* 对一些数据进行聚类。
距离是根据两个值的某些参数的函数计算的,因此如果数据如下所示:
label1 | label2 | label3
0 32 18.5 3
1 34.5 11 12
2 .. .. ..
3 .. .. ..
两个样本之间的距离将类似于:
def calc_dist(i,j)
return 0.5 * dist_label1_func(data.iloc[i]['label1],data.iloc[j]['label1] +
0.4 * dist_label2_func(data.iloc[i]['label2],data.iloc[j]['label2] +
0.1 * dist_label3_func(data.iloc[i]['label3],data.iloc[j]['label3]
由于数据的大小,我无法计算距离矩阵,所以似乎可调用是我唯一的选择。
我的代码看起来像:
clusterer = hdbscan.HDBSCAN(metric=calc_dist).fit(i=i,j=j)
错误:fit() got an unexpected keyword argument 'i
clusterer = hdbscan.HDBSCAN(metric=calc_dist).fit(i,j)
错误:
ValueError: Expected 2D array, got scalar array instead:array=4830.
Reshape your data either using array.reshape(-1, 1) if your data has a single feature
or array.reshape(1, -1) if it contains a single sample.
它不起作用,我还尝试将内部参数更改为原始数据集名称:
clusterer = hdbscan.HDBSCAN(metric=calc_dist).fit(data)
错误:raise ValueError("Found array with dim %d. %s expected <= 2.")
ValueError: setting an array element with a sequence.
但它也不能接受。
我想念什么?