按行划分数据帧(或numpy数组)的正确方法
Posted
技术标签:
【中文标题】按行划分数据帧(或numpy数组)的正确方法【英文标题】:correct way to divide a dataframe (or numpy array) by rows 【发布时间】:2021-06-29 23:31:24 【问题描述】:我是机器学习领域的新手,我正在研究 rnn 以对时间序列进行分类。 我正在研究这个数据集https://archive.ics.uci.edu/ml/datasets/EEG+Eye+State# 由 14 个时间序列组成,每个时间序列的步数等于 14980 我想得到的是一组恰好有 20 个时间步长的时间序列,所以一个具有形状 (749,20,14) 的 numpy 数组 其中 749 是时间序列数,20 是时间序列的时间步数,14 是每个时间步的值数。 然后将该数组输入网络进行训练。 实现这一目标的正确方法是什么?
起始数据框,最后一列包含用于对时间序列进行分类的整数
#how to divide it right?
data = arff.loadarff('./datasets/eeg_eye_state.arff')
df = pd.DataFrame(data[0])
df['eyeDetection'] = df['eyeDetection'].str.decode('utf-8')
df['eyeDetection'] = df['eyeDetection'].astype(str).astype(int)
【问题讨论】:
你搜索了吗?你发现了什么? 【参考方案1】:由于您使用的是EEG Eye State
数据集并且:
所有值均按时间顺序排列,第一个测量值位于数据顶部。
您可以使用tensorflow.keras
实用程序类中的TimeseriesGenerator
来生成时间数据批次。
from tensorflow.keras.preprocessing.sequence import TimeseriesGenerator
n_input = 20
batch_size = 749
data_input = df.drop(columns=['eyeDetection'])
data_gen = TimeseriesGenerator(data_input, df.eyeDetection, length=n_input, batch_size=batch_size)
batch_0 = data_gen[0]
x, y = batch_0
print(x.shape)
print(y.shape)
#feed possibly to a model.fit()
#model.fit(data_gen, ...)
(749, 20, 14)
(749,)
【讨论】:
以上是关于按行划分数据帧(或numpy数组)的正确方法的主要内容,如果未能解决你的问题,请参考以下文章