На этом шаге мы рассмотрим организацию такого поиска.
Мы можем реализовать простой решетчатый поиск с помощью вложенных циклов for по двум параметрам, обучая и оценивая классификатор для каждой комбинации:
[In 17]: # реализация наивного решетчатого поиска from sklearn.svm import SVC X_train, X_test, y_train, y_test = train_test_split( iris.data, iris.target, random_state=0) print("Размер обучающего набора: {} размер тестового набора: {}".format( X_train.shape[0], X_test.shape[0])) best_score = 0 for gamma in [0.001, 0.001, 0.1, 1, 10, 100]: for C in [0.001, 0.01, 0.1, 1, 10, 100]: # для каждой комбинации параметров обучаем SVC svm = SVC(gamma=gamma, C=C) svm.fit(X_train, y_train) # оцениваем качество SVC на тестовом наборе score = svm.score(X_test, y_test) # если получаем наилучшее значение правильности, сохраняем значение и параметры if score > best_score: best_score = score best_parameters = {'C': C, 'gamma': gamma} print("Наилучшее значение правильности: {:.2f}".format(best_score)) print("Наилучшие значения параметров: {}".format(best_parameters)) Размер обучающего набора: 112 размер тестового набора: 38 Наилучшее значение правильности: 0.97 Наилучшие значения параметров: {'C': 100, 'gamma': 0.001}
На следующем шаге мы рассмотрим опасность переобучения параметров и проверочный набор данных.