在我以前的堆栈溢出问题(here)之一中,建议我使用分层聚类对基于汉明距离的列表中包含的字符串进行分组。我发现其他几个海报发布者对Python SciPy软件包有疑问,特别是链接函数(here和here)有类似的问题。
如果我对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链接的字符串,或者我需要提供带有链接的汉明距离功能,以便它可以将字符串聚类?
最佳答案
ValueError:无法将字符串转换为float:苹果
您需要对分类变量进行标签编码,并将类别列为字符串(在python中,这些变量也可能是数字类型转换为字符串)。
在python中,我们有:from sklearn.preprocessing import LabelEncoder.
查看文档并实施它。它将为每个类别分别将您的字符串类别标记为整数。
例:
CODE:le.transform([“ tokyo”,“ tokyo”,“ paris”])
输出:数组([2,2,1] ...)
然后,您可以将其用于层次/聚集聚类。
也许还要检查所有变量的数字形式,例如int或float。
祝你今天愉快!
关于python - Python中的SciPy分层字符串聚类?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49141352/