好吧,您可以使用这种方法进行堆叠(AFAR 这是您尝试执行的过程的调用方式):
1) 准备一个数据集,格式如下:
- 您用于拟合 4 个估计器的原始特征(从中删除目标变量)
- 在其中添加新的目标变量 - 分类输出,显示应该为该特定输入选择哪个模型。要获得它 - 在您的输入上训练您的 4 个估计器,然后用输出最接近目标的估计器的编号标记每个输入
2)训练你的堆叠器 - 在#1的那个数据集上 - 例如决策树。或任何其他能够准确预测应该用于该特定输入的估计器数量的分类器。
3) 在战斗模式下使用时 - 首先在新输入上运行 #2 中训练的堆栈器,并获取最适合此示例的估计器的 id。然后针对新的输入记录运行该估算器并获得您的响应。
希望这是有道理的。我试过了,它很好地解决了我的一个问题。
您也可以尝试使用这 4 个预测变量的某种“混合”。这是您可以采取的一种方法(由于我是工程师而不是科学家,因此我在这里对术语的使用变得有些轻浮,因此,如果有人提供了有关混合的更详尽的答案-请这样做)。
首先,回想一下用于分类的 ANN 是如何工作的——例如,如果你将 ANN 用作堆叠器,它会为你工作。您有一个读取输入值的输入层、一些隐藏层和一个带有一组神经元的输出层,每个神经元都与一个特定的类相关联。对于我们的例子,它将是 4 个神经元。在您输入输入后,4 个输出神经元中的每一个都会输出一些实际值,例如:神经元 1 - 5.4 神经元 2 - 0.3 神经元 3 - 15.3 神经元 4 - 3.3
该输出意味着 ANN 认为输入属于“第 3 类”,并且您应该对该示例使用第 3 个预测器以获得最佳结果。
但!让我们考虑概率。输入属于 4 个类别中的任何一个的概率是多少?它是 1.0(因为你只有 4 个类)。默认情况下,ANN 不知道这种情况。所以对我们来说,如果 ANN 将输出数据属于 X 类的概率而不只是一些实际值,那将是一件好事。例如,我们想获得这样的输出:
神经元 1 - 0.6 神经元 2 - 0.2 神经元 3 - 0.15 神经元 4 - 0.05
这将读作“我 60% 确定您应该使用估计器 1 作为输入,20% 确定 - 估计器 2”等。这样的目标称为“交叉熵”。用于构建 ANN 的现代库支持它,您可以告诉网络进行训练以输出这些概率。
到现在为止,我相信您已经得到了我的建议。按照我在答案开头描述的那样准备数据集,而不是训练具有交叉熵目标的 ANN 来输出概率。当你在战斗模式下运行它时:
1) 对于新输入,通过 ANN 运行并获得概率,如下所示: 神经元 1 - 0.6 神经元 2 - 0.2 神经元 3 - 0.15 神经元 4 - 0.05
2) 针对输入运行每个预测器并获得它们的预测 3) 将每个预测乘以相关概率并对结果求和:
predictor1_result*0.6 + predictor2_result*0.2 + predictor3_result*0.15 + predictor4_result*0.05
并为您提供最终结果。
为什么要这样做?首先,我们不能确定每次我们真的选择了最好的估计器,因为我们的堆叠器(在我们的例子中是 ANN)可能会出错。通过使用这种方法,我们给堆垛机一个机会来补偿可能的错误——这最大限度地减少了平均预测误差。
另外,考虑你从 ANN 得到这样的输出: 神经元 1 - 0.45 神经元 2 - 0.45 神经元 3 - 0.05 神经元 4 - 0.05
在这种情况下,对我们来说最好的选择是几乎平均预测器 1 和 2 的预测——因为 ANN 并不确定使用哪个预测器。