相当于R的集群包中的daisy()的Python语言。

14 人关注

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

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

这使用高尔矩阵来处理名义变量。在R中是否有与daisy()函数相当的Python?

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

python
r
similarity
categorical-data
r-daisy
Zhubarb
Zhubarb
发布于 2014-10-16
2 个回答
Marcelo Beckmann
Marcelo Beckmann
发布于 2014-10-16
已采纳
0 人赞同

仅仅实现一个与pdist一起使用的Gower函数是不够的。

在内部,pdist做了几个数字转换,如果你使用一个混合数据的矩阵,就会失败。

我根据原始论文实现了高尔函数,并在pdist模块中进行了必要的修改(我不能简单地覆盖这些函数,因为pdist模块的定义是私有的)。

到目前为止,我用这个方法得到的结果与R的菊花功能相同。

源代码可以在这个jupyter笔记本上找到。 https://sourceforge.net/projects/gower-distance-4python/files/

JB1
这看起来很棒 :) 是否有计划将其纳入sklearn或以其他方式出版?
是的,有一张为sklearn准备的票( github.com/scikit-learn/scikit-learn/issues/5884 ),在审查了我的拉动请求后,我正在修正一些要点,希望我们能把这个实现推送给这个项目的主人。
JB1
我可以问--高尔距离和相似度之间有区别吗?我的假设是,相似度=1-距离?
你好,高尔距离是一种相似性测量,事实上,在原始论文中没有提到异质性( members.cbio.mines-paristech.fr/~jvert/svn/bibli/local/... ).
嗨,@MarceloBeckmann 谢谢你的实现。但是,它的规模并不大。对于5000个数据点,Mahalanobis需要1秒钟,但你的Gower需要3分钟。你能把代码矢量化吗?谢谢 :)
ely
ely
发布于 2014-10-16
0 人赞同

我相信你在寻找的是 scipy.spatial.distance.pdist .

如果你实现了一个在一对观察值上计算高尔距离的函数,你可以将该函数传递给 pdist ,它将成对地应用该函数并返回所产生的成对距离矩阵。高尔距离似乎并不是内置选项之一。