Настройка гиперпараметров SVM с использованием GridSearchCV

avatar
IronMaiden
8 августа 2021 в 22:39
169
1
1

Я пытаюсь гипернастроить классификатор машины опорных векторов, чтобы точно предсказать классы, которые имеют более высокую степень перекрытия. Цель состоит в том, чтобы получить точное значение C, которое будет примерно 7,568787, которое разделит классы

Часть кода, связанная с этим, выглядит следующим образом:

from sklearn.svm import SVC
from scipy.stats import loguniform
from sklearn.model_selection import GridSearchCV, train_test_split
from sklearn.calibration import CalibratedClassifierCV

parameters = {"C": loguniform(1e-6, 1e+6)}

grid = GridSearchCV(estimator=CalibratedClassifierCV(SVC(kernel = 'rbf', gamma = 'scale', decision_function_shape='ovr', class_weight=None),method='sigmoid', cv=5), param_grid=parameters, refit = True, verbose = 3)

grid.fit(X_train, Y_train)

Однако, когда я пытаюсь запустить код, я получаю следующую ошибку:

ValueError: Parameter grid for parameter (C) needs to be a list or numpy array, but got (<class 'scipy.stats._distn_infrastructure.rv_frozen'>). Single values need to be wrapped in a list with one element.
Источник

Ответы (1)

avatar
kodkirurg
8 августа 2021 в 22:53
0

loguniform возвращает a

<scipy.stats._distn_infrastructure.rv_frozen по адресу 0x1c890037a60>

Вы можете использовать это так:

loguniform(1e-6, 1e+6).rvs(#number of samples you want)

.rvs(size): случайные выборки из распределения

РЕДАКТИРОВАТЬ Пример с конвейером

pipeline = make_pipeline(
    CountVectorizer(stop_words="english"),
    TfidfTransformer(),
    DecisionTreeClassifier(),
)

params = {
        'decisiontreeclassifier__max_depth': (1,5,10,50,250,500,1000,5000),
}

gridSearch_decisiontree = GridSearchCV(pipeline, params, cv=3, iid=False, n_jobs=-1)
gridSearch_decisiontree.fit(X, Y)
IronMaiden
8 августа 2021 в 23:12
0

параметры = {"C": loguniform(1e-6, 1e+6).rvs(1000000)} возвращает это: ValueError: Неверный параметр C для оценщика CalibratedClassifierCV(base_estimator=SVC(), cv=5). Проверьте список доступных параметров с помощью `estimator.get_params().

kodkirurg
8 августа 2021 в 23:16
0

Вы просто передаете ему параметр, который вы называете C (он не знает, что это такое). Как правило, вам также нужно добавить имя перед ним. Проверить мои изменения