Python中的daisy()与R的cluster包中相当

2024-05-23 17:49:09 发布

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

我有一个数据集,其中包含了分类(名义和序数)和数字属性。我想使用这些混合属性计算观察结果的(dis)相似矩阵。使用R中集群包的daisy()函数,可以很容易地得到如下不同矩阵:

if(!require("cluster")) { install.packages("cluster");  require("cluster") }
data(flower)
as.matrix(daisy(flower, metric = "gower"))

这使用gower度量来处理名义变量。在R中是否存在与daisy()函数等价的Python函数?

或者任何其他模块函数允许使用Gower度量或类似的东西来计算具有混合(名义,数字)属性的数据集的(dis)相似性矩阵?


Tags: 数据函数属性度量分类矩阵数字require
2条回答

仅仅实现一个用于pdist的Gower函数是不够的。

在pdist内部,如果使用一个包含混合数据的矩阵,则会有几个数值转换失败。

根据原稿,我实现了Gower函数,以及pdist模块中所需的各个数据(我不能简单地重写这些函数,因为pdist模块中的def是私有的)。

到目前为止,我从R的雏菊函数得到的结果是相同的。

源代码在这个jupyter笔记本上是可用的: https://sourceforge.net/projects/gower-distance-4python/files/

我相信你在找^{}

如果您实现一个函数,该函数计算一对观测值的Gower距离,您可以将该函数传递给pdist,它将成对应用该函数并返回成对距离的结果矩阵。Gower距离似乎不是内置选项之一。

同样地,如果一个观测值有混合属性,你可以定义你自己的函数,比如说,在数值属性子集上使用欧几里德距离,在分类属性子集上使用Gower距离,然后添加它们——或者对你的应用程序来说,它意味着什么的任何其他实现,计算两个孤立观测之间的距离。

对于Python中的集群,通常需要使用scikits.learnthis question and answer page来处理,这正好讨论了在scikits中使用自定义距离度量(在您的示例中是Gower)的问题——这似乎是不可能的。

您可以使用由pdist提供的一个选项以及该链接答案页上的实现,也可以实现Gower相似度函数并使用它。但是,如果您希望使用scikits提供的现成的集群工具,这似乎不可能直接实现。

相关问题 更多 >