У меня есть два двоичных списка, которые я пытаюсь сравнить.Для сравнения я суммирую, где каждое соответствующее значение равно, и преобразую его в процент:
import numpy as np
l1 = [1,0,1]
l2 = [1,1,1]
print(np.dot(l1 , l2) / len(l1) * 100)
печатает 66.666
Так что в этом случае l1 и l2 равны 61.666 с точки зрения близости.Поскольку каждый список менее похож, значение близости уменьшается.
Например, используя значения:
l1 = [1,0,1]
l2 = [0,1,0]
возвращает 0.0
Как построить l1
и l2
, чтоопишите связь между l1
и l2
?Есть ли имя для использования этого метода для измерения сходства между двоичными значениями?
Использование разброса:
import matplotlib.pyplot as plt
plt.scatter( 'x', 'y', data=pd.DataFrame({'x': l1, 'y': l2 }))
производит:
Но это не имеет смысла?
Обновление:
", если обе записи равны 0, это не будет способствовать вашему" сходству "
Используя обновленный код ниже для вычисления сходства, эта обновленная мера сходства включает в себя соответствующие 0 значений при вычислении итоговой оценки.
import numpy as np
l1 = [0,0,0]
l2 = [0,1,0]
print(len([a for a in np.isclose(l1 , l2) if(a)]) / len(l1) * 100)
, которая возвращает:
66.66666666666666
В качестве альтернативы, используя приведенный ниже код споказатель normalized_mutual_info_score
возвращает 1,0 для списков, которые являются одинаковыми или разными, поэтому normalized_mutual_info_score
не является подходящей мерой сходства?
from sklearn.metrics.cluster import normalized_mutual_info_score
l1 = [1,0,1]
l2 = [0,1,0]
print(normalized_mutual_info_score(l1 , l2))
l1 = [0,0,0]
l2 = [0,0,0]
print(normalized_mutual_info_score(l1 , l2))
отпечатков:
1.0
1.0