我从 sklearn.model_selection 库创建了我自己版本的 GridSearchCV 模块。我的版本包括逐个迭代每个参数,而不是寻找所有可能的组合。例如对于 SVR 模型,如果我们定义如下三个参数:
{
'gamma' : np.arange(0.0, 1.0, 0.1),
'C': np.arange(1, 10, 1),
'epsilon': np.arange(0.0, 1.0, 0.1)
}
该算法将首先找到一个最佳伽马系数(十个)。然后它转移到用给定的 gamma 值分配 C 参数。经过十次迭代后,它移动到 epsilon 并使用给定的一组 [gamma, C] 参数分配最佳 epsilon 值。这给了我们总共 30 个组合来检查而不是 1000 (10*10*10)。
我想将我的 opt_grid_search 对象导入到我的项目中,如下所示:
from own_udf_functions import show_description, opt_grid_search
对象的代码以创建将要优化的对象的动态语句开头:
exec_string = 'opt_object = ' + object_name + '(' + def_params + ')'
例如返回:
opt_object = SVR(kernel = 'rbf')
但是,当我尝试在另一个脚本中使用代码时,如下所示:
opt_grid_search(object_name, params_set, X_train, y_train, X_test, y_test,
cross_val = 2, def_params = def_params)
出现以下错误:
*File "C:\Users\Marek\Desktop\Python\Github\Kernele\Kaggle Competitions\own-udf-
functions\own_udf_functions.py", line 40, in opt_grid_search
opt_object.fit(X_train,y_train)
NameError: name 'opt_object' is not defined*
似乎 opt_grid_search 函数没有执行以下代码行:
opt_object = SVR(kernel = 'rbf')
并且实际上并未创建名为 opt_object 的对象。
我认为这与课程有关,但我想请您帮助我更好地了解此错误中实际发生的情况。我认为这是一项至关重要的知识,可以帮助我编写更多的“pythonic”代码,而不是在每个代码中定义所有函数。
其次,请让我知道这种优化是否也有意义,或者 GridSearch 是否需要遍历所有可能的组合。
我试图让这个描述尽可能简短,但是如果你想查看/需要它作为参考,我的代码可以在下面访问: