我想在Python中对虹膜数据集的内部相似性进行编码。 这是来自同一班级的元素之间的距离。 例如对集:Python - 内部相似度
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类?我的目标是还要对每一行内的相似程度
from sklearn import datasets
import numpy as np
iris = datasets.load_iris()
iris.data.shape, iris.target.shape
X = iris.data
#0 = Setosa // 1 = Versicolor // 2 = Virginica
y = iris.target
#At first, we retrieve the indexes of each classes
#For example if tab0 has classes on ligne 1,2,6. Tab0 will store 1,2,6
tab0 = list()
tab1 = list()
tab2 = list()
j = 0
for output in y:
if output == 0 :
tab0.append(j)
if output == 1 :
tab1.append(j)
if output == 2 :
tab2.append(j)
j = j + 1
########################################################################
#Computation intra similarity#
import math
sim0_intra = list()
sim1_intra = list()
sim2_intra = list()
#Classes stores 1,2,3 (the 3classes), count the number of elements in each classes
classes, count = np.unique(y, return_counts=True)
temp = 0
for i in tab0:
temp = 0
for j in tab0:
for k in range(len(X[0])):
temp = temp + np.square(X[i][k] - X[j][k])
sim0_intra.append(np.sqrt(temp/(count[0] - 1)))