我有一个包含连续值和分类值的数据集。我想在 DBSCAN 中编写一个函数作为度量,它使用相同的欧几里德距离进行连续,并且为了处理分类值,它必须将整个字符串值与其他字符串值一起识别。如果这 2 个值相等,则距离必须为 0;如果它们不相等,则应生成 1 作为结果。当我尝试编写用户定义的度量函数时,它根本没有将数据传递给我的函数。它抛出诸如“无法将字符串转换为 float :“'第二'””之类的错误?有什么方法可以将数据传递给我的函数吗?
数据框看起来像:
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
最佳答案
我想你应该使用“预先计算的”指标来初始化 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]
的数组是你的。
关于python - 如何将包含分类数据和连续数据的数据集获取到 DBSCAN 中用户定义的度量函数中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52094243/