使用 AE 功能后 XGBoost RMSE 更高

XGBoost RMSE higher after using AE features

我有包含 9 个输入的时间序列数据,所以我想使用自动编码器来创建新特征,因为我无法再手动创建有意义的特征。我 运行 X 通过以下自动编码器

i = Input(9)
encoded = BatchNormalization()(i)
encoded = Dense(256, activation='linear')(encoded)

decoded = Dense(input_dim, name='decoded')(decoded)
x = Dense(128, activation='linear')(decoded)

x = BatchNormalization()(x)
x = Dense(9, activation='swish', name='label_output')(x)

encoder = Model(inputs=i, outputs=decoded)
autoencoder = Model(inputs=i, outputs=[decoded, x])

autoencoder.compile(optimizer=tf.keras.optimizers.Adam(.0005), loss={'decoded':'mse','label_output':'mse'})

encoder.save_weights('encoder.hdf5')

我加载编码器:

encoder = encoder.load_weights('encoder.hdf5')

encodedX = encoder.predict(X)

我将编码后的 X 拟合到 XGBRegressor 并针对 y 进行训练。它输出的 CV 分数比我根本不对 X 进行编码时的分数要高。例如,编码后的 CV = -13,而正常的 CV 为 -0.09。有人能指出我正确的方向吗?谢谢

自动编码器不添加任何特征,它们学习以非平凡的方式复制输入(即:不是通过学习恒等函数,而是通过学习解码器阶段用来生成的输入的“抽象”表示新输入)。

首先,您应该评估您的自动编码器 (AE) 的工作表现。 AE 的训练可能特别棘手,给它们太多(或太少)的容量,你最终会得到恒等函数,在这种情况下,你的模型我们将无法生成 X 的任何“好”实例,并且可以解释性能下降。

其次,即使您的 AE 看起来做得很好,它也可能会添加一些噪音(由于重建错误)或者已经学习了一些特定于您的训练集的模式,这些模式不会泛化到其他数据。

因此,您的 XGBRegressor 会间接过度拟合您的训练集。