我有一个数据集,其中包含了分类(名义和序数)和数字属性。我想使用这些混合属性计算观察结果的(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)相似性矩阵?
仅仅实现一个用于pdist的Gower函数是不够的。
在pdist内部,如果使用一个包含混合数据的矩阵,则会有几个数值转换失败。
根据原稿,我实现了Gower函数,以及pdist模块中所需的各个数据(我不能简单地重写这些函数,因为pdist模块中的def是私有的)。
到目前为止,我从R的雏菊函数得到的结果是相同的。
源代码在这个jupyter笔记本上是可用的: https://sourceforge.net/projects/gower-distance-4python/files/
我相信你在找^{} 。
如果您实现一个函数,该函数计算一对观测值的Gower距离,您可以将该函数传递给
pdist
,它将成对应用该函数并返回成对距离的结果矩阵。Gower距离似乎不是内置选项之一。同样地,如果一个观测值有混合属性,你可以定义你自己的函数,比如说,在数值属性子集上使用欧几里德距离,在分类属性子集上使用Gower距离,然后添加它们——或者对你的应用程序来说,它意味着什么的任何其他实现,计算两个孤立观测之间的距离。
对于Python中的集群,通常需要使用scikits.learn和this question and answer page来处理,这正好讨论了在scikits中使用自定义距离度量(在您的示例中是Gower)的问题——这似乎是不可能的。
您可以使用由
pdist
提供的一个选项以及该链接答案页上的实现,也可以实现Gower相似度函数并使用它。但是,如果您希望使用scikits提供的现成的集群工具,这似乎不可能直接实现。相关问题 更多 >
编程相关推荐