【问题标题】:Handling imbalanced time series data处理不平衡的时间序列数据
【发布时间】:2026-02-13 14:40:01
【问题描述】:

拥有传感器的时间序列数据:

+----+----------+----------+------+
|day |Feature 1 |Feature 2 |target|
+----+----------+----------+------+
|0   |0.2       |0.1       |0.01  |
+----+----------+----------+------+
|... until day 30

我已经建立了一个 LSTM 模型,可以根据前 7 天预测第 30 天的目标值。

model = Sequential()
model.add(LSTM(32, activation='tanh', input_shape=(num_samples, num_features))),
model.add(Dense(32, activation='relu')),
model.add(Dense(1, activation='sigmoid'))

model.compile(loss='mse', optimizer="adam", metrics=['mae', 'mse'])

模型 MSE 为 0.05,但在查看数据时,我可以看到在大多数情况下,第 30 天的目标分数在特定范围之间。所以我的模型预测大部分时间是正确的,而在出现异常时会错过(这是我想要捕捉的)。

我研究了处理带有分类问题的不平衡数据的技术,例如过采样、欠采样和 SMOTE。但是,我找不到任何关于时间序列回归问题的信息。

【问题讨论】:

    标签: machine-learning keras time-series lstm imbalanced-data


    【解决方案1】:

    我对传感器数据一无所知,但你能不能不估算丢失的数据元素?

    import numpy as np
    from sklearn.impute import SimpleImputer
    imp = SimpleImputer(missing_values=np.nan, strategy='mean')
    imp.fit([[1, 2], [np.nan, 3], [7, 6]])
    SimpleImputer()
    X = [[np.nan, 2], [6, np.nan], [7, 6]]
    print(X)
    print(imp.transform(X))
    

    结果:

    [[nan, 2], [6, nan], [7, 6]]
    
    
    [[4.         2.        ]
     [6.         3.66666667]
     [7.         6.        ]]
    

    https://scikit-learn.org/stable/modules/generated/sklearn.impute.IterativeImputer.html

    【讨论】:

    • 我想我可以,如何使用它来创建一个看起来像少数派的新时间序列?