我试图用Python编写Iris数据集的内部相似性。 这是同一类元素之间的距离。 例如在那个集合上:
1 2 3 4 |0
5 6 7 8 |0
1 3 5 6 |1
11 12 13 14 |0
10 2 4 6 |1
distance1 = (1-5)^2 + (2-6)^2 + (3 - 7)^2 + (4-8)^2
distance1 = sqrt(distance1)
distance2 = (1- 11)^2 + (2-12)^2 + (3 - 13)^2 + (4-14)^2
distance2 = sqrt(distance2)
similarityClass0 = (ditance1 + distance2) / 2
然后我要对1、2、3等班做同样的事情。在
现在我的代码是函数式的,但是很难看
在输入中我有X和y,当我完成tab0的计算时,我也会这样做
对于tab1、tab2等
我的问题是:如何为n个类创建代码?我的目标也是为每一行提供一个内部相似性的度量
^{pr2}$
您可以使用
sklearn.metrics.pairwise.pairwise_distances
,它返回一个距离矩阵,默认情况下它使用的是“欧几里得”相似性(您在示例中计算的函数)。在你会在这里找到一切的 http://scikit-learn.org/stable/modules/generated/sklearn.metrics.pairwise.pairwise_distances.html
这里有一些代码;)
如文档所述,成对距离返回“距离矩阵D,使得D{i,j}是给定矩阵X的第i个和第j个向量之间的距离”
例如,在我们的例子中:
sim0_intra[0][1] > 0.53851648071346281
是类0的第一个和第二个元素之间的距离。如果你要求像sim0_intra[5][5] > 0.0
这样的东西,并注意到距离是0,这也就不足为奇了,因为你要求的是到元素本身的距离,而这个距离是none:)最后,你可以求出每个矩阵的平均值,这样就可以得到内部相似度:
^{pr2}$我在计算自己的平均值(应该有更好的方法来做)。我把所有的距离加起来(顺便加两次),除以元素总数(50*50),但减去对角线上的。在
注意:我已经尝试了几种方法,比如
np.triu
,它给出了矩阵的上半部分,然后试图调用mean
,但它的意思是同时考虑了矩阵的下半部分,现在是0。所以。。。如果有更好的方法,请分享!:)相关问题 更多 >
编程相关推荐