【问题标题】:How to combine the classification results of deep learning models and traditional machine learning models in pythonpython中如何结合深度学习模型和传统机器学习模型的分类结果
【发布时间】:2020-10-14 05:50:33
【问题描述】:

我有如下三个分类模型,其中我的数据标签是10

  • 具有一些时间序列数据的 lstm 模型具有一个节点作为输出(即model.add(Dense(1, activation='sigmoid')))所以我的输出类似于[0.1, 0.1, 0.6, 0.9, ...]
  • traditional random forest 具有功能集 1 - 我正在使用 sklearn 的 predict_proba:所以我的输出类似于 [[0.9, 0.1], [0.8, 0.2], ...]
  • traditional random forest 具有功能集 2 - 我正在使用 sklearn 的 predict_proba:所以我的输出类似于 [[0.8, 0.2], [0.9, 0.1], ...]

我想结合我的三个模型的预测得到一个反映我的分类的概率列表。我在 SO 中搜索了这个,但是像 bagging 和 stacking 这样的建议对我来说是不可能的,因为我也在考虑使用 lstm 模型。

我想知道是否有其他方法可以在 python 中组合这些预测概率。

如果需要,我很乐意提供更多详细信息。

【问题讨论】:

    标签: python machine-learning scikit-learn deep-learning classification


    【解决方案1】:

    您可以采用两种解决方案之一,但首先您需要使三个模型的输出表示相同,因此对于第二个和第三个模型 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 原始数据具有相同的标签,通过这样做,您可以让模型学习如何使用这三个模型进行预测输出而不是多数投票。

    【讨论】:

    • 非常感谢,我对你的第二个想法很感兴趣。但是,由于我对深度学习模型的新输入只有 3 个值,因此我无法使用 LSTM。您会建议哪种类型的深度学习模型? :)
    • 一个简单的神经网络就足够了model = Sequential([ Dense(10, activation='relu', input_shape=(3,)), Dense(5, activation='relu'), Dense(1, activation='softmax'), ]),因为问题不是太难,你需要避免过度拟合
    • 嗨,由于我的问题是二进制分类,我只是想知道最后一层应该是sigmoid还是softmax? :)
    • Softmax 对两个类提供与sigmoid 相同的效果。一般来说Softmaxsigmoid在多类中的泛化。为了安全起见,您可以使用sigmoid
    猜你喜欢
    • 2022-12-10
    • 1970-01-01
    • 2020-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    • 2018-11-04
    • 2019-06-16
    相关资源
    最近更新 更多