Я создал свою собственную версию модуля GridSearchCV из библиотеки sklearn.model_selection. Моя версия включает в себя итерацию по каждому параметру один за другим вместо поиска всех возможных комбинаций. Например, для модели 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)
}
Алгоритм в первую очередь найдет один лучший гамма-коэффициент (из десяти). Затем он переходит к присвоению параметра C с заданным значением гаммы. После десяти итераций он перемещается в эпсилон и присваивает оптимальное значение эпсилона с заданным набором параметров [gamma, C]. Это дает нам в общей сложности 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 фактически не был создан.
Я думаю, что это связано с классами, но я хотел бы попросить вас помочь мне лучше понять, что на самом деле произошло вэта ошибка. Я думаю, что это очень важное знание, которое могло бы помочь мне написать больше «питонических» кодов вместо определения всех функций в каждом отдельном коде.
Во-вторых, пожалуйста, дайте мне знать, если такая оптимизация также имеет смыслили необходимо, чтобы GridSearch прошел через все возможные комбинации.
Я старался сделать это описание как можно более коротким, однако, если вы хотели бы видеть / нуждаться в нем для справки, мой код доступен ниже:
https://github.com/markoo26/own-udf-functions