Python 使用LSTM Keras预测不在输入序列中的变量

Python 使用LSTM Keras预测不在输入序列中的变量,python,keras,lstm,Python,Keras,Lstm,假设我的数据集中有五列(A、B、C、D、E),我想通过只对A、B、D、E进行训练来构建LSTM模型(即,我想排除C) 我的问题是,我仍然想用这个模型来预测C。如果我没有用这个变量训练我的模型,有可能吗?我该怎么做 编辑1 我使用的是分类数据和数字数据,建模为时间序列。在这个特定的例子中,C是一个分类时间序列(在一个单点表示中给出) 是的,你可以!但是,字段C和其他列之间需要有相关性。如果不是,那么预测将接近随机 使用A、B、D、E作为输入(x)训练模型 将C设为(y) 将数据集分为训练、测试

假设我的数据集中有五列(A、B、C、D、E),我想通过只对A、B、D、E进行训练来构建LSTM模型(即,我想排除C)

我的问题是,我仍然想用这个模型来预测C。如果我没有用这个变量训练我的模型,有可能吗?我该怎么做

编辑1

我使用的是分类数据和数字数据,建模为时间序列。在这个特定的例子中,C是一个分类时间序列(在一个单点表示中给出)

是的,你可以!但是,字段C和其他列之间需要有相关性。如果不是,那么预测将接近随机

  • 使用A、B、D、E作为输入(x)训练模型
  • 将C设为(y)
将数据集分为训练、测试和验证

回答你的另一个问题(如果我没有用这个变量训练我的模型,也有可能吗?)

  • 不,因为模型将如何学习将4个输入字段映射到一个输出字段,在本例中它将是(C)
要了解这个问题,请将您的方法与波士顿住房进行比较


是的,你可以!但是,字段C和其他列之间需要有相关性。如果不是,那么预测将接近随机

  • 使用A、B、D、E作为输入(x)训练模型
  • 将C设为(y)
将数据集分为训练、测试和验证

回答你的另一个问题(如果我没有用这个变量训练我的模型,也有可能吗?)

  • 不,因为模型将如何学习将4个输入字段映射到一个输出字段,在本例中它将是(C)
要了解这个问题,请将您的方法与波士顿住房进行比较


我想说的是,it实现这一点的一种方法是让您的网络简单地预测C,或者将C作为标签
我一次又一次地看到这一点。不要把NN和实际的东西混淆起来。通过学习函数F,只需在给定输入X的情况下近似输出Y。这是您的NN。
在您的情况下,输出很容易是C+其他输出 根据其他输出的内容,您的网络可以聚合并获得良好的结果。很可能不会,所以你的问题在这一点上是不完整的。
你必须问自己一些问题,比如:

  • C+Ohter\u输出对给定输入有意义吗
  • 有没有一种好方法可以让我序列化C+其他_输出?例如,在描述CN输出数组元素中,有第一个K,其余N-K描述其他输出
  • C是否是一个多类问题,如果是,则其他输出是否是一个不同类型的问题,或者可能会变成一个同类型的多类问题,该问题可能与C一起收敛,或者使它们都成为多标签问题 在选择体系结构之前,您至少需要问自己一些问题。
    也就是说,不,除非你训练你的人际网络去了解A B DC之间的模式,否则它将无法预测缺失的输入

    祝你好运,

    Gabriel

    我想说的是,it实现这一点的一种方法是让您的人际网络简单地预测C或将C作为标签
    我一次又一次地看到这一点。不要把NN和实际的东西混淆起来。通过学习函数F,只需在给定输入X的情况下近似输出Y。这是您的NN。
    在您的情况下,输出很容易是C+其他输出 根据其他输出的内容,您的网络可以聚合并获得良好的结果。很可能不会,所以你的问题在这一点上是不完整的。
    你必须问自己一些问题,比如:

  • C+Ohter\u输出对给定输入有意义吗
  • 有没有一种好方法可以让我序列化C+其他_输出?例如,在描述CN输出数组元素中,有第一个K,其余N-K描述其他输出
  • C是否是一个多类问题,如果是,则其他输出是否是一个不同类型的问题,或者可能会变成一个同类型的多类问题,该问题可能与C一起收敛,或者使它们都成为多标签问题 在选择体系结构之前,您至少需要问自己一些问题。
    也就是说,不,除非你训练你的人际网络去了解A B DC之间的模式,否则它将无法预测缺失的输入

    祝你好运,

    Gabriel

    你应该详细解释每一列的含义,你有多少个序列,序列长度是什么……不,不是任何阅读意义上的,只是以一种非常迂回的方式,你为什么不想让你的模型看到你希望它预测的样本?@VeltzerDoron因为我的模型重复了目标信号的先前值,所以我试图混淆他的值。也许这不是一个好的解决方案,但我想实现这样的目标。@Ghemon我不确定我是否明白你的意思,你是说它概括得很差吗?@VeltzerDoron是的,我认为这就是问题所在。由于这个原因,我决定只根据A,B,D,E的信息来预测C。我清楚了吗?你应该详细解释每列的意思,你有多少个序列,序列长度是多少。。。
    import pandas as pd
    import numpy as np
    
    # Read dataset into X and Y
    df = pd.read_csv('YOURDATASET.csv', delim_whitespace=True, header=None)
    
    dataset = df.values
    
    
    # for example, your dataset is all loaded into a matrix (aka an array with rows of data, and each Index representing those features mentioned A B C D E)
    
    
    X = dataset[:, 0:1] + dataset[:, 3:4]
    Y = dataset[:, 2]
    
    
    #print "X: ", X
    #print "Y: ", Y
    
    
    # Define the neural network
    from keras.models import Sequential
    from keras.layers import Dense
    
    def build_nn():
        model = Sequential()
        model.add(Dense(20, input_dim=5, init='normal', activation='relu'))
        # No activation needed in output layer (because regression)
        model.add(Dense(1, init='normal'))
    
        # Compile Model
        model.compile(loss='mean_squared_error', optimizer='adam')
        return model
    
    
    # Evaluate model (kFold cross validation)
    from keras.wrappers.scikit_learn import KerasRegressor
    
    # sklearn imports:
    from sklearn.cross_validation import cross_val_score, KFold
    from sklearn.preprocessing import StandardScaler
    from sklearn.pipeline import Pipeline
    
    # Before feeding the i/p into neural-network, standardise the dataset because all input variables vary in their scales
    estimators = []
    estimators.append(('standardise', StandardScaler()))
    estimators.append(('multiLayerPerceptron', KerasRegressor(build_fn=build_nn, nb_epoch=100, batch_size=5, verbose=0)))
    
    pipeline = Pipeline(estimators)
    
    kfold = KFold(n=len(X), n_folds=10)
    results = cross_val_score(pipeline, X, Y, cv=kfold)
    
    print "Mean: ", results.mean()
    print "StdDev: ", results.std()