【问题标题】:Should tune_model be Called After compare_models in PyCaret?应该在 PyCaret 中的 compare_models 之后调用 tune_model 吗?
【发布时间】:2022-06-11 22:13:14
【问题描述】:

使用pycaret,可以调用compare_models()函数,得到最适合我们数据的模型。这看起来像这样,

# load dataset
from pycaret.datasets import get_data
diabetes = get_data('diabetes')

# init setup
from pycaret.classification import *
clf1 = setup(data = diabetes, target = 'Class variable')

# compare models
best = compare_models()

pycaret 还带有一个tune_model() 函数,它允许我们调整给定模型的超参数。这将如下所示,

# load dataset
from pycaret.datasets import get_data 
boston = get_data('boston') 

# init setup
from pycaret.regression import * 
reg1 = setup(data = boston, target = 'medv')

# train model
dt = create_model('dt')

# tune model
tuned_dt = tune_model(dt)

我想知道的是,我们是否应该在从compare_models() 获得的最佳模型上调用tune_model() 函数?还是这个模型的超参数已经调好?

本质上,我想知道我是否应该执行以下操作以获得最佳模型,

# load dataset
from pycaret.datasets import get_data
diabetes = get_data('diabetes')

# init setup
from pycaret.classification import *
clf1 = setup(data = diabetes, target = 'Class variable')

# compare models
best = compare_models()

# tune model
tuned_dt = tune_model(dt)

我在文档中找不到明确提到的这一点。

【问题讨论】:

    标签: python automl pycaret


    【解决方案1】:

    compare_model 不执行超参数调整。它只是为每个模型类型调用create_model。在所有型号上调用tune_model 的成本会很高。

    如果您想从多个模型中进行调整和模型选择,一种方法是从 compare_models 返回前 N 个模型,然后单独调整它们,例如

    # Select top N models (defaults only, without tuning)
    N = 5
    best_N = compare_model(n_select = N)
    
    # Then tune these N best models
    tuned_models = [tune_model(model) for model in best_N]
    

    【讨论】:

      最近更新 更多