Скачать книгу

образом, при минимальном значении функции стоимости в обоих случаях достигается максимизация вероятности принадлежности объекта к положительному классу для «положительных» объектов и минимизация вероятности для «отрицательных» объектов. По-другому логистический классификатор называется классификатором максимизации энтропии (maximum-entropy classification – MaxEnt).

      Как и в случае с линейной регрессией, минимизация функции стоимости достигается с помощью алгоритма градиентного спуска (gradient descent), но также применяются Conjugate gradient [[36]], BFGS, L-BFGS или lbfgs [[37]].

      Логистический классификатор может быть применен и в отношении нескольких классов. В этом случае для каждого класса классификатор настраивается отдельно. Класс, к которому принадлежит новый объект, вычисляется расчетом значений всех функций гипотез и выбором из них максимального значения miaxhθ(i)(x), где i – номер класса. Другими словами, объект принадлежит к тому классу, функция гипотезы которого максимальна.

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

      Интересно, что производная функции стоимости логистической регрессии ровно такая же, как и производная функции стоимости линейной регрессии (вывод см., например, в [[38]]). Следовательно, алгоритм градиентного спуска будет работать так же, как и для линейной регрессии (формула 1.5), с тем отличием, что значение функции гипотезы будет вычисляться по формуле 2.8.

      Пример. Построим линейный классификатор на основе логистической регрессии. Вначале сгенерируем набор данных и разделим его на тренировочное и тестовое множества:

      from sklearn.datasets import make_moons, make_circles, make_classification

      from sklearn.model_selection import train_test_split

      dataset = make_circles(noise=0.2, factor=0.5, random_state=1)

      X_D2, y_D2 = dataset

      plt.figure(figsize=(9,9))

      plt.scatter(X_D2[:,0],X_D2[:,1],c=y_D2,marker='o',

            s=50,cmap=ListedColormap(['#FF0000','#00FF00']))

      X_train, X_test, y_train, y_test = train_test_split(X_D2, y_D2, test_size=.4, random_state=42)

      В результате получим распределение данных, показанное на рисунке 1.3.

      Вызовем необходимые библиотеки и методы:

      import matplotlib.pyplot as plt

      import numpy as np

      from sklearn.metrics import confusion_matrix, classification_report

      from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score

      Последние две строки необходимы для оценки точности работы классификатора (см. раздел «Оценка качества методов ML»).

      Разработаем логистическую функцию logisticFunction(X,theta) и функцию, обеспечивающую оценку объекта на основе предсказанного значения гипотезы, – logRegPredictMatrix(h,threshold). Как показано выше, функция гипотезы принимает значение от 0 до 1. Для того чтобы получить оценку принадлежности объекта к классу (1 – «положительный», 0 – «отрицательный»), необходимо для каждого значения гипотезы вычислить номер класса («предсказать») по правилу predicted = 0 If h <threshold и predicted = 1 If h >= threshold. Обычное значение порога threshold=0.5.

      Функция, вычисляющая значения коэффициентов логистической регрессии первого порядка:

      def logisticRegressionByNumpy(X,y):

         m=y.size

         X=np.concatenate((np.ones([m,1]),X), axis=1)

         theta=np.array(np.random.rand(X.shape[1]))

         h=logisticFunction(X,theta)

         alpha=0.05

         iterations=1500

         lambda_reg=0.01

         for

Скачать книгу


<p>36</p>

Martin Fodslette Møller. A scaled conjugate gradient algorithm for fast supervised learning // Neural Networks. – 1993. – Vol. 6. – Issue 4. – P. 525–533.

<p>37</p>

Dong C. Liu, Jorge Nocedal. On the limited memory BFGS method for large scale optimization // Mathematical Programming. – 1989. – Vol. 45. – Issue 1–3. – P. 503–528.

<p>38</p>

Derivative of Cost Function for Logistic Regression. – https://medium.com/mathematics-behind-optimization-of-cost-function/derivative-of-log-loss-function-for-logistic-regression-9b832f025c2d