我想训练一个基于 LSTM 的 RNN 模型进行二元分类,为此我想使用带有 LSTM 层的张量流 keras 模型。为此,我需要测试输入和输出以及验证输入和输出,我想使用 sklearns train_test_split 生成这些输入和输出。
def prepare_data(self, satellites):
"""
Prepare time-series data for RNN.
"""
feature_sequences = []
labels = []
for sat in satellites:
if sat.manoeuvrability is not None:
# Stack the orbital parameters as time-series features (epochs will be the time dimension)
features = np.column_stack((
sat.apoapses,
sat.periapses,
sat.inclinations,
sat.mean_motions,
sat.eccentricities,
sat.semimajor_axes,
sat.orbital_energy
))
feature_sequences.append(features)
labels.append(sat.manoeuvrability)
X = np.array(feature_sequences, dtype=object)
y = np.array(labels)
return train_test_split(X, y, test_size=0.2, random_state=42)
train_test_split 返回一个 None-Value。删除参数中的 dtype=object 转换会让我得到一个
ValueError:用序列设置数组元素。所要求的 数组在 1 维之后具有不均匀的形状。检测到的 形状为 (73,) + 不均匀部分。
如果我想传递文字时间序列作为参数,如何正确形成 sklearns train_test_split 的特征向量?时间依赖性对我来说很重要,所以我真的无法通过手动将时间序列分解为平均值或其他方式来解决问题
我将你的代码简化为:
def prepare_data():
feature_sequences = []
labels = []
for i in range(10):
features = np.column_stack((2*i*5, "hello")) # wrong?
# features = (2*i*5, "hello") # correct
feature_sequences.append(features)
labels.append(i)
X = np.array(feature_sequences, dtype=object)
y = np.array(labels)
return train_test_split(X, y, test_size=0.2, random_state=42)
返回的 3D 数组中的特征分割,本不应该分割。只需用
column_stack
替换该行,生成的分割看起来会更好。