Я хочу использовать RandomizedSearchCV в sklearn для поиска оптимальных значений гиперпараметра для классификатора опорных векторов в моем наборе данных. Я оптимизирую гиперпараметры "ядро", "С" и "гамма". Однако в случае «поли» ядра я также хотел бы оптимизировать четвертый гиперпараметр «степень» (индекс функции ядра полинома).
Я понимаю, что поскольку гиперпараметр степени игнорируется, когда ядро не "poly", я мог бы просто включить степень в словарь параметров, который я предоставляю для RandomizedSearchCV (как я сделал в приведенном ниже коде). Тем не менее, в идеале я хотел бы искать равномерно по всем ядрам, не являющимся поли, плюс каждую степень по многоядерному ядру, т.е. я хочу делать выборку равномерно, например, по [(kernel = "linear"), (kernel = "rbf"), (kernel ="poly", степень = 2), (ядро = "poly", степень = 3)]. Поэтому мне было интересно, можно ли условно ввести гиперпараметр для настройки, т. Е. Если kernel = "poly" степень = np.linspace (2, 5, 4), иначе степень = 0.
У меня естьНе удалось найти пример этого в документации RandomizedSearchCV, и поэтому мне было интересно, если кто-нибудь здесь сталкивался с той же проблемой и сможет помочь. Спасибо!
from sklearn.svm import SVC
from sklearn.model_selection import RandomizedSearchCV
from sklearn.model_selection import StratifiedKFold
clf = SVC()
params = {'kernel': ['linear', 'poly', 'rbf', 'sigmoid'],
'degree': np.linspace(2, 5, 4),
'C': np.logspace(-3, 5, 17),
'gamma': np.logspace(-3, 5, 17)}
random_search = RandomizedSearchCV(
estimator=clf, param_distributions=params, n_iter=200, n_jobs=-1,
cv=StratifiedKFold(n_splits=5), iid=False
)