2017-05-31 231 views
0

我有一个包含字符串值的分类属性。其中三个包含dayname(星期一)月份名称和时间间隔(早上下午晚上),另外两个像我之前提到的那样有地区和街道名称。其次是性别,角色,评论(这是一个预定义的固定字段,其值为好,坏的强烈同意等)姓和名。我的意图是对它们进行聚类和可视化。我使用这个WEKA bur应用k均值聚类它没有工作。 现在我想对它应用层次聚类。我发现这个代码:Python中的分类数据的分级聚类

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

你如何计划定义字符串之间的距离 - 或者是你的问题的一部分? – Prune

+0

这是一个问题,我的理解是,距离calcualtion的方法可以在sch.distance.pdist中定义。我打算使用余弦函数,但不确定它是否是找到距离的正确方法,所以我的第一个问题是如何在上面的代码中为分类变量定义变量X. – Nhqazi

+0

我猜想的基本问题是如何表示具有多个值的分类变量。我知道kmode方法用于分类变量,但我打算使用分层聚类。 – Nhqazi

回答

1

我认为我们已经发现了问题,那么:你离开X值,因为他们,字符串数据。您可以将它们传递给pdist,但您也必须为距离度量提供2元函数(2个输入,数字输出)。

最简单的就是平等的分类有0距离;一切是1,你可以,如果你心里有其他类别区分,只是代码逻辑返回所需的距离,在包裹的功能,然后通过函数名pdist

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

做到这一点。我们无法帮助您,因为您没有告诉我们关于您的类或模型语义的信息。

这让你感动吗?

+0

谢谢。我的数据有超过10个属性,其中两个包含城市中的区和街道的名称。他们每个人都可能有许多不同的值可能超过20个。我不确定上述技术是否适用于这种类别的值。请指教。 – Nhqazi

+0

我建议你*指定*的问题。 “我不确定......”不是规范。我已经回答了您提出的问题:如何表示分类数据(就像您已经在做的那样)以及如何处理距离函数。我给了你一个简单的例子。当您继续避免对您*做*距离度量指标所需的评论时,我无法处理后续问题。 – Prune

+0

好的,这是我的规范。我有一个包含字符串值的分类属性。其中三个包含dayname(星期一)月份名称和时间间隔(早上下午晚上),另外两个像我之前提到的那样有地区和街道名称。其次是性别,角色,评论(这是一个预先确定的固定字段,其值为好,坏的强烈同意等)姓氏和名字。我的意图是将它们聚类并可视化。我使用这个WEKA bur应用k均值聚类它没有工作。我希望我现在已经指出了这个问题。 – Nhqazi