【问题标题】:SciPy Hierarchical String Clustering in Python?Python中的SciPy分层字符串聚类?
【发布时间】:2019-02-17 22:17:46
【问题描述】:

在我之前的一个堆栈溢出问题 (here) 中,建议我使用层次聚类根据汉明距离对列表中包含的字符串进行分组。我发现了其他几位对 Python SciPy 包有疑问的发帖人,特别是与我有类似问题的链接函数(herehere)。

如果我对 SciPy 的链接函数的理解是正确的,我需要传入一个数组并根据汉明距离指定与集群的链接。但是,当我尝试在几个字符串的列表上实现它时:

import scipy.cluster.hierarchy as sch
X = [[i] for i in ['apples','applez','appelz','apppel','orange','oranze','oranqg','orangs']]
Z = sch.linkage(X,method='complete',metric='Hamming')

我收到以下错误:

Traceback (most recent call last):
File "C:/Users/nguyenthoh/Desktop/UMI_grouping/scratch_script.py", line 15, in <module>
Z = sch.linkage(X,method='complete',metric='Hamming')
File "C:\Users\User\AppData\Roaming\Python\Python27\site-packages\scipy\cluster\hierarchy.py", line 694, in linkage
y = _convert_to_double(np.asarray(y, order='c'))
File "C:\Users\User\AppData\Roaming\Python\Python27\site-packages\scipy\cluster\hierarchy.py", line 1216, in _convert_to_double
X = X.astype(np.double)
ValueError: could not convert string to float: apples

这显然表明链接的输入需要是一个数字数组,而不是字符串。

有没有办法将字符串与 SciPy 的链接一起使用,或者我是否需要提供带有链接的汉明距离函数以便它可以对字符串进行聚类?

【问题讨论】:

  • 按照docscode操作即可。最重要的是numpy如何对待u != v。因此,无需评估有关您的任务或方法的任何内容:(0)检查验证函数(可能创建 numpy 数组)(1)当 u 或 v 是对象数组(来自字符串)时,检查 numpy 对 u != v 的作用。 (3) 不要使用 object-arrays.Naive 方法:只需将文本转换为 ascii 值 (4)请记住:#u = #v

标签: python string scipy hierarchical-clustering


【解决方案1】:

ValueError:无法将字符串转换为浮点数:苹果

您需要对分类变量进行标签编码,其中类别列为字符串(这些也可以是在 python 中类型转换为字符串的数字)。

在 python 中,我们有:from sklearn.preprocessing import LabelEncoder.

查看文档并实施它。它会将您的字符串类别分别标记为每个类别的整数。

例子:

代码:le.transform(["tokyo", "tokyo", "paris"])
输出:数组([2, 2, 1]...)

然后您可以将其用于分层/凝聚聚类。 也许还要检查所有变量是否都是数字形式,例如 int 或 float。

祝你有美好的一天!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-23
    • 2016-08-25
    • 1970-01-01
    • 2012-05-05
    • 2014-10-03
    • 2016-04-28
    • 2021-07-02
    • 2017-07-04
    相关资源
    最近更新 更多