python

时间:2017-05-31 22:48:22

标签: python hierarchical-clustering categorical-data

我有一个包含字符串值的分类属性。其中三个包含dayname(mon --- sun)月份名称和时间间隔(早上下午晚上),我之前提到的另外两个有区和街道名称。其次是性别,角色,评论(这是一个预定义的固定字段,其值很好,坏强烈同意等)姓氏和名字。我的意图是聚集它们并将其可视化。我使用这个WEKA bur应用k-mean聚类它没有用。 现在我希望对它应用层次聚类。我找到了这段代码:

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是数字;我有分类数据。 有什么方法可以使用分类数据的numarray来找到距离? 换句话说,我可以使用字符串值的分类数据来查找距离吗? 然后我会在sch.linkage(d, method='complete')

中使用该距离

2 个答案:

答案 0 :(得分:2)

我认为我们已经确定了问题,然后:保留X值,即字符串数据。您可以将这些传递给pdist,但您还必须为距离度量提供2-arity函数(2个输入,数字输出)。

最简单的就是平等分类的距离为0;其他一切都是1.您可以使用

执行此操作
d = sch.distance.pdist(X, lambda u, v: u != v)

如果您考虑到其他类歧视,只需返回所需距离的代码逻辑,将其包装在函数中,然后将函数名称传递给pdist。我们无能为力,因为你没有告诉我们你的类或模型语义。

这会让你感动吗?

答案 1 :(得分:0)

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

  

Y = pdist(X, 'hamming')

     

计算归一化的汉明距离,或其中的比例   两个不同的n个向量u和v之间的向量元素。保存   内存,矩阵X的类型可以是布尔值。

如果您的分类数据用单个字符表示,例如:“ 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