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

      

      

      

  • 相关阅读:
    网速问题?更换国内源吧!
    NES像素风格的Raspberry
    dalao自动报表邮件2.0
    大佬要我写自动邮件报表系统
    扬帆起航
    Linux下安装与配置tomcat集群+负载均衡
    centos配置ssh和ftp服务
    tomcat中server.xml配置详解
    设置windows 宿主计算机和VMware虚拟机共享文件夹
    Redhat6 yum 安装与配置
  • 原文地址:https://www.cnblogs.com/fadedlemon/p/10530244.html
Copyright © 2011-2022 走看看