在for循环中保存scikitlearn模型

2024-06-09 14:53:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我用scikit运行了一堆模型来学习解决分类问题。在

以下是在运行过程中应执行的代码:

for model_name, classifier, param_grid, cv, cv_name in tqdm(zip(model_names, classifiers, param_grids, cvs, cv_names)):
    pipeline = Pipeline(steps=[('preprocessor', preprocessor),
                     ('classifier', classifier)])

     train_and_score_model(model_name, pipeline, param_grid, cv=cv)

我的问题是,如何保留train_and_score_model函数的输出?它返回一个cv对象,即模型。在

我试图做的是创建一个列表cv_names = ['dm_cv', 'lr_cv', 'knn_cv', 'svm_cv', 'dt_cv', 'rf_cv', 'nb_cv'],并将每个列表设置为for循环运行,但我认为这是不对的。这是for循环头中的cv_name迭代器。在

但我不认为这是对的,因为我不会设置一个字符串,而不是一个变量?就像在,我真正应该拥有的是cv_names = [dm_cv, lr_cv, knn_cv, svm_cv, dt_cv, rf_cv, nb_cv],但我不认为我能有这样的列表。在

我想到的另一种方法是将每个模型保存在字典中,其中的键将是我上面概述的列表中的元素。不过,我不知道是否可以用一个模型作为字典值。在

下面是我当前在for循环中运行的笨拙、重复的代码:

^{pr2}$

Tags: and代码name模型列表formodelpipeline
1条回答
网友
1楼 · 发布于 2024-06-09 14:53:20
  1. 您可以使用 它们的信息,即对象和参数网格:

    models_list = {'Logistic Regression': (classifier_lr, param_grid_lr),
                   'K Nearest Neighbours': (classifier_knn, param_grid_knn)}
    
  2. 迭代字典中的每个键值对并构建管道:

    model_cvs = {}
    for model_name, model_info in models_list.items():
        pipeline = Pipeline(steps=[('preprocessor', preprocessor),
                           ('classifier', model_info[0])])
        model_cvs[model_name] = train_and_score_model(model_name, pipeline, model_info[1])
    

相关问题 更多 >