РУКОВОДСТВО ПО ЛОГИСТИЧЕСКОЙ РЕГРЕССИИ

Как улучшить логистическую регрессию?

Раздел 3: Настройка модели в Python

Ссылка Как реализовать логистическую регрессию? Раздел 2: Построение модели на Python , прежде чем продолжить…

[10] Определение параметров поиска по сетке

param_grid_lr = {
    'max_iter': [20, 50, 100, 200, 500, 1000],                      
    'solver': ['newton-cg', 'lbfgs', 'liblinear', 'sag', 'saga'],   
    'class_weight': ['balanced']                                    
}
  • max_iter - количество итераций.
  • solver - алгоритм, используемый для оптимизации.
  • class_weight предназначен для устранения несбалансированной выборки данных.

Зачем нужен этот шаг: Для установки выбранных параметров используется поиск оптимальной комбинации. Обратившись к документации sklearn.linear_model.LogisticRegression, вы можете найти полный список параметров с описаниями, которые можно использовать в функциях поиска по сетке.

[11] Настройка гиперпараметров с использованием данных обучения

from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import GridSearchCV
logModel_grid = GridSearchCV(estimator=LogisticRegression(random_state=1234), param_grid=param_grid_lr, verbose=1, cv=10, n_jobs=-1)
logModel_grid.fit(X_train, y_train)
print(logModel_grid.best_estimator_)
...
Fitting 10 folds for each of 30 candidates, totalling 300 fits
LogisticRegression(C=1.0, class_weight='balanced', dual=False, fit_intercept=True, intercept_scaling=1, l1_ratio=None, max_iter=20, multi_class='warn', n_jobs=None, penalty='l2', random_state=1234, solver='newton-cg', tol=0.0001, verbose=0, warm_start=False)

Примечание. Общее количество подгонок составляет 300, поскольку cv определен как 10 и имеется 30 кандидатов (max_iter имеет 6 определенных параметров, solver имеет 5 определенных параметров, а class_weight имеет 1 определенный параметр). Следовательно, расчет для общего количества подходов → 10 x [6 x 5 x 1] = 300.

  • estimator - интересующая модель машинного обучения при условии, что у модели есть функция оценки; в этом случае назначенной моделью является LogisticRegression ().
  • random_state - это начальное число генератора псевдослучайных чисел, которое используется при перетасовке данных. Чтобы избежать расхождений в результатах числовой оценки модели, установите начальное значение на постоянное число для сравнения модели с моделью; в этом случае номер установлен на 1234.
  • param_grid - словарь с именами параметров (строкой) в качестве ключей и списками настроек параметров, которые можно попробовать в качестве значений; это позволяет осуществлять поиск по любой последовательности настроек параметров.
  • verbose - многословность: чем выше, тем больше сообщений; в этом случае он установлен на 1.
  • cv - генератор перекрестной проверки или итерация, в этом случае перекрестная проверка выполняется в 10 раз.
  • n_jobs - максимальное количество одновременно работающих воркеров; в этом случае он установлен в -1, что означает, что используются все процессоры.

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

[12] Прогноз по данным тестирования

y_pred = logModel_grid.predict(X_test)
print(y_pred)
...
[1 1 0 0 0 0 0 1 1 1 0 0 1 0 0 0 1 0 0 0 0 1 0 0 1 0 1 1 1 1 0 1 0 0 0 0 1 0 0 1 0 1 0 1 1 1 1 0 1 1 1 1 1 1 1 1 0 0 1 1 1 0 0 0 1 0 1 0 1 0 1 1 0 0 1 0 0 1 1 1 0 1 0 0 0 1 1 1 0 0 1 1 1 0 0 1 1 0 1 0 1 1 1 0 0 1 0 1 1 0 1 1 1 0 1 0 1 0 1 1 0 0 0 1 0 0 0 0 0 0 0 1 1 1 1 1 0 0 1 1 0 1 0 1 0 1 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 1 1 1 0 0 1 1 1 1 1 1 0 1 0 1 0 1 1 1 1 1 0 1 1 1 1 1 0 0 1 0 1 1 0 1 1 1 1 1 1 1 0 1 0 1 0]

Почему этот шаг: получение прогноза модели на основе данных тестирования для оценки точности и эффективности модели.

[13] Числовой анализ

from sklearn.metrics import confusion_matrix
print(confusion_matrix(y_test, y_pred), ": is the confusion matrix \n")
from sklearn.metrics import accuracy_score
print(accuracy_score(y_test, y_pred), ": is the accuracy score")
from sklearn.metrics import precision_score
print(precision_score(y_test, y_pred), ": is the precision score")
from sklearn.metrics import recall_score
print(recall_score(y_test, y_pred), ": is the recall score")
from sklearn.metrics import f1_score
print(f1_score(y_test, y_pred), ": is the f1 score")
...
[[85 21]
[12 90]] : is the confusion matrix 

0.8413461538461539 : is the accuracy score
0.8108108108108109 : is the precision score
0.8823529411764706 : is the recall score
0.8450704225352113 : is the f1 score

Примечание. Используя матрицу путаницы, можно извлечь истинно положительные, ложноположительные, ложноотрицательные и истинно отрицательные значения, которые помогут в вычислении показателя точности, показателя точности, показателя отзыва и показателя f1:

  • Истинно положительный = 85
  • Ложноположительный = 21
  • Ложноотрицательный = 12
  • True Negative = 90.

Зачем нужен этот шаг: чтобы оценить производительность настроенной модели классификации. Как видите, показатели точности, точности, отзыва и F1 улучшились за счет настройки модели на основе базовой модели логистической регрессии, созданной в Разделе 2.



Далее - Зачем использовать логистическую регрессию? Раздел 4: Оценка компромиссов модели