python中分类数据的层次聚类

2024-05-16 10:18:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含字符串值的分类属性。其中三个包含dayname(mon---sun)monthname和time interval(morning-午后-傍晚),另外两个是我前面提到的地区和街道名称。其次是性别、角色、评论(这是一个预定义的固定字段,有good、bad、strong agree等值)姓氏和first我的名字目的是将它们聚集在一起并将其形象化。我用这个WEKA应用了k-均值聚类,但是它不起作用。 现在我希望对它应用层次聚类。我发现了这个密码:

import scipy
import scipy.cluster.hierarchy as sch
X = scipy.randn(100, 2)     # 100 2-dimensional observations
d = sch.distance.pdist(X)   # vector of (100 choose 2) pairwise distances
L = sch.linkage(d, method='complete')
ind = sch.fcluster(L, 0.5*d.max(), 'distance')

然而,上面代码中的X是数字;我有分类数据。 有什么方法可以让我用大量的分类数据来计算距离吗? 换句话说,我可以使用字符串值的分类数据来查找距离吗? 我会用这个距离来表示sch.linkage(d, method='complete')


Tags: 数据字符串import距离属性分类聚类scipy
2条回答

另一种可能性是使用汉明距离。在

Y = pdist(X, 'hamming')

Computes the normalized Hamming distance, or the proportion of those vector elements between two n-vectors u and v which disagree. To save memory, the matrix X can be of type boolean.

如果你的分类数据由一个字符表示,例如:“m”/“f”,那么它可能就是你要找的。在

https://en.wikipedia.org/wiki/Hamming_distance

https://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.distance.pdist.html#scipy.spatial.distance.pdist

我想我们已经确定了问题所在:您将X值保持原样,即字符串数据。您可以将这些传递给pdist,但还必须为距离度量提供一个2进制函数(2个输入,数字输出)。在

最简单的方法是相等的分类有0个距离;其他的都是1。你可以用

d = sch.distance.pdist(X, lambda u, v: u != v)

如果您想知道其他类的区别,只需编写逻辑以返回所需的距离,将其包装在一个函数中,然后将函数名传递给pdist。我们对此无能为力,因为您没有告诉我们您的类或模型语义。在

这能让你动起来吗?在

相关问题 更多 >