Подбор параметров для логистической регрессии

Подскажите, пожалуйста, как для доработать код ниже, чтобы для логистической регрессии подобрать два любых гиперпараметра в цикле?

model = LogisticRegression(random_state=12345, solver='liblinear', class_weight='balanced')
scores = cross_val_score(model,features_train, target_train, cv=5, scoring='f1')
final_score = sum(scores)/len(scores)
print('Средняя оценка качества модели:', final_score)

Ответы (2 шт):

Автор решения: CrazyElf

Делаете цикл (или несколько вложенных циклов) с перебором гиперпараметров и запоминаете значение скора и гиперпараметров в список. Потом просто берёте максимум (для f1 вроде бы чем больше, тем скор лучше):

score_list = []
for hyperparam1 in (...):
    for hyperparam2 in (...):
        #
        # здесь ваш код, использующий hyperparam1 и hyperparam2
        # в качестве параметров модели и вычисляющий final_score
        #
        score_list.append((final_score, hyperparam1, hyperparam2))
print(max(score_list))

В итоге у вас напечатается максимальный достигнутый скор и значение гиперпараметров при этом скоре. Но вообще для sanity check я бы посмотрел несколько лучших значений и параметров:

print(sorted(score_list, reverse=True)[:3])

Так то есть прямо целые библиотеки, которые подбирают гиперпараметры. И в sklearn есть несколько методов подбора гиперпараметров.

→ Ссылка
Автор решения: elderberry17

Для подбора гиперпараметров действительно существуют уже реализованные в sklearn и других библиотеках методы. Например, GridSearchCV, который берет алгоритм и сетку возможных параметров для него в виде словаря, перебирает варианты на кросс-валидации с cv фолдами и выбирает лучший алгоритм, отталкиваясь от метрики scoring

Пример работы с GridSearchCV (https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html):

from sklearn.model_selection import GridSearchCV 
model = lr(random_state=12345, solver='liblinear',class_weight='balanced')
parameters = {'solver': ['newton-cg', 'lbfgs', 'liblinear', 'sag', 'saga']}

grid_clf = GridSearchCV(model, parameters, cv=5, scoring='f1')
grid_clf.fit(features_train, target_train)

print(grid_clf.best_estimator_)
print(grid_clf.best_params_)
print(grid_clf.best_score_)

О гиперпараметрах логистической регрессии иожно почитать в документации (https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html)

Также бывает любопытно попробовать RandomizedSearchCV, который берет лишь часть комбинаций параметров, соответственно, работает гораздо быстрее (https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.RandomizedSearchCV.html)

→ Ссылка