Существуют также алгоритмы кластеризации, такие как DBSCAN , которые фактически не заботятся о ваших данных. Все, что нужно этому алгоритму - это функция расстояния . Поэтому, если вы можете указать функцию расстояния для ваших объектов, вы можете использовать DBSCAN (или OPTICS, который является расширением DBSCAN, для которого не нужен параметр epsilon).
Итак, ключевым вопросом здесь является как вы хотите сравнить свои функции . Это не имеет ничего общего с кластеризацией и сильно зависит от домена. Если ваши функции, например, вхождения слова, Расстояние косинуса - хороший выбор (использование 0 для отсутствующих функций). Но если вы, например, иметь набор ключевых точек SIFT, извлеченных из изображения, нет очевидного способа эффективно связать различные функции друг с другом, поскольку нет порядка в функциях (так что можно сравнить первую ключевую точку с первой ключевой точкой и т. д.) A Возможный подход здесь состоит в том, чтобы получить другой - однородный - набор функций. Как правило, набор слов функции используются для такой ситуации. Для изображений это также известно как визуальные слова . По сути, вы сначала кластеризируете подфункции, чтобы получить ограниченный словарный запас. Затем вы можете назначить каждому из исходных объектов «текст», состоящий из этих «слов», и использовать для них функцию расстояния, например косинусное расстояние.