You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于模型名称列表在Python中实现分层级流水线式模型训练?

基于模型名称参数的两层训练流水线实现

你说的这种分层模型训练方式本质是堆叠(Stacking)集成学习,可以通过模型名称与实例的映射关系优雅实现,下面是基于scikit-learn的简洁代码示例:

核心思路

  1. 建立模型名称到对应模型实例的映射字典
  2. 批量训练第一层模型,用它们的预测结果(分类任务推荐用概率输出)生成新特征
  3. 将新特征与原始特征拼接,作为第二层模型的输入进行训练

完整代码实现

from sklearn.svm import SVC
from sklearn.tree import DecisionTreeClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier
from sklearn.neural_network import MLPClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
import numpy as np

# 定义分层模型名称列表
model_level1 = ['svm','decision_tree','logistic_regression']
model_level2 = ['random_forest','neural_network']

# 模型名称到实例的映射,可根据需求调整模型参数
model_map = {
    'svm': SVC(probability=True),  # 开启概率输出,提供更丰富的特征信息
    'decision_tree': DecisionTreeClassifier(random_state=42),
    'logistic_regression': LogisticRegression(max_iter=1000, random_state=42),
    'random_forest': RandomForestClassifier(random_state=42),
    'neural_network': MLPClassifier(max_iter=1500, random_state=42)
}

# 加载示例数据,替换为你的数据集即可
data = load_iris()
X, y = data.data, data.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# ---------------------- 训练第一层模型,生成第二层输入特征 ----------------------
level1_train_preds = []
for model_name in model_level1:
    model = model_map[model_name]
    model.fit(X_train, y_train)
    # 用分类概率作为特征(比直接输出类别更鲁棒)
    train_proba = model.predict_proba(X_train)
    level1_train_preds.append(train_proba)

# 拼接原始特征与第一层预测特征,作为第二层训练集
X_train_level2 = np.hstack([X_train] + level1_train_preds)

# ---------------------- 训练第二层模型并评估 ----------------------
for model_name in model_level2:
    model = model_map[model_name]
    model.fit(X_train_level2, y_train)
    
    # 生成测试集的第二层输入特征
    level1_test_preds = []
    for l1_model_name in model_level1:
        l1_model = model_map[l1_model_name]
        test_proba = l1_model.predict_proba(X_test)
        level1_test_preds.append(test_proba)
    X_test_level2 = np.hstack([X_test] + level1_test_preds)
    
    # 输出模型性能
    test_acc = model.score(X_test_level2, y_test)
    print(f"第二层模型 {model_name} 测试准确率: {test_acc:.4f}")

关键细节说明

  • 分类任务中优先使用predict_proba输出概率值作为特征,相比直接输出类别标签,能保留更多模型决策的不确定性信息,提升第二层模型的学习效果
  • 如果是回归任务,将predict_proba替换为predict即可
  • 若要避免过拟合,可以用交叉验证生成第一层特征(比如sklearn.model_selection.cross_val_predict),而不是直接用训练集的预测结果
  • 可根据需求选择是否拼接原始特征,部分场景下仅用第一层模型的预测特征也能得到不错的效果

内容的提问来源于stack exchange,提问作者cloudscomputes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 10:52:58