【发布时间】:2021-08-01 23:00:54
【问题描述】:
我有一个 Python 对象列表,我想将这些对象聚集到未知数量的组中。对象不能简单地通过 scikit-learn 提出的任何距离函数进行比较,而是通过自定义的距离函数进行比较。我正在使用 scikit-learn 库中的 DBSCAN,当在我的数据上运行时会引发 TypeError。
这是错误代码的样子。我要聚类的对象是“补丁”对象,通过扫描 3d 网格获得:
from sklearn.cluster import DBSCAN
def getPatchesSimilarity(patch1, patch2):
... #Logic to calculate distance between patches
return dist
#Reading the data (a mesh object) and extracting its patches
mesh = readMeshFromFile("foo.obj")
patchesList = extractPatchesFromMesh(mesh)
clustering = DBSCAN(metric = getPatchesSimilarity).fit(np.array([[patch] for patch in meshPatches]))
运行时,此代码会产生以下错误:
TypeError: float() argument must be a string or a number, not 'Patch'
这似乎意味着 scikit-learn 提出的 DBSCAN 算法不适用于非向量或字符串的值?
我也尝试只使用补丁的索引,以便传递的数据是数字的,但它也不起作用。现在最后一个可行的解决方案是使用距离矩阵,但是对象的数量非常大,我的计算机无法存储这样的矩阵。
【问题讨论】:
标签: python scikit-learn cluster-analysis