如何在DBSCAN中将包含分类数据和连续数据的数据集转换为用户定义的度量函数?

问题描述 投票:3回答:1

我有一个具有连续和分类值的数据集。我想在DBSCAN中编写一个函数作为度量,它使用相同的欧几里德距离来连续,并且为了处理分类值,它必须用其他字符串值来标识整个字符串值。如果这两个值相等,则必须将距离设为0(如果它们不相等)则应该产生一个作为结果。当我尝试为度量编写用户定义的函数时,它根本没有将数据传递给我的函数。它抛出错误,如“无法将字符串转换为浮动:”'第二个'“”?有没有办法将数据传递给我的函数? enter image description here

数据框如下所示:

        sundar call      raju   ram     sony  tintu  banti
points                                                    
x1         0.6  '0'   'first'  0.93   'lion'   0.34   0.98
x2         0.7  '1'  'second'  0.47    'cat'   0.43   0.76
x3         0.4  '0'   'third'  0.87  'tiger'   0.24   0.10
x4         0.6  '0'   'first'  0.93   'lion'   0.34   0.98
x5         0.5  '1'   'first'  0.32  'tiger'   0.09   0.99
x6         0.4  '0'   'third'  0.78  'tiger'   0.18   0.17
x7         0.5  '1'  'second'  0.98    'cat'   0.47   0.78 
python python-3.x cluster-analysis data-mining dbscan
1个回答
2
投票

我想你应该用“预先计算”的度量标准来初始化DBSCAN:

dbscan = sklearn.cluster.DBSCAN(metric="precomputed")

(省略其他参数)。然后计算所有样本之间的度量并获得形状[n_samples, n_samples]的矩阵。

X = user_defined_metric(data, data)

然后使用这些数据来适应DBSCAN:

labels = dbscan.fit_predict(X)

根据sklearn文档,

fit_predict(X, y=None, sample_weight=None)

Performs clustering on X and returns cluster labels.
Parameters: 
X : array or sparse (CSR) matrix of shape (n_samples, n_features), or array of shape (n_samples, n_samples)
    A feature array, or array of distances between samples if metric='precomputed'.

第二种情况 - 形状[n_samples, n_samples]阵列是你的。

© www.soinside.com 2019 - 2024. All rights reserved.