python - 集成技术
问题描述
我想为多个模型分配权重并制作一个集成模型。我想将我的输出用作新机器学习算法的输入,该算法将学习正确的权重。但是当我得到这样的输出时,如何将多个模型的输出作为新 ML 算法的输入
preds1=model1.predict_prob(xx)
[[0.28054154 0.35648097 0.32954868 0.03342881]
[0.20625692 0.30749627 0.37018309 0.11606372]
[0.28362306 0.33325501 0.34658685 0.03653508]
...
preds2=model2.predict_prob(xx)
[[0.22153498 0.30271243 0.26420254 0.21155006]
[0.32327647 0.39197589 0.23899729 0.04575035]
[0.18440374 0.32447016 0.4736297 0.0174964 ]
...
如何从这 2 个或更多模型的输出中制作单个 Dataframe?
下面给出了最简单的方法,但我想将输出提供给不同的 ML 算法来学习权重。
model = LogisticRegression()
model.fit(xx_train, yy_train)
preds1 = model.predict_proba(xx_test)
model = KNeighborsClassifier(n_neighbors=5, metric='minkowski', p=2 )
model.fit(xx_train, yy_train)
preds2 = model.predict_proba(xx_test)
# Each weight is evaluated by calculating the corresponding score
for i in range(len(weights)):
final_inner_preds = np.argmax(preds1*weights[i]+ preds2*(1-weights[i]), axis=1)
scores_corr_wts[i]+= accuracy_score(yy_test, final_inner_preds)
解决方案
在 sklearn 中,您可以使用StackingClassifier。这应该符合您的需要。
创建基本模型定义的列表
base_models = [('SVC', LinearSVC(C = 1)),('RF',RandomForestClassifier(n_estimators=500))]
实例化您的元学习器
meta_model = LogisticRegressionCV()
实例化堆叠模型
stacking_model = StackingClassifier(estimators=base_models, final_estimator=meta_model, passthrough=True, cv=3)
拟合和预测
推荐阅读
- python - python pip优先顺序与index-url和extra-index-url
- javascript - 导入的 JavaScript 问题,奇怪的错误
- javascript - CSS Paint API 不适用于链接元素
- node.js - 禁用 check_yarn_integrity 的后果?
- python - TCP 服务器不向客户端返回消息
- asp.net-core - 在 Nginx 上托管时,NetCore API 给出错误代码 500
- flutter - 如何强制 ListView 不连续扩展超过其他小部件(Flutter)
- html - 如何使 iframe 容器 div 拉伸取决于 iframe 高度并考虑响应?
- angular - 如何在 Angular 下拉列表中添加自动完成功能?
- python - 如何在matplotlib中设置轴和标签之间的空间