神经网络进行二分类时,输出层使用两个神经元和只使用一个神经元,模型的性能有何差异,为什么?

如图,激活函数为sigmoid [图片]
关注者
8
被浏览
11,205

3 个回答

XGBoost使用神经网络中间层输出特征的思路

上篇文章,我写了关于XGBoost的数据缺点探讨,指出了xgboost在什么情况下的预测是完全无效的: 心火试新茶:XGBoost等决策树的巨大缺陷-哪些问题上预测精度甚至不如回归,更不如神经网络?

在上篇文章中,我们详细探讨了XGBoost等决策树模型的一些缺点,例如在某些问题上预测精度甚至不如回归模型,更无法与神经网络相媲美。然而,这并不意味着我们应该完全摒弃XGBoost,因为在某些场景下它仍具有一定的优势。相反,我们可以尝试将深度神经网络(DNN)与XGBoost等决策树模型相结合,发挥各自的长处,从而提高整体的预测性能。

有很多方法可以实现DNN和XGBoost的结合。例如,我们可以利用深度神经网络在特征提取方面的强大能力。具体来说,可以将DNN作为特征提取器,将它的中间层的输出作为特征输入到XGBoost模型中与原特征表连接后进行训练和预测。这样一来,XGBoost就可以从神经网络提取到的高阶特征中进行训练和预测。这种方法不仅可以提高预测精度,还可以让我们充分利用它们各自的优势。

将DNN与XGBoost结合使用可能在某些情况下具有优势。与直接使用DNN输出进行预测相比,这种结合方案可能在以下几个方面提供改进:

  1. 鲁棒性:XGBoost和DNN具有不同的假设和训练方法,结合它们可能提高模型在不同数据分布和噪声条件下的鲁棒性。
  2. 解释性:XGBoost模型通常比深度神经网络更具解释性,因为它们基于树模型。将DNN的中间层输出用作特征输入到XGBoost模型中,可能使得整个预测过程更容易理解和解释。
  3. 模型效果:在某些情况下,这种结合方案可能提高模型性能。DNN在提取复杂特征方面非常有效,而XGBoost可能对这些特征进行更有效的组合和选择。这可能导致更好的泛化和预测准确性。

本思路的风险提醒

然而,这种结合方案并非在所有情况下都具有优势。在某些任务中,纯DNN或纯XGBoost可能已经足够好,结合它们可能不会带来显著的改进。此外,这种方法可能会导致更复杂的模型和更长的训练时间。

将DNN与XGBoost结合使用可能在某些情况下具有优势,但这取决于具体任务和数据。在实际应用中,可以尝试这种结合方案,并与单独使用DNN或XGBoost进行比较,以确定最佳模型。

实验过程

在上文: 心火试新茶:XGBoost等决策树的巨大缺陷-哪些问题上预测精度甚至不如回归,更不如神经网络?

的后半部分,我举了一个例子以说明神经网络在什么数据上比xgboost更有优势,在那个案例中,xgboost基本毫无预测能力。接下来,让我们用新的方法重新用xgboost来做一遍。

# 定义中间层模型
hidden_layer_model = Model(inputs=model.input, outputs=model.layers[3].output)
# 获取中间层的输出
hidden_output_train = hidden_layer_model.predict(X)
X_train_concat = np.concatenate((X, hidden_output_train), axis=1)
# 训练XGBoost模型