我有一个包含字符串值的分类属性。其中三个包含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')
答案 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”,则可能是您要查找的内容。