У меня есть набор (2k - 4k) маленьких строк (3-6 символов), и я хочу сгруппировать их. Поскольку я использую строки, предыдущие ответы на How does clustering (especially String clustering) work?, сообщил мне, что Levenshtein distance хорош для использования в качестве функции расстояния для строк. Кроме того, поскольку я не знаю заранее количество кластеров, hierarchical clustering - это путь, а не k-означает.Текстовая кластеризация с расстояниями Левенштейна
Хотя я получаю проблему в ее абстрактной форме, я не знаю, какой легкий способ на самом деле это сделать. Например, MATLAB или R - лучший выбор для фактической реализации иерархической кластеризации с пользовательской функцией (расстояние Левенштейна). Для обоих программ можно легко найти реализацию расстояния Левенштейна. Кластерная часть кажется сложнее. Например, Clustering text in MATLAB вычисляет массив расстояний для всех строк, но я не могу понять, как использовать массив расстояний для фактического получения кластеризации. Можете ли вы, чтобы кто-нибудь из вас, гуру, показал мне способ реализации иерархической кластеризации в MATLAB или R с помощью специальной функции?
Это зависит от типа иерархической кластеризации, которую вы используете. [Single linkage] (http://en.wikipedia.org/wiki/Single-linkage_clustering) & [полная ссылка] (http://en.wikipedia.org/wiki/Complete-linkage_clustering) HC можно выполнить с помощью просто матрицу расстояний, поэтому, если у вас есть это, любым способом, обычные функции кластеризации (например, 'hclust') должны работать нормально. OTOH, * средняя * привязка или метод Уорда требуют пересчета расстояний на каждом шаге, поэтому их было бы сложнее реализовать. – gung
Итак, в MATLAB [Z = linkage (Y, method)] (http://www.mathworks.com/help/stats/linkage.html#inputarg_method) будет работать с вычисляемой матрицей расстояний и, например, полным методом. Правильно? – Alexandros
Я должен был догадаться, что ответ «да». Прошло много времени с тех пор, как я использовал MATLAB, и я никогда не делал никаких кластеров. – gung