Zhu*_*arb 12 python r similarity categorical-data r-daisy
我有一个包含分类(名义和序数)和数字属性的数据集.我想使用这些混合属性在我的观察中计算(dis)相似性矩阵.使用R中集群包的daisy()函数,我可以很容易地获得如下的相异矩阵:
if(!require("cluster")) { install.packages("cluster"); require("cluster") }
data(flower)
as.matrix(daisy(flower, metric = "gower"))
Run Code Online (Sandbox Code Playgroud)
这使用gower度量来处理名义变量.是否有一个Python相当于daisy()R 中的函数?
或者也许任何其他模块函数允许使用Gower指标或类似的东西计算具有混合(名义,数字)属性的数据集的(dis)相似性矩阵?
Mar*_*ann 15
仅仅实现Gower函数与pdist一起使用就不够了.
在内部,如果使用带有混合数据的矩阵,pdist会进行几次数值转换.
我根据原始论文实现了Gower功能,以及pdist模块中所需的相应功能(我不能简单地覆盖这些功能,因为pdist模块中的defs是私有的).
到目前为止我获得的结果与R的菊花函数相同.
这个jupyter笔记本的源代码是可用的:https://sourceforge.net/projects/gower-distance-4python/files/
我相信你在找scipy.spatial.distance.pdist.
如果在一对观测值上实现计算Gower距离的函数,则可以将该函数传递给pdist它,并将成对应用它并返回成对距离的结果矩阵.Gower距离似乎不是内置选项之一.
同样,如果单个观察具有混合属性,则可以定义自己的函数,例如,使用类似于数值属性子集的欧几里德距离,分类属性子集上的Gower距离,并添加它们 - 或者任何其他实现,对您的应用程序来说,计算两个孤立观察之间的距离意味着什么.
对于Python中的聚类,通常你想使用scikits.learn,这个问题和答案页面正好讨论了使用自定义距离测量(在你的情况下是Gower)与scikits的问题 - 这似乎是不可能的.
您可以使用其中一个选项pdist以及该链接答案页面上的实现 - 或者您可以实现Gower相似性的功能并使用它.但是如果你想要scikits的开箱即用的群集工具,它似乎不是直接可能的.