zoukankan      html  css  js  c++  java
  • Keras + LSTM 做回归demo 2

    接上回, 这次做了一个多元回归

    这里贴一下代码

    import numpy as np
    np.random.seed(1337)
    from sklearn.model_selection import train_test_split
    import matplotlib.pyplot as plt
    import keras
    from keras.models import Sequential
    from keras.layers import Activation
    from keras.layers import LSTM
    from keras.layers import Dropout
    from keras.layers import Dense
    import pandas as pd
    

      

    datan = 1000
    # 真实参数
    ori_weights = [5, -4, 3, -2, 1]
    colsn = len(ori_weights)
    bias = -1
    ori = np.zeros((1, colsn))
    ori[0] = np.asarray(ori_weights)
    
    # 列信息
    cols_name = [chr(65+i) for i in range(colsn)]
    X = np.zeros((colsn, datan))
    
    for i in range(colsn):
        X[i] = np.random.normal(1, 0.1, datan)
    # 真实Y
    Y = np.matmul(ori, X) + bias + np.random.normal(-0.1, 0.1, (datan, ))
    
    # 数据预览
    df = pd.DataFrame(X.T, columns=cols_name)
    df['Y'] = df.apply(lambda row: np.matmul(ori, [row[k] for k in df.columns] )[0]+bias, axis=1)
    df['target'] = Y[0]
    df.head()
    

      

    X_train, X_test, Y_train, Y_test = train_test_split(X.T, Y.T, test_size=0.33, random_state=42)
    

      

    neurons = 128          
    activation_function = 'tanh'  
    loss = 'mse'                  
    optimizer="adam"              
    dropout = 0.01 
    batch_size = 12          
    epochs = 200
    

      

    model = Sequential()
    
    model.add(LSTM(neurons, return_sequences=True, input_shape=(1, colsn), activation=activation_function))
    model.add(Dropout(dropout))
    model.add(LSTM(neurons, return_sequences=True, activation=activation_function))
    model.add(Dropout(dropout))
    model.add(LSTM(neurons, activation=activation_function))
    model.add(Dropout(dropout))
    model.add(Dense(output_dim=1, input_dim=1))
    

      

    model.compile(loss=loss, optimizer=optimizer)
    

      

    epochs = 2001
    for step in range(epochs):
        cost = model.train_on_batch(X_train[:, np.newaxis], Y_train)
        if step % 30 == 0:
            print(f'{step} train cost: ', cost)
    

      

    # test
    print('Testing ------------')
    cost = model.evaluate(X_test[:, np.newaxis], Y_test, batch_size=40)
    print('test cost:', cost)
    

      

    # plotting the prediction
    Y_pred = model.predict(X_test[:, np.newaxis])
    #
    sdf = pd.DataFrame({'test':list(Y_test.T[0]), 'pred':list(Y_pred.T[0])})
    sdf.sort_values(by='test', inplace=True)
    #
    plt.scatter(range(len(Y_test)), list(sdf.test))
    plt.plot(range(len(Y_test)), list(sdf.pred), 'r--')
    plt.show()
    

      

      

      

  • 相关阅读:
    mongo备份&恢复
    logstash参数配置
    elasticsearch索引自动清理
    Linux将公网ip映射到局域网ip
    普通用户创建ssh无密码访问
    软考介绍
    安装ffmpeg
    Hadoop实战-Flume之自定义Sink(十九)
    Hadoop实战-Flume之自定义Source(十八)
    Hadoop实战-Flume之Sink Load-balancing(十七)
  • 原文地址:https://www.cnblogs.com/fadedlemon/p/10530244.html
Copyright © 2011-2022 走看看