python - 如何将包含分类数据和连续数据的数据集获取到 DBSCAN 中用户定义的度量函数中?

标签 python python-3.x cluster-analysis data-mining dbscan

我有一个包含连续值和分类值的数据集。我想在 DBSCAN 中编写一个函数作为度量,它使用相同的欧几里德距离进行连续,并且为了处理分类值,它必须将整个字符串值与其他字符串值一起识别。如果这 2 个值相等,则距离必须为 0;如果它们不相等,则应生成 1 作为结果。当我尝试编写用户定义的度量函数时,它根本没有将数据传递给我的函数。它抛出诸如“无法将字符串转换为 float :“'第二'””之类的错误?有什么方法可以将数据传递给我的函数吗? 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 

最佳答案

我想你应该使用“预先计算的”指标来初始化 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/

相关文章:

python-3.x - 替代部分依赖图?

twitter - 用于主题检测的推文之间的表示和良好的相似性度量

python - 如何使用 xpath/css 选择器单击 drupal 8 网站中的动态链接,同时通过 Selenium 和 Python 实现自动化

python - 使用列表似乎无法将工作日与数字匹配

Python 3 : Python/C API String Problems

python - 加入两个偏移量列表 ("offset zip"?)

Python - 使用 pyodbc 使用来自 Excel 数据连接的信息连接到远程服务器

python - 属性错误: module 'urwid' has no attribute 'Text'

r - 如何使用 FactoMineR 包以编程方式确定主成分的列索引?

machine-learning - Eps、DBSCAN 中哪些点算数