Ответ 1
Вам нужно найти функцию расстояния, которая работает для ваших данных. Использование двоичных переменных индикатора неявно решает эту проблему. Это дает вам возможность продолжить вашу матричную реализацию с такими типами данных, но гораздо более простой способ - и подходит для большинства методов на основе расстояния - это просто использовать модифицированную функцию расстояния.
Существует бесконечное число таких комбинаций. Вам нужно поэкспериментировать, который лучше всего подходит для вас. По существу, вы можете использовать некоторую классическую метрику для числовых значений (обычно с применением нормализации, но может иметь смысл также перенести эту нормализацию в функцию расстояния), а также расстояние по другим атрибутам, масштабируемое соответствующим образом.
В большинстве реальных областей применения алгоритмов, основанных на расстоянии, это самая сложная часть, оптимизирующая вашу дистанционную функцию вашего домена. Вы можете видеть это как часть предварительной обработки: определение подобия.
Существует гораздо больше, чем просто евклидово расстояние. Существуют различные теоретико-множественные меры, которые могут быть гораздо более уместными в вашем случае. Например, коэффициент Tanimoto, сходство Jaccard, коэффициент кости и так далее. Косинус тоже может быть вариантом.
Есть целые конференции, посвященные темам поиска сходства - никто не утверждал, что это тривиально ни в чем, кроме евклидовых векторных пространств (и фактически даже не там): http://www.sisap.org/2012