[Искусственный интеллект плиты] Машинное обучение 017 — Используйте GridSearch для поиска наилучшей комбинации параметров

машинное обучение искусственный интеллект Python scikit-learn

[Искусственный интеллект плиты] Машинное обучение 017 — Используйте GridSearch для поиска наилучшей комбинации параметров

(Библиотеки Python и номера версий, используемые в этой статье: Python 3.5, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2)

в предыдущей статье ([Искусственный интеллект печи] Машинное обучение 012 — Построение модели оценки транспортного средства с использованием случайного леса и метода оптимизации и улучшения модели), мы используем проверочную кривую для оптимизации гиперпараметров модели, но сложно использовать проверочную кривую для оптимизации значений нескольких параметров одновременно, можно оптимизировать только один параметр и один параметр для получения оптимальное значение каждого параметра, но иногда очень хорошая модель, возможно, что когда параметр А принимает оптимальное значение, параметр В не обязательно является оптимальным значением, так что метод проверки кривой имеет свои недостатки.

Представленный здесь метод использования GridSearch для поиска наилучшей комбинации параметров позволяет избежать вышеуказанных недостатков, а GridSearch может оптимизировать значения нескольких различных параметров одновременно.


1. Подготовьте набор данных

Подготовка набора данных и статьи ([Stove AI] Машинное обучение 014 — Построение модели нелинейной классификации с помощью SVM) абсолютно одинаковы и здесь повторяться не будут.


2. Используйте функцию GridSearch для поиска оптимальных параметров

Чтобы использовать функцию GridSearch для поиска оптимальных параметров, необходимо сначала определить значения параметров-кандидатов для поиска, а затем определить показатели оценки модели, чтобы оценить превосходство модели. , GridSearch автоматически рассчитает возможные значения различных параметров, чтобы получить наилучшую комбинацию параметров и максимизировать индекс оценки.

from sklearn import svm, grid_search, cross_validation
from sklearn.metrics import classification_report

parameter_grid = [  {'kernel': ['linear'], 'C': [1, 10, 50, 600]}, # 需要优化的参数及其候选值
                    {'kernel': ['poly'], 'degree': [2, 3]},
                    {'kernel': ['rbf'], 'gamma': [0.01, 0.001], 'C': [1, 10, 50, 600]},
                 ]

metrics = ['precision', 'recall_weighted'] # 评价指标好坏的标准

for metric in metrics:
    print("Searching optimal hyperparameters for: {}".format(metric))

    classifier = grid_search.GridSearchCV(svm.SVC(C=1), 
            parameter_grid, cv=5, scoring=metric)
    classifier.fit(train_X, train_y)

    print("\nScores across the parameter grid:") 
    for params, avg_score, _ in classifier.grid_scores_:  # 打印出该参数下的模型得分
        print('{}: avg_scores: {}'.format(params,round(avg_score,3)))

    print("\nHighest scoring parameter set: {}".format(classifier.best_params_))

    y_pred =classifier.predict(test_X) # 此处自动调用最佳参数??
    print("\nFull performance report:\n {}".format(classification_report(test_y,y_pred)))

------------------ потерять --------- вывод ------------ ---------- ----------

Searching optimal hyperparameters for: precision
Scores across the parameter grid:
{'C': 1, 'kernel': 'linear'}: avg_scores: 0.809
{'C': 10, 'kernel': 'linear'}: avg_scores: 0.809
{'C': 50, 'kernel': 'linear'}: avg_scores: 0.809
{'C': 600, 'kernel': 'linear'}: avg_scores: 0.809
{'degree': 2, 'kernel': 'poly'}: avg_scores: 0.859
{'degree': 3, 'kernel': 'poly'}: avg_scores: 0.852
{'C': 1, 'gamma': 0.01, 'kernel': 'rbf'}: avg_scores: 1.0
{'C': 1, 'gamma': 0.001, 'kernel': 'rbf'}: avg_scores: 0.0
{'C': 10, 'gamma': 0.01, 'kernel': 'rbf'}: avg_scores: 0.968
{'C': 10, 'gamma': 0.001, 'kernel': 'rbf'}: avg_scores: 0.855
{'C': 50, 'gamma': 0.01, 'kernel': 'rbf'}: avg_scores: 0.946
{'C': 50, 'gamma': 0.001, 'kernel': 'rbf'}: avg_scores: 0.975
{'C': 600, 'gamma': 0.01, 'kernel': 'rbf'}: avg_scores: 0.948
{'C': 600, 'gamma': 0.001, 'kernel': 'rbf'}: avg_scores: 0.968

Highest scoring parameter set: {'C': 1, 'gamma': 0.01, 'kernel': 'rbf'}

Full performance report:

---- precision recall f1-score support
0 0.75 1.00 0.86 36
1 1.00 0.69 0.82 39
avg / total 0.88 0.84 0.84 75

Searching optimal hyperparameters for: recall_weighted

Scores across the parameter grid:
{'C': 1, 'kernel': 'linear'}: avg_scores: 0.653
{'C': 10, 'kernel': 'linear'}: avg_scores: 0.653
{'C': 50, 'kernel': 'linear'}: avg_scores: 0.653
{'C': 600, 'kernel': 'linear'}: avg_scores: 0.653
{'degree': 2, 'kernel': 'poly'}: avg_scores: 0.889
{'degree': 3, 'kernel': 'poly'}: avg_scores: 0.884
{'C': 1, 'gamma': 0.01, 'kernel': 'rbf'}: avg_scores: 0.76
{'C': 1, 'gamma': 0.001, 'kernel': 'rbf'}: avg_scores: 0.507
{'C': 10, 'gamma': 0.01, 'kernel': 'rbf'}: avg_scores: 0.907
{'C': 10, 'gamma': 0.001, 'kernel': 'rbf'}: avg_scores: 0.658
{'C': 50, 'gamma': 0.01, 'kernel': 'rbf'}: avg_scores: 0.92
{'C': 50, 'gamma': 0.001, 'kernel': 'rbf'}: avg_scores: 0.72
{'C': 600, 'gamma': 0.01, 'kernel': 'rbf'}: avg_scores: 0.933
{'C': 600, 'gamma': 0.001, 'kernel': 'rbf'}: avg_scores: 0.902

Highest scoring parameter set: {'C': 600, 'gamma': 0.01, 'kernel': 'rbf'}

Full performance report:

---- precision recall f1-score support
0 1.00 0.92 0.96 36
1 0.93 1.00 0.96 39
avg / total 0.96 0.96 0.96 75

--------------------------------Заканчивать----------------- --------------------

##################резюме################################

1. Используйте GridSearchCV в GridSearch для поиска наилучшей комбинации параметров, но вам необходимо указать параметры-кандидаты и индикаторы оценки модели.

2. Используйте функцию classifier.best_params_ для прямого вывода наилучшей комбинации параметров, что удобно для прямого вызова параметров в будущем

3. Функция classifier.predict предназначена для автоматического вызова наилучшей комбинации параметров для прогнозирования, чтобы получить прогнозируемое значение модели на тестовом наборе или обучающем наборе.

##########################################################

Если вы хотите использовать лучшие параметры для построения модели SVM, вы можете использовать следующий код для достижения:

best_classifier=svm.SVC(C=600,gamma=0.01,kernel='rbf') # 上面的full performance report的确使用的是最佳参数组合
best_classifier.fit(train_X, train_y)
y_pred =best_classifier.predict(test_X)
print("\nFull performance report:\n {}".format(classification_report(test_y,y_pred)))

Результат точно такой же, как полный отчет о производительности выше.


Примечание. Эта часть кода была загружена в (мой гитхаб), добро пожаловать на скачивание.

Использованная литература:

1. Классические примеры машинного обучения Python, Пратик Джоши, перевод Тао Цзюньцзе и Чена Сяоли.