Машинное обучение с нуля — принципы и практика логистической регрессии!

машинное обучение

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

1. Что такое проблема классификации?

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

Результатом задачи классификации являются дискретные дискретные значения, например, установка вывода программы 1 для представления яблок и 0 для представления апельсинов. Но результат линейной регрессии, которую мы изучили ранее, непрерывен, например, прогнозирование цен на жилье, а не 0 и 1 для представления цен на жилье.

Так что помните одно: задачи классификации выдают дискретные значения, задачи линейной регрессии выдают непрерывные значения.

2. Что такое логистическая регрессия?

Логистическая регрессия, которую мы собираемся изучить сегодня, является проблемой классификации.У вас могут быть сомнения относительно «логистической регрессии».Поскольку это проблема классификации, почему она называется проблемой регрессии? Почему бы не назвать это проблемой логической классификации?

Я тоже чувствую себя немного неловко, но кто заставил мастера родиться раньше нас? Если бы мы родились раньше и изобрели этот алгоритм, возможно, его бы назвали логической классификацией, ха-ха.

Поскольку его нельзя изменить, мы можем только принять его и запомнить как проблему классификации.

3. Гипотетическая функция логистической регрессии

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

Очень просто, из определения задачи классификации и задачи линейной регрессии мы можем знать, что задача линейной регрессии выводит непрерывные значения (цены на жилье), а логистическая регрессия выводит только дискретные значения (0 1), поэтому выход модели разный, поэтому необходимо выбрать тот, который может выводить дискретнозначные функции:

впредставляет вектор признаков,представляет собой вектор параметров, который необходимо изучить.

Но в задачах классификации машинного обучения первым шагом модели, выводящей 0 или 1, обычно является определение вероятности 0 или 1, а не вывод 0 или 1 непосредственно на основе данных экземпляра.Например, вероятность того, что модель предсказывает яблоко составляет 90 %, то есть вероятность апельсина составляет 10 % (поскольку сумма вероятностей равна 1), и модель считает, что фрукт, скорее всего, будет яблоком, поэтому выведите 1, чтобы указать, что в настоящее время идентифицированный фрукт яблоко.

В соответствии с этой вероятностной характеристикой наша функция гипотезы логистической регрессии принимает обычно используемую логистическую функцию Sigmoid Function:

import numpy as np

def sigmoid(z):
    return 1 / (1 + np.exp(-z))

Используйте эту функцию в качестве гипотетической функции для логистической регрессии, чтобы ее можно было основывать на входных параметрах.выводитьвозможность, например вывод, что означает, что с вероятностью 90 % вы получите яблоко, а с вероятностью 10 % – апельсин.

В-четвертых, граница классификации логистической регрессии

В задаче классификации есть понятие классификации (Граница решения), потому что мы, наконец, хотим классифицировать данные по функции, которая отражается в системе координат — это функциональная кривая для разделения данных на две категории, например, одна яблоки, один класс апельсины.

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

мы предполагаем, что:

  • при предсказании,Яблоко
  • при предсказании,тангеринр

Как видно из изображения сигмовидной функции:

  • :существуетмежду
  • :
  • :существуетмежду

Также из-за, обратите внимание здесь, поэтому приведенное выше предположение можно заменить на:

  • при предсказании,Яблоко
  • Когда, граница классификации!
  • при предсказании,тангеринр

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

Эта картина была объяснена очень подробно Красная линия в середине - граница классификации., две стороны соответственно больше 0 и меньше 0. В практических приложениях это часто используется какобъединены для представления.

Граница классификации в этом примере — прямая линия, но на самом деле граница классификации может быть и нелинейной границей, например окружностью:

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

5. Функция стоимости и градиентный спуск

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

Из-за этого недостатка нам необходимо переопределить функцию стоимости логистической регрессии:

Функция выглядит следующим образом:

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

  • когда когда,;когдаВремягигантский;
  • когда когда,;когдаВремягигантский;

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

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

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

С функцией стоимости мы можем воспользоваться тем, что узнали ранее.Градиентный спускДавайте повторим, чтобы найти минимальное значение функции стоимости!

6. Логистическая регрессия на практике

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

6.1 Подготовка данных

Данные для классификации визуализируются следующим образом, всего классов всего 2, поэтому просто используйте прямую границу решения:

6.2 Гипотетические функции

def sigmoid(z):
    return 1 / (1 + np.exp(-z))

6.3 Функция стоимости

Вот еще представлено в векторизованном коде:

# 逻辑回归代价函数
def cost_function(theta, X, y):
    # 向量化代码
    return np.mean(-y * np.log(sigmoid(X @ theta)) - (1 - y) * np.log(1 - sigmoid(X @ theta)))

6.4 Градиентный спуск

Принцип градиентного спуска в предыдущемэта статьяЕсть вступление:

# 梯度计算
# return 梯度的一维数组
def gradient(theta, X, y):
    return (1 / len(X)) * X.T @ (sigmoid(X @ theta) - y)

6.5 Параметры тренировки

Здесь для оптимизации функции затрат (функции потерь) используются существующие методы оптимизации:

import scipy.optimize as opt

# 用 opt.minimize 来训练逻辑回归的参数
# Newton-CG 是牛顿法家族的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数
res = opt.minimize(fun = cost_function, x0 = theta, args = (X, y), method = 'Newton-CG', jac = gradient)

6.6 Прогнозирование на тренировочном наборе

# 计算 y 在训练集上的预测值
y_predict = predict(X, final_theta)

# 打印分类报告
print(classification_report(y, y_predict))

Показатели f1-score в отчете составляют 0,86 и 0,91 соответственно, что указывает на то, что результаты классификации по-прежнему очень хорошие:

6.7 Границы выходного класса

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

В ПОРЯДКЕ! Сегодня Дэнлонг поделился с вами принципом логистической регрессии и практическим программированием, вы можете много практиковаться и научиться этому как можно скорее!Полный закомментированный код в текстеВ моем репо:

GitHub.com/DL об этом/AI-N…

Увидимся в следующий раз :)

Эта статья была первоначально опубликована в общедоступной учетной записи WeChat «Denglong», в которой были опубликованы оригинальные статьи, такие как машинное обучение, программирование алгоритмов, Python, робототехника и т. Д., Отсканируйте код, чтобы следовать, и ответьте «1024», знаете ли!