Кластеризация многомерного временного ряда - вопрос относительно матрицы расстояний - PullRequest
0 голосов
/ 25 апреля 2019

Я пытаюсь кластеризовать метеорологические станции, используя R. Станции предоставляют такие данные, как температура, скорость ветра, влажность и некоторые другие данные о почасовых интервалах.Я легко могу кластеризовать одномерные временные ряды, используя библиотеку tsclust, но при кластеризации многомерных рядов я получаю ошибки.

У меня есть данные в виде списка, поэтому каждый элемент списка представляет собой матрицу с данными временного ряда одной станции (переменные - это столбцы, а строки - разные временные метки).

Если я запускаю:

tsclust(data, k = 2,
                   distance = 'Euclidean',   seed = 3247, trace = TRUE)

Я получаю ошибку: Ошибка в do.call (.External, c (список (CFUN, x, y, попарно, если (! Is.function (метод)) get (метод) else метод),:не скалярное возвращаемое значение

Та же ошибка, которую я получаю, если пытаюсь вычислить только матрицу расстояний, используя

dist(data, method="euclidean")

Может быть, евклидово расстояние не может быть рассчитано для таких данных? Если да, то чторасстояния можно рассчитать?

Ответы [ 2 ]

0 голосов
/ 27 апреля 2019

Если ваши ряды имеют одинаковую длину, вы можете просто преобразовать их в вектор, а затем заново настроить размеры.Однако, как упоминал Анони-Мусс, использование евклидова расстояния с переменными, имеющими разные масштабы, может быть проблематичным, поэтому можно рассмотреть вопрос о нормализации с помощью zscore:

series <- zscore(data)
pc <- tsclust(lapply(series, as.vector), distance="Euclidean", seed=3247L, trace=TRUE)

pc@datalist <- series
# replace ncol with the actual number of columns from your data
pc@centroids <- lapply(pc@centroids, matrix, ncol=3L)
0 голосов
/ 25 апреля 2019

Возможно, вы все еще можете использовать евклидову.

Вам просто нужно реализовать его самостоятельно , потому что стандартный метод работает только для векторов, а не для матриц. Но это должно быть тривиально, чтобы реализовать себя.

Вы, вероятно, столкнетесь с проблемами масштабирования, если ваши переменные имеют разные единицы измерения и величины.

...