Настройка функций счетчика в Scikit-Learn для GridSearch: подробное руководство

Scikit-learn – популярная библиотека машинного обучения на Python, предоставляющая широкий набор инструментов для построения и оценки моделей. Одной из его ключевых функций является GridSearchCV, которая позволяет настраивать гиперпараметры путем исчерпывающего поиска по указанной сетке параметров. Хотя scikit-learn предоставляет несколько предопределенных функций оценки, он также позволяет создавать и настраивать свои собственные функции оценки. В этой статье мы рассмотрим различные методы создания и настройки функций оценки для использования с GridSearchCV.

Метод 1. Использование предварительно определенных функций оценки
Метод 2. Создание пользовательской функции оценки с нуля
Метод 3. Изменение существующей функции оценки
Метод 4. Включение нескольких показателей в функцию оценки
Метод 5. Взвешивание показателей в функции оценки

Давайте углубимся в каждый метод на примерах кода.

Метод 1: использование предопределенных функций оценки
Scikit-learn предоставляет широкий спектр предопределенных функций оценки, таких как точность, точность, полнота и оценка F1. Их можно напрямую использовать в качестве функций оценки в GridSearchCV. Вот пример:

from sklearn import datasets, model_selection, svm
# Load the dataset
iris = datasets.load_iris()
# Define the parameter grid for GridSearchCV
param_grid = {'C': [1, 10, 100], 'kernel': ['linear', 'rbf']}
# Create a GridSearchCV object with predefined scoring function
grid_search = model_selection.GridSearchCV(svm.SVC(), param_grid, scoring='accuracy')
# Fit the model
grid_search.fit(iris.data, iris.target)

Метод 2: создание пользовательской функции оценки с нуля
Вы можете создать пользовательскую функцию оценки, определив функцию Python, которая принимает истинные метки и прогнозируемые метки в качестве входных данных и возвращает оценку. Вот пример пользовательской функции оценки, которая вычисляет среднюю абсолютную ошибку (MAE):

from sklearn.metrics import make_scorer, mean_absolute_error
from sklearn.model_selection import GridSearchCV
from sklearn.linear_model import LinearRegression
# Define the custom scorer function
def custom_mae_scorer(y_true, y_pred):
    return -mean_absolute_error(y_true, y_pred)  # Negate the MAE to maximize it
# Load the dataset
X, y = ...
# Define the parameter grid for GridSearchCV
param_grid = ...
# Create a GridSearchCV object with the custom scorer function
grid_search = GridSearchCV(LinearRegression(), param_grid, scoring=make_scorer(custom_mae_scorer))
# Fit the model
grid_search.fit(X, y)

Метод 3: изменение существующей функции оценки
В некоторых случаях вам может потребоваться изменить существующую функцию оценки в соответствии с вашими конкретными потребностями. Scikit-learn предоставляет функцию make_scorer, которая позволяет вам обернуть существующий счетчик и применить изменения. Вот пример изменения функции оценки accuracy, чтобы наказывать за ложноположительные результаты больше, чем за ложноотрицательные:

from sklearn.metrics import make_scorer, accuracy_score
from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import RandomForestClassifier
# Define the modified scorer function
def modified_accuracy_scorer(y_true, y_pred):
    penalty = 2  # Penalty factor for false positives
    modified_y_true = y_true.copy()
    modified_y_true[y_true == 0] *= penalty
    return accuracy_score(modified_y_true, y_pred)
# Load the dataset
X, y = ...
# Define the parameter grid for GridSearchCV
param_grid = ...
# Create a GridSearchCV object with the modified scorer function
grid_search = GridSearchCV(RandomForestClassifier(), param_grid, scoring=make_scorer(modified_accuracy_scorer))
# Fit the model
grid_search.fit(X, y)

Метод 4: включение нескольких показателей в функцию оценки
Вы можете создать функцию оценки, которая включает в себя несколько показателей оценки. Вот пример пользовательской функции оценки, которая вычисляет оценку F1 и точность:

from sklearn.metrics import make_scorer, f1_score, accuracy_score
from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC
# Define the custom scorer function
def custom_scorer(y_true, y_pred):
    f1 = f1_score(y_true, y_pred)
    acc = accuracy_score(y_true, y_pred)
    return (f1 + acc) / 2  # Average of F1-score and accuracy
# Load the dataset
X, y = ...
# Define the parameter grid for GridSearchCV
param_grid = ...
# Create a GridSearchCV object with the custom scorer function
grid_search = GridSearchCV(SVC(), param_grid, scoring=make_scorer(custom_scorer))
# Fit the model
grid_search.fit(X, y)

Метод 5: взвешивание показателей в функции оценки
Вы можете создать функцию оценки, которая присваивает разные веса различным показателям оценки в зависимости от их важности. Вот пример пользовательской функции оценки, которая придает более высокий вес точности, чем полноте:

from sklearn.metrics import make_scorer, precision_score, recall_score
from sklearn.model_selection import GridSearchCV
from sklearn.ensemble import RandomForestClassifier
# Define the custom scorer function
def weighted_scorer(y_true, y_pred):
    precision = precision_score(y_true, y_pred)
    recall = recall_score(y_true, y_pred)
    weight = 0.7  # Weight for precision
    return (weight * precision + (1 - weight) * recall)  # Weighted average of precision and recall
# Load the dataset
X, y = ...
# Define the parameter grid for GridSearchCV
param_grid = ...
# Create a GridSearchCV object with the custom scorer function
grid_search = GridSearchCV(RandomForestClassifier(), param_grid, scoring=make_scorer(weighted_scorer))
# Fit the model
grid_search.fit(X, y)

В этой статье мы рассмотрели различные методы создания и настройки функций оценки в scikit-learn для использования с GridSearchCV. Мы рассмотрели использование предопределенных функций оценки, создание пользовательских функций оценки с нуля, изменение существующих функций оценки, включение нескольких показателей и взвешивание метрик. Используя эти методы, вы можете точно настроить процесс оценки и оптимизации модели в соответствии с вашими конкретными требованиями.

Не забудьте выбрать соответствующую функцию оценки в зависимости от вашей проблемной области и целей. Поэкспериментируйте с различными вариантами и комбинациями, чтобы найти лучшую стратегию оценки для ваших задач машинного обучения.