LSTM预测访问流量

python tensorflow


数据

index date uv
0 20180601/01:00 716466
1 20180601/02:00 998545
2 20180601/03:00 1172553
3 20180601/04:00 1308438
4 20180601/05:00 1464275
··· ··· ···
1441 20190630/00:00 12678528

Python代码

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential
from keras.layers import LSTM, Dense, Activation
def load_data(file_name, sequence_length=10, split=0.883):
    df = pd.read_csv(file_name, sep=',')
    datedata = pd.DataFrame(df['date'])
    #timedata = pd.DataFrame(df['time'])
    uvdata = pd.DataFrame(df['uv'])
    
    # 处理uv,float -> scaler
    uvdata_arr = np.array(uvdata).astype(float)
    #timedata_arr = np.array(timedata).astype(int)
    scaler = MinMaxScaler()
    uvdata_scaler = scaler.fit_transform(uvdata_arr)
    
    uv_tmp = []
    for i in range(len(uvdata_scaler) - sequence_length):
        uv_tmp.append(uvdata_scaler[i: i + sequence_length + 1])

    reshaped_uvdata = np.array(uv_tmp).astype('float64')
    #np.random.shuffle(reshaped_uvdata)  # 随机打乱顺序

    x = reshaped_uvdata[:, :-1] # 1-10
    y = reshaped_uvdata[:, -1]  # 11
    time = datedata[sequence_length:] # 11对应的日期,用于画图
    # 切分数据
    split_boundary = int(reshaped_uvdata.shape[0] * split)
    train_x = x[: split_boundary]
    test_x = x[split_boundary:]
    train_y = y[: split_boundary]
    test_y = y[split_boundary:]
    test_time = time[split_boundary:]
    
    return  df, x, y, train_x, train_y, test_x, test_y, test_time, scaler
def build_model():
    # input_dim是输入的train_x的最后一个维度,train_x的维度为(n_samples, time_steps, input_dim)
    model = Sequential()
    model.add(LSTM(input_dim=1, output_dim=50, return_sequences=True))
    print(model.layers)
    model.add(LSTM(100, return_sequences=False))
    model.add(Dense(output_dim=1))
    model.add(Activation('linear'))

    model.compile(loss='mse', optimizer='rmsprop')
    return model
def train_model(train_x, train_y, test_x, test_y):
    model = build_model()

    try:
        model.fit(train_x, train_y, batch_size=256, nb_epoch=300, validation_split=0.1)
        predict = model.predict(test_x)
        predict = np.reshape(predict, (predict.size, ))
    except KeyboardInterrupt:
        print(predict)
        print(test_y)
    #print(predict)
    #print(test_y)
    try:
        fig = plt.figure(1)
        plt.figure(figsize=(20, 10))
        plt.plot(predict, 'r:')
        plt.plot(test_y, 'g-')
        plt.xlabel('date')
        plt.ylabel('uv_scaler')
        plt.legend(['predict', 'true'])
    except Exception as e:
        print(e)
    return predict, test_y
if __name__ == '__main__':
    df, x, y, train_x, train_y, test_x, test_y, test_time, scaler = load_data('data/uvdata18192.csv')
    train_x = np.reshape(train_x, (train_x.shape[0], train_x.shape[1], 1))
    test_x = np.reshape(test_x, (test_x.shape[0], test_x.shape[1], 1))
    predict_y, test_y = train_model(train_x, train_y, test_x, test_y)
    predict_y = scaler.inverse_transform([[i] for i in predict_y])
    test_y = scaler.inverse_transform(test_y)
    
    n = len(test_time)
    x = range(1,n+1,4)
    
    fig = plt.figure(2)
    plt.figure(figsize=(20, 10))
    plt.plot(predict_y, 'r:')
    plt.plot(test_y, 'g-')
    plt.xticks(x,test_time['date'][::4],rotation=60)
    plt.xlabel('date')
    plt.ylabel('uv')
    plt.legend(['predict', 'true'])
Train on 1135 samples, validate on 127 samples
Epoch 1/300
1135/1135 [==============================] - 19s 17ms/step - loss: 0.0209 - val_loss: 0.0311
Epoch 2/300
1135/1135 [==============================] - 0s 371us/step - loss: 0.0144 - val_loss: 0.0297
Epoch 3/300
1135/1135 [==============================] - 0s 373us/step - loss: 0.0135 - val_loss: 0.0292
Epoch 4/300
1135/1135 [==============================] - 0s 376us/step - loss: 0.0133 - val_loss: 0.0252
Epoch 5/300
1135/1135 [==============================] - 0s 381us/step - loss: 0.0115 - val_loss: 0.0226
······
Epoch 300/300
1135/1135 [==============================] - 0s 396us/step - loss: 0.0034 - val_loss: 0.0344

预测结果

image.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,427评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,551评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,747评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,939评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,955评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,737评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,448评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,352评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,834评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,992评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,133评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,815评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,477评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,022评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,147评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,398评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,077评论 2 355

推荐阅读更多精彩内容

  • 实验笔记:网络流量预测 概述 需要对未来的网络流量大小进行预测,故进行此实验,尝试网络流量预测的可行性。该笔记完整...
    学无止境1980阅读 14,454评论 10 8
  • # Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列...
    小迈克阅读 2,989评论 1 3
  • 上个月,因为工作关系,在一处酒店封闭式办公。一起封闭的,有一个异地的同行G姐,人很好,斯文典雅,衣着得体。 封闭办...
    涓子Fiona阅读 479评论 0 50
  • 听起来好像是那么回事呢,不明真相的我,一开始还真以为程序员就是单身青年大本营,姑娘们随手一捞,就能捡个璞玉待雕的宝...
    简寻阅读 636评论 1 6
  • 原来故事的发展都是逃不过人物的基本特点,而生活中的我们,在一个又一个故事里创造新的故事,也都源于,你就是这样的人,...
    小猪parade阅读 80评论 0 0