Python中的SciPy分层字符串聚类?

时间:2018-03-06 22:51:41

标签: python string scipy hierarchical-clustering

在我之前的一个Stack Overflow问题(here)中,我建议使用Hierarchical Clustering根据汉明距离对列表中包含的字符串进行分组。我发现了其他一些有关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的链接中使用字符串,还是需要提供带链接的汉明距离函数,以便它可以对字符串进行聚类?

1 个答案:

答案 0 :(得分:-1)

  

ValueError:无法将字符串转换为float:苹果

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

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

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

示例:

  

CODE:le.transform([“ tokyo”,“ tokyo”,“ paris”])
  输出:array([2,2,1] ...)

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

祝你有美好的一天!