Чтобы понять мою проблему, вам понадобится весь набор данных: https://pastebin.com/82paf0G8
Предварительная обработка: У меня был список заказов и 696 уникальных номеров элементов, и я хотел кластеризоватьих, в зависимости от того, как часто каждая пара предметов заказывается вместе.Я рассчитал для каждой пары предметов количество встречаемости в пределах одного и того же порядка.Т.е. наибольшее количество вхождений составило 489 между двумя предметами.Затем я «вычислил» сходство / корреляцию: Частота / «максимальная частота всех пар» (489).Теперь у меня есть набор данных, который я загрузил.
Сходство / корреляция: Я не знаю, является ли мой подход сходства лучшим в этом случае.Я также попробовал что-то под названием «коэффициент / индекс Жакара», но получил почти такие же результаты.
Набор данных: Набор данных содержит номера материалов V1 и V2.и N - это корреляция между двумя номерами материалов между 0 - 1.
С помощью другого мне удалось создать матрицу расстояний и использовать кластеризацию PAM.
Почему кластеризация PAM? Специалист по данным предлагает следующее: у вас более 95% пар без информации, это делает все эти материалы на одном расстоянии, а один кластер - очень рассеянным.Эта проблема может быть решена с использованием алгоритма PAM, но все же у вас будет очень концентрированная группа.Другим решением является увеличение веса на расстояниях, отличных от одного.
Задача 1: Матрица только 567x567.Я думаю, что для кластеризации мне нужна полная матрица 696x696, хотя многие из них являются нулями.Но я не уверен.
Проблема 2: Кластеризация работает не очень хорошо.Я получаю очень концентрированные кластеры.Многие элементы сгруппированы в первом кластере.Кроме того, в зависимости от того, как вы проверяете кластеры PAM, мои результаты кластеризации плохие.Это связано с анализом сходства?Что еще я должен использовать?Это связано с тем, что 95% данных являются нулями?Должен ли я заменить нули на что-то еще?
Весь код и результаты:
#Suppose X is the dataset
df <- data.table(X)
ss <- dcast(rbind(df, df[, .(V1 = V2, V2 = V1, N)]), V1~V2, value.var = "N")[, -1]
ss <- ss/max(ss, na.rm = TRUE)
ss[is.na(ss)] <- 0
diag(ss) <- 1
Теперь с использованием кластеризации PAM
dd2 <- as.dist(1 - sqrt(ss))
pam2 <- pam(dd2, 4)
summary(as.factor(pam2$clustering))
Но я получаю очень концентрированные кластеры, как:
1 2 3 4
382 100 23 62