Я пытаюсь сделать иерархическую кластеризацию на моем наборе данных, в котором я хочу сгруппировать имена должников в 3 категории - PullRequest
0 голосов
/ 08 июня 2019

Я пытаюсь сгруппировать мои данные в 3 кластера, основываясь на прошлом поведении должника в R

. Я использую пакет dtwclust для высокотехнологичной кластеризации с использованием расстояния DTW.Мой набор данных имеет 4000 строк-лет в столбцах.Я хочу разбить на 3 группы.Это вечно бежать.Есть ли лучший способ сделать или я делаю что-то не так?

install.packages("BBmisc")
install.packages("dtwclust")
cluster_data <- data.frame(name = LETTERS, x2001 = 1:26 , x2002 = 27:52,x2003 = 52:77)
remit.norm <- BBmisc::normalize(cluster_data, method="standardize")
remit.norm <- remit.norm[-1,-1]
cluster_dtw_h <- tsclust(remit.norm, type = "h", k = 3L,  distance = "dtw", control = hierarchical_control(method = "complete"), seed = 390, preproc = NULL)

Ответы [ 2 ]

0 голосов
/ 08 июня 2019

Пара вещей.DTW стоит дорого, и если у вас есть серии 4k, иерархическая кластеризация должна выполнить 8 миллион вычислений DTW, и это займет время.Тем не менее, вы используете расстояние dtw::dtw, которое не оптимизировано для матриц перекрестных расстояний.Попробуйте использовать distance = "dtw_basic", который является многопоточной версией, включенной в dtwclust, и посмотрите help("dtw_basic") (рассмотрите возможность использования ограничения окна).Также проверьте временные эксперименты , чтобы получить представление о ожидаемом времени работы, которое, вероятно, составит от нескольких минут до часов.

0 голосов
/ 08 июня 2019

Я не понимаю, потому что для меня код выше работает почти мгновенно.Вы также можете попробовать пакет TSdist с функцией hclust, который вы можете добиться большего успеха.Надеюсь, это поможет

...