python - python中如何结合深度学习模型和传统机器学习模型的分类结果
问题描述
我有如下三个分类模型,其中我的数据标签是1
或0
。
- 具有一些时间序列数据的 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 中搜索了这个,但是像装袋和堆叠这样的建议对我来说是不可能的,因为我也在考虑使用 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
包含三列的 as 列表,每个模型输出的列和data_y
原始数据的相同标签,通过这样做,您可以让模型学习如何使用这三个模型来预测输出,而不仅仅是多数表决。
推荐阅读
- android - 片段中的底部导航视图,出现“必须实现 OnFragmentInteractionListener”错误
- javascript - ReactDOM.findDOMNode() 使用 React.Children 子
- java - Java - 在字符输入上使用三元运算符来获取布尔值
- c++ - 参数包构造函数在类模板中隐藏用户定义的转换
- javascript - 使用异步等待正确附加到文件的好模式是什么?
- jquery - 如何根据从 ajax 调用返回的数据动态地将选项添加到我的自动完成功能?
- ubuntu - GCE 实例崩溃后如何自动重启?
- javascript - 为什么 xmlHttpRequest.Open 仅在我输入字符串时才起作用?
- angularjs - AngularJS - 将 url 动态添加到 $sceDelegateProvider.resourceUrlWhitelist
- javascript - 原型返回我的函数而不是返回值