python - 如何在 DBSCAN 中将包含分类数据和连续数据的数据集放入用户定义的度量函数中?
问题描述
我有一个具有连续和分类值的数据集。我想编写一个函数作为 DBSCAN 中的度量标准,它使用相同的欧几里得距离连续并处理分类值,它必须将整个字符串值与其他字符串值标识。如果这 2 个值相等,则必须将距离设为 0,如果它们不相等,则结果应为 1。当我尝试为度量编写用户定义的函数时,它根本没有将数据传递给我的函数。它抛出错误,如“无法将字符串转换为浮点数:“'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
解决方案
我想您应该使用“预计算”指标初始化 DBSCAN:
dbscan = sklearn.cluster.DBSCAN(metric="precomputed")
(其他参数省略)。然后计算所有样本之间的度量,得到 shape 的矩阵[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-3.x - 从 Python Selenium 以 JSON 格式保存文本
- scala - 运行 Play 时出现 Heroku 错误:控制器/路由已由 Java 运行时的更新版本编译
- c# - 即使我强制用户刷新页面,是否有任何方法可以使用 C# 更改键盘布局(英语 - 阿拉伯语)?
- android - 发现两个 getter 或属性的区分大小写冲突的字段,一旦 minifyEnabled 为 True
- angular - Ngrx 选择器未定义的 EntityAdapter
- typescript - TypeScript:typeof 泛型类型函数,无需解析为任何或未知
- vba - VBA IsMissing 返回错误的缺失参数
- java - 使用 LambdaMetaFactory 暴露 getter 导致类转换异常
- javascript - componentDidUpdate 在多个屏幕上获取触发器
- c++ - 显示错误的输出