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()
    

      

      

      

  • 相关阅读:
    Java 中常用的数据源
    Restful风格API接口开发springMVC篇
    Maven的作用到底是什么
    Java中常用的数据源
    数据库死锁问题 及 解决方法
    string中执行sql语句
    提高mysql千万级大数据SQL查询优化30条经验
    JAVA对象转换JSON
    oracle分页查询
    jdk8环境变量 jdk8图解安装 java8安装
  • 原文地址:https://www.cnblogs.com/fadedlemon/p/10530244.html
Copyright © 2011-2022 走看看