我正在尝试使用这个数据集来预测新闻在不同时间段的流行度。
该数据集包含145列(第一列是与单独文件中实际新闻故事相链接的ID,第二列至第145列是144个20分钟的时间片段,每行中的每个单元格记录了相应新闻故事的流行度)。
我已经将数据集”Facebook_Economy.csv”标准化到0到1的范围。目前,我只能将单个时间序列集输入到我的模型中(训练约100个时间片段,测试约44个时间片段)。我的目标是使用几行144个时间片段进行训练,并在其他几行上进行测试,例如,使用新闻故事1-20的时间序列数据进行训练,并在新闻故事21-30上进行测试,等等。
这是我目前将数据输入到模型中的方式:
def run(filename): series = read_csv(filename, header=0, index_col=0) repeats = 1 results = DataFrame() timesteps = 1 for i in range(len(series)): results['results'] = experiment(repeats, series.iloc[i].squeeze(), timesteps) # Where experiment(repeats, series, timesteps) print(results.describe())
此外(为了了解我的代码的其余部分是怎样的),我一直在参考这个由Jason Brownlee提供的教程来获取指导。
回答:
我不确定我是否完全理解了这个问题,但我认为我已经做过类似的事情。首先,你需要将所有特征堆叠到一个数组中。我发现这个链接非常有帮助:https://machinelearningmastery.com/how-to-develop-lstm-models-for-multi-step-time-series-forecasting-of-household-power-consumption/
这是我使用的代码:(fen_pred = 输入大小,n_output = 输出大小)
dataset_train_features = np.hstack((dataset_train,new_features_train,ssa_feature1_train,ssa_feature2_train)) dataset_train_labels = dataset_train features_set = list() labels = list() # X_train for i in range(fen_pred, len_train): if(len(dataset_train_features[i:i+n_output])<n_output): break features_set.append(dataset_train_features[i-fen_pred:i]) for i in range(fen_pred, len_train): if(len(dataset_train_labels[i:i+n_output])<n_output): break labels.append(dataset_train_labels[i:i+n_output]) X_train=np.array(features_set) y_train=np.array(labels)
(请注意,我希望预测一个时间序列上的时间步长,这就是为什么我不预测多个特征)
在你的情况下,我会编辑数组dataset_train_features,添加你需要训练模型的所有特征到这个数组中,然后重复使用这种技术来创建你的测试集。