为了账号安全,请及时绑定邮箱和手机立即绑定

在 for 循环中保存 scikit-learn 模型

在 for 循环中保存 scikit-learn 模型

暮色呼如 2021-12-09 10:48:40
我正在使用 scikit-learn 运行一堆模型来解决分类问题。这是应该完成所有运行的代码: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 循环运行。那是cv_namefor 循环头中的迭代器。我不认为那是对的,因为我不会设置字符串而不是变量吗?就像,我真正应该拥有的是cv_names = [dm_cv, lr_cv, knn_cv, svm_cv, dt_cv, rf_cv, nb_cv],但我不认为我可以拥有这样的列表。我想到的另一种方法是将每个模型保存在字典中,其中的键是我上面概述的列表中的元素。我不知道我是否可以将模型作为字典值。这是我目前在 for 循环中运行的笨重、重复的代码:pipeline = Pipeline(steps=[('preprocessor', preprocessor),                 ('classifier', classifier_dm)])dm_cv = train_and_score_model('Dummy Model', pipeline, param_grid_dm)pipeline = Pipeline(steps=[('preprocessor', preprocessor),                     ('classifier', classifier_lr)])lr_cv = train_and_score_model('Logistic Regression', pipeline, param_grid_lr)pipeline = Pipeline(steps=[('preprocessor', preprocessor),                     ('classifier', classifier_knn)])knn_cv = train_and_score_model('K Nearest Neighbors', pipeline, param_grid_knn)pipeline = Pipeline(steps=[('preprocessor', preprocessor),                     ('classifier', classifier_svm)])svm_cv = train_and_score_model('Support Vector Machine', pipeline, param_grid_svm)pipeline = Pipeline(steps=[('preprocessor', preprocessor),                     ('classifier', classifier_dt)])dt_cv = train_and_score_model('Decision Tree', pipeline, param_grid_dt)
查看完整描述

1 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

您可以创建一个字典,其中包含分类器名称及其信息(即对象和参数网格)的映射:


models_list = {'Logistic Regression': (classifier_lr, param_grid_lr),

               'K Nearest Neighbours': (classifier_knn, param_grid_knn)}

遍历字典中的每个键值对并构建您的管道:


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])


查看完整回答
反对 回复 2021-12-09
  • 1 回答
  • 0 关注
  • 181 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信