集成学习中的权重优化

在现代数据分析中,集成学习已经成为一种常态。这种能力不仅能够训练多个学习者对一组假设进行预测,而且还能提高模型的鲁棒性,并使其能够提供高度准确的预测。如果错过了,建议在继续之前阅读《用简单的英语解释集成学习的基础知识》。

在构建集成模型时,人们面临的一个常见挑战是找到最优权重。有些人努力解决这个挑战,而那些不太勇敢的人则说服自己应用简单的装袋方法,这种方法假设所有模型的权重相等,并取所有预测值的平均值。这种方法通常效果很好,因为它消除了个别模型的方差误差。然而,正如所知,分配相等的权重并不是获得最佳模型组合的最佳方法。那么,有没有其他方法呢?

在这篇文章中,解决了使用神经网络在R编程中找到集成学习者中最优权重的问题。让考虑一个简单的问题:假设在给定的(假设的)数据集上构建了3个模型。这些模型中的每一个都预测事件输出的概率。在下面的图表中:模型1、模型2和模型3是三个预测模型。它们各自都有其独特性,并且可以作为一个团队工作,以比单独的最佳模型表现得更好。

最初假设每个模型的权重为33.33%,并构建了一个集成模型。这里的挑战是以这样的方式优化这些权重w1、w2和w3,以构建一个非常强大的集成模型。传统的解决方法是什么?假设p1、p2和p3分别是三个模型的三个输出。需要优化w1、w2和w3以优化一个目标函数。让尝试以数学方式写下约束和目标函数:

# 约束: w1 + w2 + w3 = 1 p = w1 * p1 + w2 * p2 + w3 * p3 # 目标函数(最大化似然函数): 最大化(所有观测值的乘积 [(p)^(y) * (1-p)^(1-y)]) 其中 y 是观测值的响应标志 p 是通过集成模型预测的概率 p1、p2 和 p3:来自各个模型的预测概率 w1、w2 和 w3:分配给每个模型的权重

这是一个典型的单纯形优化案例。然而,随着需要装袋的模型数量庞大,每次都深入数学公式可能会让人感到压力和耗时。因此,需要一个更聪明的方法。

现在将学习如何在不涉及如此数学公式的情况下找到这些权重,使用神经网络实现。理解,神经网络实现有时可能会令人不知所措。因此,为了解决当前的情况,不会深入复杂的深度神经网络概念。基本上,神经网络的操作是找到输入变量到隐藏节点之间(以及隐藏节点到输出节点之间)的权重。目标是找到从输入节点直接到输出节点的正确权重组合。

# x 是来自不同学习者的多个预测的矩阵 # y 是所有输出标志的向量 # x_test 是在未见过的样本上的多个预测的矩阵 x <- as.matrix(prediction_table) y <- as.numeric(output_flags) nn <- dbn.dnn.train(x,y,hidden = c(1), activationfun = "sigm",learningrate = 0.2,momentum = 0.8) nn_predict <- n.predict(nn,x) nn_predict_test <- n.predict(nn,x_test)
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485