一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

時(shí)間序列深度學(xué)習(xí):狀態(tài) LSTM 模型預(yù)測(cè)太陽(yáng)黑子(下)

 龐紫成長(zhǎng)館 2018-06-15

博客專(zhuān)欄: 

https://www.cnblogs.com/xuruilong100 




5.3 預(yù)測(cè)未來(lái) 10 年的數(shù)據(jù)

我們可以通過(guò)調(diào)整預(yù)測(cè)函數(shù)來(lái)使用完整的數(shù)據(jù)集預(yù)測(cè)未來(lái) 10 年的數(shù)據(jù)。新函數(shù) predict_keras_lstm_future() 用來(lái)預(yù)測(cè)未來(lái) 120 步(或 10 年)的數(shù)據(jù)。

predict_keras_lstm_future <- function(data,
                                                            epochs = 300,                                      
                                                            ...) {        lstm_prediction <- function(data,                                                 epochs,                                
                                                ...) {                # 5.1.2 Data Setup (MODIFIED)        df <- data                # 5.1.3 Preprocessing        rec_obj <- recipe(value ~ ., df) %>%            
             step_sqrt(value) %>%            
             step_center(value) %>%            
             step_scale(value) %>%            
             prep()                df_processed_tbl <- bake(rec_obj, df)                center_history <- rec_obj$steps[[2]]$means['value']        scale_history  <- rec_obj$steps[[3]]$sds['value']                
       # 5.1.4 LSTM Plan        lag_setting  <- 120 # = nrow(df_tst)        batch_size   <- 40        train_length <- 440        tsteps       <- 1        epochs       <- epochs
                       # 5.1.5 Train Setup (MODIFIED)        lag_train_tbl <- df_processed_tbl %>%                                    mutate(                                        value_lag = lag(value, n = lag_setting)) %>%                                                    filter(!is.na(value_lag)) %>%                                                   tail(train_length)                x_train_vec <- lag_train_tbl$value_lag        x_train_arr <- array(                                    data = x_train_vec, dim = c(length(x_train_vec), 1, 1))                y_train_vec <- lag_train_tbl$value        y_train_arr <- array(                                    data = y_train_vec, dim = c(length(y_train_vec), 1))                x_test_vec <- y_train_vec %>% tail(lag_setting)        x_test_arr <- array(                                    data = x_test_vec, dim = c(length(x_test_vec), 1, 1))                        # 5.1.6 LSTM Model        model <- keras_model_sequential()        model %>%                                    layer_lstm(                                        units            = 50,                        input_shape      = c(tsteps, 1),                        batch_size       = batch_size,                                                        return_sequences = TRUE,                        stateful         = TRUE) %>%                                    layer_lstm(                                        units            = 50,                                         return_sequences = FALSE,                                                             stateful         = TRUE) %>%                        layer_dense(units = 1)                model %>%                                     compile(loss = 'mae', optimizer = 'adam')                # 5.1.7 Fitting LSTM        for (i in 1:epochs) {            model %>%                                       fit(x          = x_train_arr,                              y          = y_train_arr,                              batch_size = batch_size,                                                                  epochs     = 1,                              verbose    = 1,                              shuffle    = FALSE)                        model %>% reset_states()                                        cat('Epoch: ', i)                    }                # 5.1.8 Predict and Return Tidy Data (MODIFIED)        # Make Predictions        pred_out <- model %>%                                     predict(x_test_arr, batch_size = batch_size) %>%                                                 .[,1]                # Make future index using tk_make_future_timeseries()        idx <- data %>%                                    tk_index() %>%                                    tk_make_future_timeseries(n_future = lag_setting)                
                       # Retransform values        pred_tbl <- tibble(                                   index   = idx,                                                value   = (pred_out * scale_history center_history)^2)              
                        # Combine actual data with predictions        tbl_1 <- df %>%                                     add_column(key = 'actual')        tbl_3 <- pred_tbl %>%                                     add_column(key = 'predict')        
                        # Create time_bind_rows() to solve dplyr issue        time_bind_rows <- function(data_1,                                                      data_2,                                                      index) {            index_expr <- enquo(index)                                     bind_rows(data_1, data_2) %>%                                             as_tbl_time(index = !! index_expr)        }        ret <- list(tbl_1, tbl_3) %>%                                     reduce(time_bind_rows, index = index) %>%                                                 arrange(key, index) %>%                                                 mutate(key = as_factor(key))                                             return(ret)            }        safe_lstm <- possibly(lstm_prediction, otherwise = NA)                                 safe_lstm(data, epochs, ...) }

下一步,在 sun_spots 數(shù)據(jù)集上運(yùn)行 predict_keras_lstm_future() 函數(shù)。

future_sun_spots_tbl <- predict_keras_lstm_future(sun_spots, epochs = 300)

最后,我們使用 plot_prediction() 可視化預(yù)測(cè)結(jié)果,需要設(shè)置 id = NULL。我們使用 filter_time() 函數(shù)將數(shù)據(jù)集縮放到 1900 年之后。

future_sun_spots_tbl %>%

   filter_time('1900' ~ 'end') %>%

   plot_prediction(

       id = NULL, alpha = 0.4, size = 1.5)    

    theme(legend.position = 'bottom')    

    ggtitle(

       'Sunspots: Ten Year Forecast',

       subtitle = 'Forecast Horizon: 2013 - 2023')

結(jié)論

本文演示了使用 keras 包構(gòu)建的狀態(tài) LSTM 模型的強(qiáng)大功能。令人驚訝的是,提供的唯一特征是滯后 120 階的歷史數(shù)據(jù),深度學(xué)習(xí)方法依然識(shí)別出了數(shù)據(jù)中的趨勢(shì)。回測(cè)模型的 RMSE 均值等于 34,RMSE 標(biāo)準(zhǔn)差等于 13。雖然本文未顯示,但我們對(duì)比測(cè)試1了 ARIMA 模型和 prophet 模型(Facebook 開(kāi)發(fā)的時(shí)間序列預(yù)測(cè)模型),LSTM 模型的表現(xiàn)優(yōu)越:平均誤差減少了 30% 以上,標(biāo)準(zhǔn)差減少了 40%。這顯示了機(jī)器學(xué)習(xí)工具-應(yīng)用適合性的好處。

除了使用的深度學(xué)習(xí)方法之外,文章還揭示了使用 ACF 圖確定 LSTM 模型對(duì)于給定時(shí)間序列是否適用的方法。我們還揭示了時(shí)間序列模型的準(zhǔn)確性應(yīng)如何通過(guò)回測(cè)來(lái)進(jìn)行基準(zhǔn)測(cè)試,這種策略保持了時(shí)間序列的連續(xù)性,可用于時(shí)間序列數(shù)據(jù)的交叉驗(yàn)證。





大家都在看

2017年R語(yǔ)言發(fā)展報(bào)告(國(guó)內(nèi))

R語(yǔ)言中文社區(qū)歷史文章整理(作者篇)

R語(yǔ)言中文社區(qū)歷史文章整理(類(lèi)型篇)



    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多

    久久综合亚洲精品蜜桃| 欧美老太太性生活大片| 日韩精品中文字幕在线视频| 色丁香一区二区黑人巨大| 老司机精品福利视频在线播放| 国产精品99一区二区三区| 麻豆视传媒短视频免费观看| 国产女高清在线看免费观看| 日韩女优精品一区二区三区| 亚洲伦片免费偷拍一区| 色偷偷亚洲女人天堂观看| 国产欧美日韩精品自拍| 伊人久久青草地婷婷综合| 午夜福利国产精品不卡| 国产精品丝袜美腿一区二区| av在线免费播放一区二区| 国产精品亚洲精品亚洲| 五月激情综合在线视频| 91欧美亚洲精品在线观看| 一区二区三区免费公开| 久久热这里只有精品视频| 久热久热精品视频在线观看| 日本欧美在线一区二区三区| 欧美二区视频在线观看| 99国产精品国产精品九九| 成人精品一级特黄大片| 日本婷婷色大香蕉视频在线观看 | 国产精品久久香蕉国产线| 国产精品香蕉免费手机视频| 国产麻豆成人精品区在线观看| 伊人网免费在线观看高清版| 日韩中文字幕在线不卡一区| 欧美有码黄片免费在线视频| 日本人妻精品中文字幕不卡乱码| 久久热麻豆国产精品视频| 中文文精品字幕一区二区 | 99国产精品国产精品九九| 国产农村妇女成人精品| 亚洲国产精品无遮挡羞羞| 亚洲专区一区中文字幕| 日本精品中文字幕在线视频 |