Python内部相似性

2024-09-30 08:32:26 发布

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

我试图用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}$

Tags: 数据函数代码元素距离irissqrt相似性
1条回答
网友
1楼 · 发布于 2024-09-30 08:32:26

您可以使用sklearn.metrics.pairwise.pairwise_distances,它返回一个距离矩阵,默认情况下它使用的是“欧几里得”相似性(您在示例中计算的函数)。在

你会在这里找到一切的 http://scikit-learn.org/stable/modules/generated/sklearn.metrics.pairwise.pairwise_distances.html

这里有一些代码;)

import numpy as np
from sklearn import datasets
from sklearn.metrics import  pairwise 

iris = datasets.load_iris()

X = iris.data
Y = iris.target

# dividing X by classes {0,1,2} to perform intra-distances
X0 = X[np.where(Y==0)] 
X1 = X[np.where(Y==1)]
X2 = X[np.where(Y==2)]

sim0_intra = pairwise.pairwise_distances(X0, metric='euclidean')
sim1_intra = pairwise.pairwise_distances(X1, metric='euclidean')
sim2_intra = pairwise.pairwise_distances(X2, metric='euclidean')

如文档所述,成对距离返回“距离矩阵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。所以。。。如果有更好的方法,请分享!:)

相关问题 更多 >

    热门问题