我有以下三个分类模型,其中我的数据标签为1
或0
。
- 使用一些时间序列数据的LSTM模型,输出节点为一个(即
model.add(Dense(1, activation='sigmoid'))
),所以我的输出类似于[0.1, 0.1, 0.6, 0.9, ...]
- 使用特征集1的
传统随机森林
模型 – 我使用的是sklearn的predict_proba
:所以我的输出类似于[[0.9, 0.1], [0.8, 0.2], ...]
- 使用特征集2的
传统随机森林
模型 – 我使用的是sklearn的predict_proba
:所以我的输出类似于[[0.8, 0.2], [0.9, 0.1], ...]
我想将这三个模型的预测结果结合起来,得到一个反映我的分类的概率列表。我在Stack Overflow上搜索过这个问题,但像bagging和stacking这样的建议对我来说不可行,因为我还使用了LSTM模型。
我想知道是否有其他方法可以用Python来结合这些预测概率。
如果需要,我很乐意提供更多细节。
回答:
你可以选择以下两种解决方案之一,但首先你需要使三个模型的输出表示一致,对于第二个和第三个模型,你可以使用pred_2 = [y[0] for y in pred_2]
使其看起来像第一个模型。(y[0]或y[1]取决于你第一个模型中概率的含义)。
第一个解决方案是通过计算三个列表的平均值来进行多数投票:majority_voting = [v/3.0 for v in[sum(x) for x in zip(pred_1, pred_2, pred_3)]]
第二个解决方案稍微复杂一些,你可以使用另一个深度学习模型来选择三个模型中最好的结果。你需要准备data_x
作为一个有三列的列表,每列对应一个模型的输出,data_y
是你的原始数据的相同标签,这样做可以让模型学习如何使用这三个模型来预测输出,而不仅仅是多数投票。