Я хочу закодировать временные ряды в виде изображений с помощью метода градиентно-угловых полей (GAF) с целью применения сверточных нейронных сетей (CNN). Я не нашел функцию R, которая реализует это до сих пор.
Для Python я нашел следующее:
https://github.com/pecu/Series2GAF
Я тоже пытался написать функцию, но не уверен, что она работает правильно.
Это статья, предлагающая метод GAF:
https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=6&ved=2ahUKEwjS5a2PxJjiAhUPIlAKHVj4BBMQFjAFegQIABAC&url=https%3A%2F%2Fwww.aaai.org%2Focs%2Findex.php%2FWS%2FAAAIW15%2Fpaper%2FviewFile%2F10179%2F10251&usg=AOvVaw0uFl_9ZuLwCRvF_BouOxnV
Вот мой код с примером значений временного ряда, хранящихся в x:
х - это просто вектор с измеренными значениями, упорядоченными по дате, например,
library('tidyverse')
library('reshape2')
library('ggplot2')
x <- tibble(values = sin(-10:6))
Функция для копирования уравнений 1, 2 и 3 этой статьи:
gramian_angular_field_custom <- function(x){
# Delete column names
names(x) <- NULL
# Convert to matrix
x <- x %>% as.matrix()
# Normalize
x <- (x - max(x) + (x - min(x))) / (max(x) -min(x))
x <- x %>% as.matrix()
# Calculate phi for polar coordinates
x <- x %>%
as_tibble() %>%
mutate(V1 = acos(V1)) %>%
as.matrix() %>%
t()
# Create matrix by column repeat
x <- x %>%
t() %>%
as_tibble() %>%
replicate(n = length(x), .) %>%
bind_cols()
# Calculate sum of phi
x <- x + as_tibble(t(x))
x <- x %>% as_tibble()
# Calculate cosinus
x <- x %>% cos()
x <- x %>% as.matrix()
colnames(x) <- NULL
# convert matrix to tibble in long format
x <- x %>%
melt() %>%
as_tibble()
return(x)
}
А затем примените эту функцию и нанесите получившееся изображение:
x %>%
gramian_angular_field_custom() %>%
ggplot(aes(Var2, Var1)) +
geom_raster(aes(fill = value)) +
scale_fill_gradientn(colours = c('blue', 'green', 'yellow', 'red')) +
theme(legend.position = "none",
axis.title.x = element_blank(),
axis.title.y = element_blank())
Полученное изображение не является осесимметричным диагонали, как должно быть, или я ошибаюсь? Любые предложения по математике оцениваются как подсказка для функции R, которая реализует это.
Большое спасибо