Итак, исходя из вашего ответа на мой комментарий: я не думаю, что есть коэффициент коэффициента подобия, который будет делать то, что вы хотите.Позвольте мне объяснить, почему ...
Коэффициенты подобия являются функциями f(x, y) -> c
, где x
и y
- векторы, а c
- скаляр.Обратите внимание, что f
принимает два параметра.f(x,y) = f(y,x)
, но f(x)
не имеет смысла - оно требует сходства x
относительно ... ничего.
И что?Мы могли бы просто использовать функцию g(x) = f(x, V)
, где V
- фиксированный вектор.Например, пусть V = [1, 1, ..., 1]
.Теперь у нас есть монадическая функция, которая дает нам значение подобия для каждого отдельного вектора.Но ...
Знание f(x,y) = c
и f(x,z) = c'
мало что говорит о f(y,z)
.Взять векторы в 2-х пространствах x = [1, 1], y = [0, 1], z = [1,0]
.Функция сходства, симметричная в двух измерениях, сказала бы f(x,y) = f(x,z)
, но, надеюсь, не = f(y,z)
Так что наша функция g
, приведенная выше, не очень полезна, потому что знание того, насколько похожи два вектора на V
, мало что говорит нам онасколько они похожи друг на друга.
Так что вы можете сделать?Я думаю, что простым решением вашей проблемы было бы изменение алгоритма k ближайших соседей .Это позволяет вам находить векторы, близкие к данному вектору (или, если вы предпочитаете находить кластеры векторов без указания данного вектора, посмотрите clustering )
EDIT: вдохновение из ответа Яхьи: если ваши векторы очень велики, а кластеризация или кластеризация слишком сложны, рассмотрите принцип анализа основных компонентов или какой-то другой метод сокращения их размера (уменьшения количества измерений) - просто имейте в виду, что вы делаете, скорее всего, с потерями