我有一个具有连续和分类值的数据集。我想在DBSCAN中编写一个作为度量的函数,该函数使用相同的欧几里得距离进行连续运算,并且要处理分类值,它必须将整个字符串值与其他字符串值标识在一起。如果这两个值相等,则如果距离不相等,则必须将距离设为0,然后结果应为一。当我尝试为度量编写用户定义的函数时,它根本没有将数据传递给我的函数。它抛出类似“无法将字符串转换为浮点型的错误:“'second'””?有什么方法可以将数据传递给我的函数吗?
数据框如下:
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
答案 0 :(得分: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]
的数组是您的。