Я хочу использовать RandomizedSearchCV в sklearn для поиска оптимальных значений гиперпараметров для классификатора опорных векторов в моем наборе данных. Я оптимизирую гиперпараметры: «Ядро», «С» и «Гамма». Однако в случае «поли» ядра я также хотел бы оптимизировать четвертый гиперпараметр, «степень» (индекс функции полиномиального ядра).
Я понимаю, что, поскольку гиперпараметр степени игнорируется, когда ядро не является "поли", я могу просто включить степень в словарь параметров, который я предоставляю для RandomizedSearchCV (как я сделал в приведенном ниже коде). Тем не менее, в идеале я хотел бы искать однородно по неполным ядрам плюс каждую степень поли ядра, т.е. я хочу, чтобы сэмпл был однородным по всем, например. [(ядро = "линейный"), (ядро = "rbf"), (ядро = "поли", степень = 2), (ядро = "поли", степень = 3)]. Поэтому мне было интересно, можно ли условно ввести гиперпараметр для настройки, например, если ядро = "поли" степень = 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
)