如何传递 sklearns train_test_split 实际数据系列而不是单个值作为输入参数?

问题描述 投票:0回答:1

我想训练一个基于 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 的特征向量?时间依赖性对我来说很重要,所以我真的无法通过手动将时间序列分解为平均值或其他方式来解决问题

python numpy tensorflow keras scikit-learn
1个回答
0
投票

我将你的代码简化为:

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
替换该行,生成的分割看起来会更好。

© www.soinside.com 2019 - 2024. All rights reserved.