我有一个包含分类(标称和序数)和数值属性的数据集。我想使用这些混合属性来计算我的观察结果的(不相似度)矩阵。使用R中群集程序包的daisy()函数,我可以很容易地获得一个相异矩阵,如下所示:
if(!require("cluster")) { install.packages("cluster"); require("cluster") }
data(flower)
as.matrix(daisy(flower, metric = "gower"))
这使用gower度量标准来处理名义变量。在R中有与该daisy()
函数等效的Python吗?
还是任何其他允许使用Gower度量标准或类似方法为具有混合(标称,数字)属性的数据集计算(不相似度)矩阵的模块功能?
相信您正在寻找scipy.spatial.distance.pdist
。
如果您实现了一个可在一对观测值上计算高尔距离的函数,则可以将该函数传递给pdist
,它将成对应用,并返回成对距离的矩阵。高尔距离似乎不是内置选项之一。
同样,如果单个观测值具有混合属性,则可以定义自己的函数,例如,对数字属性的子集使用欧几里得距离,对分类属性的子集使用高尔距离,然后将它们相加-或对于您的应用程序而言,对您意味着什么的任何其他实现,都可以计算两个孤立的观测值之间的距离。
对于使用Python进行群集化,通常您希望使用scikits.learn,此问答页面确切地讨论了将自定义距离度量(在您的情况下为Gower)与scikits一起使用的问题-这似乎是不可能的。
您可以使用pdist
该链接的答案页面上的实现提供的选择之一,也可以使用Gower相似性实现一个功能并使用它。但是,如果您想从scikits中获得现成的群集工具,则似乎不可能直接实现。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句