神经网络回归中的输出不平衡问题

我正在尝试使用神经网络进行回归,以从146个输入特征预测单一输出。

我对所有输入和输出都应用了标准化处理。

训练后我监测了平均绝对误差,结果在训练、验证和测试集上的误差都高得离谱(甚至没有过拟合)。

我怀疑这是因为输出变量非常不平衡(见直方图)。从直方图可以看出,大多数样本集中在0附近,但也有一小部分样本集中在-5附近。

不平衡输出的直方图

这是模型创建代码:

input = Input(batch_shape=(None, X.shape[1]))layer1 = Dense(20, activation='relu')(input)layer1 = Dropout(0.3)( layer1)layer1 = BatchNormalization()(layer1)layer2 = Dense(5, activation='relu',               kernel_regularizer='l2')(layer1)layer2 = Dropout(0.3)(layer2)layer2 = BatchNormalization()(layer2)out_layer = Dense(1, activation='linear')(layer2)model = Model(inputs=input, outputs=out_layer)model.compile(loss='mean_squared_error', optimizer=optimizers.adam() , metrics=['mae'])

这是模型摘要:

Layer (type)                 Output Shape              Param #   =================================================================input_1 (InputLayer)         (None, 146)               0         _________________________________________________________________dense_1 (Dense)              (None, 20)                2940      _________________________________________________________________dropout_1 (Dropout)          (None, 20)                0         _________________________________________________________________batch_normalization_1 (Batch (None, 20)                80        _________________________________________________________________dense_2 (Dense)              (None, 5)                 105       _________________________________________________________________dropout_2 (Dropout)          (None, 5)                 0         _________________________________________________________________batch_normalization_2 (Batch (None, 5)                 20        _________________________________________________________________dense_3 (Dense)              (None, 1)                 6         =================================================================Total params: 3,151Trainable params: 3,101Non-trainable params: 50_________________________________________________________________

观察实际的模型预测,较大的误差主要发生在真实输出值约为-5的样本上(即那一小部分样本)。

我尝试了许多超参数配置,但误差仍然很高。

我看到许多关于在不平衡数据上进行神经网络分类的建议,但对于回归问题可以做些什么呢?我觉得奇怪的是,回归神经网络似乎没有正确学习这些数据。我做错了什么?


回答:

从你的直方图来看,似乎非零输出的情况很少见。这类似于一个分类问题,我们试图预测一个罕见的类别,从损失函数的角度来看,一个强有力的策略就是简单地猜测最常见的类别——在这种情况下,就是你的众数值0。

你应该研究一下人们是如何预测罕见事件或在某些类别稀少时如何对输入进行分类的。例如,这个讨论可能会有帮助:https://www.reddit.com/r/MachineLearning/comments/412wpp/predicting_rare_events_how_to_prevent_machine/

你可以尝试的一些策略包括

  • 删除大部分输出为零的训练样本,使你的训练数据更加平衡
  • 创建或获取更多非零的训练样本
  • 使用不同的机器学习算法(我在提供的链接中看到有人推荐使用提升方法。我想知道使用残差神经网络结构是否会得到好的结果,这在某些方面类似于提升)
  • 重新结构化或重新缩放你的数据,以增加稀有值的权重

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注