Многомерная векторная кластеризация с помощью dbscans OPTICS в R
Я пытаюсь кластеризовать матрицу слов по их семантической корреляции с алгоритмом ОПТИКА.
У меня есть такая матрица:
Я хочу видеть каждую строку как вектор (~260 измерений) и кластеризовать термины, которые находятся ближе всего друг к другу.
Мой код до сих пор:
require("dbscan")
require("readxl")
list <- read_excel(choose.files())
list_only_colnames <- read_excel(choose.files())[1]
Matrix<- matrix(unlist(as.double(list$Column2)),266,266,TRUE)
list_only_colnames <- unlist(list_only_colnames)
colnames(Matrix) <- list_only_colnames
rownames(Matrix) <- list_only_colnames
### run OPTICS
res <- optics(Matrix, eps = 10, minPts = 0,4)
res
Вопросы
- Как мне показать имена строк, когда дело доходит до кластеризации?
- Как мне установить количество кластеров в первую очередь?
1 ответ
ОПТИКА не имеет фиксированного количества кластеров. Это не к-значит.
Вместо этого он управляется данными: вы выбираете кластеры на основе долин на графике, которые соответствуют плотным участкам. Если есть только одна плотная область, то все может быть только одним кластером. Некоторые данные просто не имеют нескольких кластеров.
Поскольку ваши входные данные выглядят как матрица сходства, я не думаю, что каждая строка считается вектором объектов. Это вносит предвзятость в ваши данные. Вместо этого используйте dist=1-sim здесь как предварительно вычисленную матрицу расстояний.