Я готовлю лекцию о механическом обучении в R, и я хочу взять hierarchical clustering в качестве примера. Я нашел это очень поучительную страницу здесь: http://home.deib.polimi.it/matteucc/Clustering/tutorial_html/hierarchical.htmlПедагогический способ программирования иерархического алгоритма кластеризации в R
Он начинается с таблицей следующих расстояний (виду NA
как столбец/имя строки при чтении данных, см также ниже):
кратчайшее расстояние - 138
между MI
и TO
, поэтому мы хотим объединить эти столбцы и строки в новый столбец/строку MI/TO
. Расстояние этого нового составного объекта MI/TO
от всех остальных городов равно кратчайшему расстоянию от одного из первоначальных городов MI
или TO
, т.е. MI/TO
- RM
- 564
(от MI
), потому что это меньше, чем 669
(от TO
). (Этот способ выполнения агрегации называется single-linkage clustering). Таким образом, мы имеем новую таблицу:
Мой вопрос
Я начал программировать это в R, и вскоре обнаружил, что код становится все более и более грязным - далеко от чего-то, что может быть легко понято программистов. Вы знаете подход или пакет, с помощью которого вы можете делать такие манипуляции с данными естественным и интуитивным способом?
Так вот исходная таблица в R:
D <- matrix(c(0,662,877,255,412,996,
662,0,295,468,268,400,
877,295,0,754,564,138,
255,468,754,0,219,869,
412,268,564,219,0,669,
996,400,138,869,669,0), ncol=6, byrow=T)
rownames(D) <- colnames(D) <- c("BA","FI","MI","Na","RM","TO")
D
## BA FI MI Na RM TO
## BA 0 662 877 255 412 996
## FI 662 0 295 468 268 400
## MI 877 295 0 754 564 138
## Na 255 468 754 0 219 869
## RM 412 268 564 219 0 669
## TO 996 400 138 869 669 0
Я знаю эту функцию, но мой вопрос о программировании этого примера с нуля! – vonjd
Спасибо за ваше напоминание. –
Никнее читать и проще всего понять :) Упомянуто сейчас – Tensibai