Есть ли способ использовать GridSearchCV или любую другую встроенную функцию sklearn, чтобы найти лучшие гиперпараметры для классификатора OneClassSVM?
Что я сейчас делаю, так это сам выполняю поиск, используя разделение поезд / тест следующим образом:
Гамма и числовые значения определяются как:
gammas = np.logspace(-9, 3, 13)
nus = np.linspace(0.01, 0.99, 99)
Функция, которая исследует все возможные гиперпараметры и находит лучшие из них:
clf = OneClassSVM()
results = []
train_x = vectorizer.fit_transform(train_contents)
test_x = vectorizer.transform(test_contents)
for gamma in gammas:
for nu in nus:
clf.set_params(gamma=gamma, nu=nu)
clf.fit(train_x)
y_pred = clf.predict(test_x)
if 1. in y_pred: # Check if at least 1 review is predicted to be in the class
results.append(((gamma, nu), (accuracy_score(y_true, y_pred),
precision_score(y_true, y_pred),
recall_score(y_true, y_pred),
f1_score(y_true, y_pred),
roc_auc_score(y_true, y_pred),
))
)
# Determine and print the best parameter settings and their performance
print_best_parameters(results, best_parameters(results))
Результаты хранятся в списке кортежей формы:
((гамма, числовое значение) (оценка_точности, оценка_точности, оценка_повтора, оценка_f1, оценка_рок_точности))
Чтобы найти лучшую точность, оценки и параметры f1, roc_auc, я написал свою собственную функцию:
best_parameters (результаты)