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

如何在Colab/Jupyter中自动重启运行Notebook以遍历特征组合训练回归模型?

解决方案

方法1:用Papermill批量执行Notebook

Papermill是专门用于参数化和批量运行Jupyter Notebook的工具,完美匹配你的需求:

  1. 安装Papermill
pip install papermill
  1. 修改原Notebook添加参数入口
    在Notebook开头新增一个单元格,用# parameters注释标记为参数单元格,用来接收每次传入的特征组合:
# parameters
feature_set = ['feature1', 'feature2']  # 默认值,Papermill会自动替换该参数
  1. 编写批量执行脚本
    创建run_batch.py脚本,遍历特征组合列表,调用Papermill执行原Notebook并传入参数:
import papermill as pm

# 定义所有待测试的特征组合
feature_combinations = [
    ['feature1'],
    ['feature1', 'feature2'],
    ['feature1', 'feature3', 'feature4'],
    # 可添加更多组合
]

# 循环执行每个特征组合
for idx, features in enumerate(feature_combinations):
    output_notebook = f'result_feature_set_{idx}.ipynb'
    pm.execute_notebook(
        input_path='your_regression_notebook.ipynb',  # 你的原Notebook路径
        output_path=output_notebook,
        parameters={'feature_set': features}
    )
    print(f'特征组合{idx}执行完成,结果已保存至{output_notebook}')

运行该脚本后,每个特征组合会对应一个独立的结果Notebook,里面记录了该组合下的模型预测性能。

方法2:核心逻辑模块化(更高效,推荐)

重跑整个Notebook效率偏低,更优方案是将数据处理、模型训练、评估逻辑封装成函数,直接在Notebook内遍历特征组合:

  1. 封装通用训练评估函数
    在Notebook中新增单元格,编写可复用的函数:
import pandas as pd
from sklearn.model_selection import train_test_split
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

def evaluate_features(features, df, target_col='y'):
    # 准备数据集
    X = df[features]
    y = df[target_col]
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
    
    # 构建并训练回归模型
    model = Sequential([
        Dense(64, activation='relu', input_shape=(len(features),)),
        Dense(32, activation='relu'),
        Dense(1)
    ])
    model.compile(optimizer='adam', loss='mse')
    model.fit(X_train, y_train, epochs=20, batch_size=32, verbose=0)
    
    # 评估模型性能
    test_mse = model.evaluate(X_test, y_test, verbose=0)
    return {'feature_set': features, 'test_mse': test_mse}
  1. 遍历特征组合收集结果
    在另一个单元格中执行循环,批量评估所有特征组合:
# 假设你已加载好数据集df
# df = pd.read_csv('your_dataset.csv')

feature_combinations = [
    ['feature1'],
    ['feature1', 'feature2'],
    ['feature1', 'feature3'],
    # 可添加更多组合
]

# 存储所有评估结果
results = []
for features in feature_combinations:
    res = evaluate_features(features, df)
    results.append(res)
    print(f'特征组合{features}的测试MSE: {res["test_mse"]:.4f}')

# 转换为DataFrame方便查看和分析
results_df = pd.DataFrame(results)
print(results_df)

这种方式无需重复执行Notebook的初始化、数据加载步骤,速度更快,结果管理也更便捷。

方法3:用nbconvert结合脚本(无第三方依赖)

如果不想安装额外库,可以用Jupyter自带的nbconvert工具实现:

  1. 将Notebook转为Python脚本
jupyter nbconvert --to script your_regression_notebook.ipynb
  1. 修改脚本添加参数接收逻辑
    在生成的.py脚本开头添加参数解析代码:
import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--features', nargs='+', required=True)
args = parser.parse_args()
feature_set = args.features

随后将脚本中所有用到特征列表的地方替换为feature_set。

  1. 编写遍历执行脚本
    创建run_loop.py脚本,循环调用生成的Python脚本:
import subprocess

feature_combinations = [
    ['feature1'],
    ['feature1', 'feature2'],
    # 可添加更多组合
]

for features in feature_combinations:
    cmd = ['python', 'your_regression_notebook.py', '--features'] + features
    subprocess.run(cmd, check=True)
    print(f'特征组合{features}执行完成')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 20:10:15