RandomizedSearchCV
всегда будет случайным образом устанавливать все указанные параметры для оценщика, независимо от таких ограничений, поскольку не реализован внутренний метод проверки того, какие комбинации имеют смысл для конкретного оценщика или нет. Поскольку gamma
и degree
просто игнорируются в сочетании с ядром linear
, это также не вызовет ошибку, и алгоритм просто будет работать со всеми параметрами, установленными каждый раз.
Если вы хотите избежать при таком поведении вы можете передать сетку параметров в виде списка словарей, определяющих, какие комбинации разрешены. Документация определяет для таких случаев:
Если указан список dicts, сначала выполняется единообразная выборка dict, а затем выборка параметра с использованием этого dict, как указано выше.
Так, например, предположим, что вы определили следующее как сетку параметров:
param_distribs = [
{
'kernel': ['rbf','poly'],
'C': reciprocal(20, 200000),
'gamma': expon(scale=1.0),
'degree': expon(scale=1.0)
},
{
'kernel': ['linear','sigmoid'],
'C': reciprocal(20, 200000)
}
]
Это позволит избежать RandomizedSearchCV
для установки gamma
и degree
, когда он выбирает словарь с ядром linear
в итерации. Напротив, если он выберет другой словарь в конкретной итерации, он также установит gamma
и degree
.