Шаг 166.
Введение в машинное обучение с использованием Python. Оценка и улучшение качества модели. ... . Использование метрик оценки для отбора модели

    На этом шаге мы дадим несколько советов по использованию рассмотренных метрик.

    Мы подробно рассмотрели множество методов оценки и обсудили их применение с учетом фактических и спрогнозированных результатов.

    Однако часто нам нужно воспользоваться метриками типа AUC для отбора модели, выполняемого на основе GridSearchCV или cross_val_score(). К счастью, scikit-learn предлагает очень простой способ решения этой задачи с помощью аргумента scoring, который можно использовать как в GridSearchCV, так и в cross_val_score(). Вы можете просто задать строку с описанием необходимой метрики оценки. Допустим, мы хотим оценить качество классификатора SVM при решении задачи "девять против остальных" для набора данных digits, используя значение AUC. Чтобы поменять метрику оценки с правильности, установленной по умолчанию, на AUC, достаточно указать "roc_auc" в качестве параметра scoring:

[In 69]:
# метрика качества классификационной модели по умолчанию - правильность
print("Метрика качества по умолчанию: {}".format(
    cross_val_score(SVC(), digits.data, digits.target == 9)))
# значение параметра scoring="accuracy" не меняет результатов
explicit_accuracy = cross_val_score(SVC(), digits.data, digits.target == 9,
                                    scoring="accuracy")
print("Метрика качества явно заданная правильность: {}".format(explicit_accuracy))
roc_auc = cross_val_score(SVC(), digits.data, digits.target == 9,
                          scoring="roc_auc")
print("Метрика качества AUC: {}".format(roc_auc))

Метрика качества по умолчанию: [0.975   0.99166667 1.     0.99442897 0.98050139]
Метрика качества явно заданная правильность: [0.975   0.99166667 1.   0.99442897 0.98050139]
Метрика качества AUC: [0.99717078 0.99854252 1.     0.999828   0.98400413]

    Точно так же мы можем изменить метрику, используемую для отбора наилучших параметров в Grid-SearchCV:

[In 70]:
X_train, X_test, y_train, y_test = train_test_split(
    digits.data, digits.target == 9, random_state=0)
# задаем не самую удачную сетку параметров для иллюстрации:
param_grid = {'gamma': [0.0001, 0.01, 0.1, 1, 10]}
# используем метрику по умолчанию, то есть правильность:
grid = GridSearchCV(SVC(), param_grid=param_grid)
grid.fit(X_train, y_train)
print("Решетчатый поиск c использованием правильности")
print("Наилучшие параметры:", grid.best_params_)
print("Наилучшее значение перекр проверки (правильность)): {:.3f}".format(grid.best_score_))
print("AUC на тестовом наборе: {:.3f}".format(
    roc_auc_score(y_test, grid.decision_function(X_test))))
print("Правильность на тестовом наборе: {:.3f}".format(grid.score(X_test, y_test)))

Решетчатый поиск c использованием правильности
Наилучшие параметры: {'gamma': 0.0001}
Наилучшее значение перекр проверки (правильность)): 0.976
AUC на тестовом наборе: 0.992
Правильность на тестовом наборе: 0.973
[In 71]:
# используем метрику качества AUC:
grid = GridSearchCV(SVC(), param_grid=param_grid, scoring="roc_auc")
grid.fit(X_train, y_train)
print("\nРешетчатый поиск с использованием AUC")
print("Наилучшие параметры:", grid.best_params_)
print("Наилучшее значение перекр проверки (AUC): {:.3f}".format(grid.best_score_))
print("AUC на тестовом наборе: {:.3f}".format(
    roc_auc_score(y_test, grid.decision_function(X_test))))
print("Правильность на тестовом наборе: {:.3f}".format(grid.score(X_test, y_test)))

Решетчатый поиск с использованием AUC
Наилучшие параметры: {'gamma': 0.01}
Наилучшее значение перекр проверки (AUC): 0.998
AUC на тестовом наборе: 1.000
Правильность на тестовом наборе: 1.000

    Когда использовалась правильность, был выбран параметр gamma=0.0001, тогда как при использовании AUC был выбран gamma=0.01. В обоих случаях правильность перекрестной проверки соответствует правильности на тестовом наборе. Однако использование AUC позволила найти настройку параметра, оптимальную с точки зрения AUC и даже с точки зрения правильности.

    Наиболее важными значениями параметра scoring для классификации являются:

    Для регрессии, наиболее часто используемыми значениями являются:

    Полный список поддерживаемых аргументов вы можете найти, ознакомившись с документацией или взглянув на словарь SCORERS в модуле metrics.scorer:

[In 72]:
from sklearn.metrics import SCORERS
print("Доступные объекты scorer:\n{}".format(sorted(SCORERS.keys())))

Доступные объекты scorer:
['accuracy', 'adjusted_mutual_info_score', 'adjusted_rand_score', 'average_precision', 
'balanced_accuracy', 'completeness_score', 'explained_variance', 'f1', 'f1_macro', 
'f1_micro', 'f1_samples', 'f1_weighted', 'fowlkes_mallows_score', 'homogeneity_score', 
'jaccard', 'jaccard_macro', 'jaccard_micro', 'jaccard_samples', 'jaccard_weighted', 
'max_error', 'mutual_info_score', 'neg_brier_score', 'neg_log_loss', 
'neg_mean_absolute_error', 'neg_mean_absolute_percentage_error', 'neg_mean_gamma_deviance', 
'neg_mean_poisson_deviance', 'neg_mean_squared_error', 'neg_mean_squared_log_error', 
'neg_median_absolute_error', 'neg_root_mean_squared_error', 'normalized_mutual_info_score', 
'precision', 'precision_macro', 'precision_micro', 'precision_samples', 'precision_weighted', 
'r2', 'rand_score', 'recall', 'recall_macro', 'recall_micro', 'recall_samples', 
'recall_weighted', 'roc_auc', 'roc_auc_ovo', 'roc_auc_ovo_weighted', 'roc_auc_ovr', 
'roc_auc_ovr_weighted', 'top_k_accuracy', 'v_measure_score']

    Архив блокнота со всеми вычислениями, выполненными на 132-166 шагах, можно взять здесь.

    На следующем шаге мы рассмотрим выводы и перспективы.




Предыдущий шаг Содержание Следующий шаг