Рубрики
Без рубрики

Логистическая регрессия в одной линии Python

Супер простой учебник о логистической регрессии в Python (Sklearn).

Автор оригинала: Chris.

Логистическая регрессия является популярным алгоритмом для задач классификации (несмотря на его имя, указывающее, что это «регрессионный» алгоритм). Он принадлежит одному из самых важных алгоритмов в космическом пространстве машины.

Основы

Давайте рассмотрим линейную регрессию. Учитывая данные тренировки, мы вычисляем строку, которая соответствует этому учебному данным, так что суммированное квадратное расстояние между линией и данные тренировок минимальны.

Эта линия может быть использована для многих вещей – например предсказать результат для невидимых входных данных X. В целом, линейная регрессия отлично подходит для прогнозирования непрерывного выходного значения Y, учитывая непрерывное входное значение x. Непрерывное значение может принимать бесконечное количество значений. Например, мы могли бы предсказать цену акций (выпуск Y), учитывая количество сообщений социальных сетей, упоминающих компанию, которая отражена ценой акций (вход в X). Цена акций непрерывна, поскольку она может принимать любые ценности 123,45 долл. США, 121,897 долл. США или 10 198,87 долл. США.

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

Прогнозирование вероятности категориальных результатов является основная мотивация для логистической регрессии.

Хотя линейная регрессия соответствует линию в тренировках, логистическая регрессия подходит для S-образной кривой, называемой «сигмовидной функцией». Почему? Поскольку линия помогает вам генерировать новое выходное значение для каждого ввода. С другой стороны, S-образная кривая помогает вам принимать двоичные решения (например, да/нет). Для большинства входных значений функция SIGMOID будет либо вернуть значение, которое очень близко к 0 или очень близко к 1. Это относительно маловероятно, что ваше заданное значение ввода генерирует значение, которое является где-то внутри.

Вот графический пример такого сценария:

Сигмовидная функция приближает вероятность того, что пациент имеет рак легких, учитывая количество сигарет, которые они курят. Эта вероятность поможет вам укрепить решение по этому вопросу: у пациента есть рак легких?

Посмотрите на следующий пример:

Есть два новых пациента (в желтом). Давайте притворяться, что мы ничего не знаем о них, кроме количества сигарет, которые они курят. Мы уже обучали нашу модель логистической регрессии (функция SIGMoid), которая возвращает значение вероятности для любого нового входного значения x. Теперь мы можем использовать соответствующие вероятности наших двух входов для прогнозирования того, имеют ли новые пациенты от рака легких или нет.

Если вероятность, заданная сигмовидной функцией, превышает 50%, модель прогнозирует «положительный рак легких», в противном случае он предсказывает «отрицательный рак легких».

Итак, как выбрать правильную функцию Sigmoid, которая наилучшим образом подходит для обучения данных?

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

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

Теперь вы используете это же вычисление вероятности для различных сигмовидных функций (немного переключая функцию SIGMoid). Из всех вычислений вы принимаете сигмоидную функцию, которая имеет «максимальную вероятность», что означает, что обеспечит данные тренировок с максимальной вероятностью.

Код

Давайте запрограммируем свой первый виртуальный документ, используя логистическую регрессию – в одной строке кода Python!

from sklearn.linear_model import LogisticRegression
import numpy as np


## Data (#cigarettes, cancer)
X = np.array([[0, "No"],
              [10, "No"],
              [60, "Yes"],
              [90, "Yes"]])


## One-liner
model = LogisticRegression().fit(X[:,0].reshape(-1,1), X[:,1])


## Result & puzzle
print(model.predict([[2],[12],[13],[40],[90]]))

Что такое выход этого кода фрагмент? Сделать предположение!

Результат

Набор меченных тренировок X состоит из четырех записей пациентов (строк) с двумя функциями (столбцы). Первый столбец содержит количество сигарет, которые пациенты курят, а второй столбец держит, в конечном итоге они пострадали от рака легких. Следовательно, существует непрерывная входная переменная и категорическая переменная вывода. Это проблема классификации!

Мы создаем модель, вызывая конструктор Logisticregression () без параметров. На этой модели мы называем функцию FIT, которая принимает два аргумента: входные значения и клавиши выходных данных (меток). Ожидается, что входные значения будут поставляться в качестве двумерного массива, где каждая строка содержит значения функций. В нашем случае у нас есть только одно значение функции, поэтому мы преобразуем наш вход в вектор столбца, используя операцию Reshape. Операция Reshape генерирует двумерный насыпчатый массив. Первый аргумент Reshape указывает количество строк, второе указывает количество столбцов. Мы заботимся о количестве столбцов, которые являются одним. Numpy автоматически определяет количество строк при использовании параметра «Tabine» -1.

Вот как данные входных тренировок (без меток) выглядит как конвертируя его с помощью операции Reshape:

[[0],
 [10],
 [60],
 [90]]

Далее мы предсказываем, имеет ли у пациента от рака легких, учитывая количество сигарет, которые они курят: 2, 12, 13, 40, 90 сигаретов.

Вот выход:

## Result & puzzle
print(model.predict([[2],[12],[13],[40],[90]]))
# ['No' 'No' 'Yes' 'Yes' 'Yes']

Модель предсказывает, что первые два пациента являются отрицательным раком легких, в то время как последние три являются положительным раком легких.

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

for i in range(20):
    print("x=" + str(i) + " --> " + str(model.predict_proba([[i]])))

    
'''
x=0 --> [[0.67240789 0.32759211]]
x=1 --> [[0.65961501 0.34038499]]
x=2 --> [[0.64658514 0.35341486]]
x=3 --> [[0.63333374 0.36666626]]
x=4 --> [[0.61987758 0.38012242]]
x=5 --> [[0.60623463 0.39376537]]
x=6 --> [[0.59242397 0.40757603]]
x=7 --> [[0.57846573 0.42153427]]
x=8 --> [[0.56438097 0.43561903]]
x=9 --> [[0.55019154 0.44980846]]
x=10 --> [[0.53591997 0.46408003]]
x=11 --> [[0.52158933 0.47841067]]
x=12 --> [[0.50722306 0.49277694]]
x=13 --> [[0.49284485 0.50715515]]
x=14 --> [[0.47847846 0.52152154]]
x=15 --> [[0.46414759 0.53585241]]
x=16 --> [[0.44987569 0.55012431]]
x=17 --> [[0.43568582 0.56431418]]
x=18 --> [[0.42160051 0.57839949]]
x=19 --> [[0.40764163 0.59235837]]
'''

Кодекс печатает для любого значения X (количество сигарет) вероятности рака легкого положительного и отрицательного отрицательного рака легких. Если вероятность первого выше, чем вероятность последнего, прогнозируемый результат – «рак легких отрицательный». Это происходит в последний раз. При курении более 12 сигарет, алгоритм классифицирует пациента, чтобы быть «положительным раком легких».

Заключение

Логистическая регрессия – алгоритм классификации (несмотря на его имя). Эта статья показывает вам все, что вам нужно знать, чтобы начать с логистической регрессии сейчас. Он предоставляет вам простой способ реализации логистической регрессии в одной строке кода Python, используя Scikit – Библиотека GRING Отказ

Если вы чувствуете себя застрявшим в Python, и вам нужно ввести следующий уровень в кодировке Python, не стесняйтесь ввести свой 100% бесплатный курс по электронной почте Python с большим количеством читовных листов, уроки Python, конкурсы кодовых конкурсов и веселья!

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

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python One-listers (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

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