Оригинальная ссылка:tecdat.cn/?p=23449
Первоисточник:Публичный аккаунт Tuoduan Data Tribe
В этой статье ответы на вопросы о логистическом регрессии: как он отличается от линейной регрессии, как я могу соответствовать и оценить эти модели с функцией GLM () в R и более?
Логистическая регрессия — это метод машинного обучения из области статистики. Это мощный статистический метод моделирования биномиальных результатов с одной или несколькими независимыми переменными. Он измеряет взаимосвязь между категориальной зависимой переменной и одной или несколькими независимыми переменными путем оценки вероятностей с использованием логистической функции, которая является логистическим распределением.
Этот учебник R проведет вас через простую реализацию логистической регрессии.
- Сначала вы изучите теорию логистической регрессии: вы узнаете больше об отличиях от линейной регрессии и о том, как выглядит модель логистической регрессии. Вы также найдете несколько индикаторов и порядковую логистическую регрессию.
- Затем вы займетесь логистической регрессией в R: вы не только изучите набор данных, но и подберете модель логистической регрессии с помощью мощной функции glm() в R, оцените результаты и устраните переобучение.
Совет: если вы хотите поднять свои навыки линейной регрессии на новый уровень, подумайте также о том, чтобы пройти наш языковой курс R!
Регрессионный анализ: введение
Логистическая регрессия — это метод регрессионного анализа. Регрессионный анализ — это набор статистических процедур, которые можно использовать для оценки отношений между переменными. В частности, вы используете этот набор методов для моделирования и анализа связи между зависимой переменной и одной или несколькими независимыми переменными. Регрессионный анализ помогает понять, как изменяется типичное значение зависимой переменной, когда одна независимая переменная корректируется, а другие переменные фиксируются.
Как вы уже читали, существуют различные методы регрессии. Вы можете отличить их, взглянув на три вещи: количество независимых переменных, тип зависимой переменной и форму линии регрессии.
Линейная регрессия
Линейная регрессия является одним из наиболее широко известных методов моделирования. Короче говоря, это позволяет вам использовать линейную зависимость для прогнозирования (среднего) значения Y для заданного значения X с помощью прямой линии. Эта линия называется «линией регрессии».
Следовательно, модель линейной регрессии y=ax+b. Модель предполагает, что зависимая переменная y является количественной. Однако во многих случаях зависимая переменная является качественной или, другими словами, категориальной. Например, пол является качественным и принимает значение мужского или женского пола.
Прогнозирование качественного ответа на наблюдение можно назвать классификацией этого наблюдения, потому что оно включает присвоение наблюдению категории или ранга. С другой стороны, методы, часто используемые для классификации, сначала предсказывают вероятность каждого класса качественных переменных в качестве основы для классификации.
Линейная регрессия не может предсказать вероятности. Например, если вы используете линейную регрессию для моделирования бинарной зависимой переменной, результирующая модель может не ограничивать прогнозируемые значения Y значениями 0 и 1. Здесь вступает в игру логистическая регрессия, вы можете получить оценку вероятности, которая отражает вероятность того, что событие произойдет.
Логистическая логистическая регрессия
Логистическая регрессия — это пример метода классификации, который можно использовать для прогнозирования качественного ответа. В частности, логистическая регрессия моделирует вероятность принадлежности пола к определенной категории.
Это означает, что если вы хотите выполнить гендерную классификацию, где пол респондента принадлежит к одной из двух категорий, мужскому или женскому, вы будете использовать модель логистической регрессии для оценки вероятности того, что пол принадлежит к определенной категории.
Например, вероятность данного пола с длинными волосами можно записать как: .
Значение Pr(gender=female|длинношерстный) (сокращенно p(длинношерстный)) будет находиться в диапазоне от 0 до 1. Что ж, для любого заданного значения длинношерстности можно предсказать пол.
Учитывая, что X — это независимая переменная, а Y — зависимая переменная, как следует моделировать связь между p(X)=Pr(Y=1|X) и X? Модель линейной регрессии выражает эти вероятности как .
Проблема с этим подходом заключается в том, что каждый раз, когда линия подгоняется к двоичной зависимой переменной, закодированной как 0 или 1, мы в принципе всегда можем предсказать p(X) 1.
Чтобы избежать этой проблемы, вы можете использовать логистическую функцию для моделирования p(X), результат которой находится между 0 и 1 для всех значений X.
Логарифмическая функция всегда дает сигмовидную кривую, поэтому независимо от значения X мы получим разумный прогноз.
Вышеупомянутое уравнение также может быть реорганизовано как:
количество
называется отношением шансов и может принимать любое значение от 0 до ∞. Значения шансов, близкие к 0 и ∞, указывают на очень низкую и очень высокую вероятность p(X) соответственно.
Логарифмируя обе части приведенного выше уравнения, вы можете получить.
Левая сторона называется Logit. В модели логистической регрессии добавление одной единицы X изменяет логарифм на β0. Но независимо от значения X, если β1 положительное, то увеличение X будет коррелировать с увеличением P(X), а если β1 отрицательное, то увеличение X будет коррелировать с уменьшением P(X).
Коэффициенты β0 и β1 неизвестны и должны быть оценены по существующим обучающим данным. Для логистической регрессии вы можете использовать максимальную вероятность, мощную статистическую технику. Давайте еще раз взглянем на ваш пример гендерной классификации.
Вы ищете оценки β0 и β1, вставляете эти оценки в модель для p(X), получая число, близкое к 1 для всех женских выборок, и число, близкое к 0 для всех неженских выборок.
Его можно формализовать с помощью математического уравнения, называемого функцией правдоподобия.
Оценки β0 и β1 выбираются так, чтобы максимизировать эту функцию правдоподобия. Как только коэффициенты будут оценены, вы можете просто рассчитать вероятность быть женщиной в любом случае длинных волос. В целом, максимальное правдоподобие — очень хороший способ согласования нелинейных моделей.
Полиномиальная логистическая регрессия
До сих пор это руководство было сосредоточено только на биномиальной логистической регрессии, потому что вы классифицируете экземпляры как мужские или женские. Модель полиномиальной логистической регрессии — это простое расширение модели биномиальной логистической регрессии, которое можно использовать, когда исследовательская переменная имеет более двух номинальных (неупорядоченных) категорий.
В полиномиальной логистической регрессии исследовательские переменные кодируются как несколько переменных 1/0. Во всех категориях, кроме одной, есть переменная, поэтому, если есть M категорий, будет M-1M-1 фиктивных переменных. Фиктивная переменная для каждой категории имеет значение 1 в своей категории и значение 0 во всех остальных категориях. Существует одна категория, эталонная категория, которой не нужна собственная фиктивная переменная, поскольку она однозначно идентифицируется всеми другими переменными, равными 0.
Затем множественная логистическая регрессия оценила отдельную модель бинарной логистической регрессии для каждой фиктивной переменной. Результатом является бинарная модель логистической регрессии M-1M-1. Каждая модель передает влияние предикторов на вероятность успеха для этой категории по сравнению с эталонной категорией.
Порядковая логистическая регрессия
В дополнение к логистической регрессии с несколькими ответвлениями у вас есть порядковая логистическая регрессия, которая является еще одним расширением бинарной логистической регрессии. Порядковая регрессия используется для прогнозирования зависимой переменной с «упорядоченными» несколькими категориями и независимыми переменными. Вы уже видели это в названии этого типа логистической регрессии, потому что «упорядоченный» означает «порядок категорий».
Другими словами, он используется для анализа связи зависимой переменной (с несколькими порядковыми уровнями) с одной или несколькими независимыми переменными.
Например, вы проводите опрос клиентов, чтобы оценить их удовлетворенность нашим недавно выпущенным продуктом. Ваша задача — задать собеседнику вопрос, и его ответ будет где-то между удовлетворенным-удовлетворенным или неудовлетворенным-очень неудовлетворенным. Чтобы дать хорошее обобщение ответа, вы включаете в ответ ряд оценок, таких как «Очень неудовлетворен», «Неудовлетворен», «Нейтрально», «Удовлетворен», «Очень удовлетворен». Это поможет вам соблюдать естественный порядок категорий.
Логистическая регрессия в R с glm
В этом разделе вы изучите пример бинарной логистической регрессии, вы решите эту проблему с помощью пакета ISLR, который предоставит вам набор данных, функция glm() обычно используется для подбора обобщенных линейных моделей и будет используется для подбора обобщенных линейных моделей Модель логистической регрессии.
Скачать данные
Первое, что нужно сделать, это установить и загрузить пакет ISLR, в котором есть все наборы данных, которые вы хотите использовать.
В этом руководстве вы будете использовать набор данных фондового рынка. Этот набор данных показывает ежедневную доходность фондового индекса S&P 500 в период с 2001 по 2005 год.
Исследуйте данные
Давайте исследовать. name() полезен для просмотра того, что находится во фрейме данных, head() позволяет просмотреть первые несколько строк, а summary() также полезен.
Функция summary() дает вам простую сводку каждой переменной во фрейме данных. Вы можете видеть объем, цену закрытия и направление. Вы будете использовать «Вверх/вниз» в качестве зависимой переменной, потому что она показывает, пошел ли рынок вверх или вниз по сравнению с предыдущим днем.
визуализация данных
Визуализация данных — это, пожалуй, самый быстрый и полезный способ обобщить и понять ваши данные. Вы начнете с изучения только числовых переменных.
Гистограмма представляет собой гистограмму числовой переменной, разделенную на разделы, высота которых показывает количество экземпляров, принадлежащих каждому разделу. Они полезны для получения характеристик распределения атрибута.
for(i in 1:8)hist(Smarket[,i]
Это чрезвычайно трудно увидеть, но большинство переменных имеют гауссово или бигауссово распределение.
Вы можете посмотреть на распределение данных по-разному, используя диаграммы с ячейками и усами. Поле включает средние 50% данных, линия показывает медиану, а усы на графике показывают разумный диапазон данных. Любая точка за пределами усов является выбросом.
for(i in 1:8) boxplot(Smarket[,i]
Как видите, и Лаги, и Сегодня имеют одинаковый диапазон. Кроме этого, нет никаких признаков выбросов.
Отсутствующие данные сильно влияют на моделирование. Таким образом, вы можете использовать отсутствующий график, чтобы быстро понять количество отсутствующих данных в вашем наборе данных. На оси X показаны свойства, а на оси Y — экземпляры. Горизонтальные линии представляют отсутствующие данные для экземпляра, а вертикальные блоки представляют отсутствующие данные для атрибута.
mis( col=c("blue", "red")
В этом наборе данных нет недостающих данных!
Давайте начнем вычислять корреляцию между каждой парой числовых переменных. Эти парные корреляции можно изобразить на диаграмме матрицы корреляции, чтобы увидеть, какие переменные изменяются вместе.
corrplot(correlations, method="circle")
Используя точечную нотацию, синий представляет положительную корреляцию, а красный — отрицательную корреляцию. Чем больше точка, тем больше корреляция. Вы можете видеть, что матрица симметрична, а диагональ полностью положительно коррелирует, поскольку показывает, как каждая переменная коррелирует сама с собой. Однако ни одна из переменных не связана друг с другом.
Давайте построим график данных. Существует функцияpair(), которая отображает переменные в Smarket в виде матрицы диаграммы рассеяния. В этом случае «направление вверх и вниз», ваша бинарная зависимая переменная, является цветовым индикатором.
Не похоже, что здесь есть какое-то отношение. Этот тип переменной исходит из дохода переменной сегодня, поэтому рост и падение делятся.
Давайте посмотрим на распределение плотности каждой переменной в разбивке по значению направления. Как и матрица диаграммы рассеяния выше, график плотности по направлению может помочь увидеть направление подъемов и спадов. Это также может помочь понять, как направления переменной перекрываются.
Plot(x=x, y=y, plot="density", scales=scales)
Как видите, направленные значения всех этих переменных перекрываются, а это означает, что трудно прогнозировать вверх или вниз только с одной или двумя переменными.
Создайте модель логистической регрессии
Теперь вы вызываете функцию glm.fit(). Первый аргумент, который вы передаете этой функции, — это формула R. В этом случае формула утверждает, что направление является зависимой переменной, а переменные запаздывания и объема являются предикторами. Как вы видели во введении, glm часто используется для подбора обобщенных линейных моделей.
Однако в этом случае вам нужно явно указать, что вы хотите соответствовать модели логистической регрессии. Вы решаете эту проблему, задавая для параметра семейства биномиальное значение. Таким образом, вы сообщаете glm(), что она соответствует модели логистической регрессии, а не одной из многих других моделей, которые может использовать glm.
Затем вы можете сделать summary(), который расскажет вам о подгонке.
Как видите, summary() возвращает оценку, стандартную ошибку, z-значение и значение p для каждого коэффициента. Ни один из коэффициентов не является значимым. Он также дает нулевое смещение (отклонение только от среднего) и остаточное смещение (отклонение модели, включающей все предикторы). Разница между ними очень мала и имеется 6 степеней свободы.
Вы назначаете предсказания glm.fit() для glm.probs с типом, равным зависимой переменной. Это сделает прогнозы на основе обучающих данных, которые вы использовали для подбора модели, и даст мне вектор подобранных вероятностей.
Посмотрите на первые 5 вероятностей, они очень близки к 50%.
probs[1:5]
Теперь я сделаю прогноз о том, пойдет ли рынок вверх или вниз, основываясь на периоде задержки и других предикторах. В частности, я превращу вероятность в классификацию по порогу 0,5. Для этого я использую команду ifelse().
ifelse(probs > 0.5, "Up", "Down")
glm.pred是一个真和假的向量。如果glm.probs大于0.5,glm.pred调用 "Up";否则,调用 "False"。
Здесь вы прикрепляете фрейм данных Smarket и составляете таблицу glm.pred, которая показывает вверх и вниз в предыдущем направлении. Вы также можете взять среднее из них.
В таблице случаи на диагонали — это места, где вы получили правильную классификацию, а случаи за пределами диагонали — это случаи, когда вы получили неправильную классификацию. Похоже, вы сделали много ошибок. Среднее значение дает шкалу 0,52.
Создание обучающих и тестовых выборок
Как вы можете сделать лучше? Разделение данных на обучающие и тестовые наборы — хорошая стратегия.
# 生成训练和测试集
train = Year<2005
predict(glm.fit,
newdata = Smarket[!train,],
type = "response")
Рассмотрим этот блок кода подробнее.
train等于比2005年少的那一年。对于所有小于2005年的年份,你会得到一个true;否则,我会得到一个false。
- Затем вы обновляете модель с помощью glm.fit(), только с подмножеством, равным «поезду», что означает, что она подходит только для данных до 2005 года.
- Затем вы снова используете функцию predict() для glm.probs, чтобы предсказать оставшиеся данные, большие или равные 2005. Для новых данных вы указали Smarket с индексом «train» (поезд истинен, если год больше или равен 2005). Вы устанавливаете тип «зависимая переменная», чтобы предсказать вероятности.
- Наконец, вы снова используете функцию ifelse() в glm.pred для создания переменных up и down.
Теперь вы создаете новую переменную для хранения нового подмножества тестовых данных и называете ее Direction.2005. Зависимой переменной остается направление. Вы составляете таблицу и вычисляете среднее значение этого нового тестового набора.
Direction.2005 = Direction[!train]
Хуже, чем раньше. Как это может произойти?
Решить проблему переобучения
Ну, вы, вероятно, переоцениваете данные. Чтобы исправить это, вы подбираете меньшую модель, используя Lag1, Lag2, Lag3 в качестве предикторов, исключая все остальные переменные. Остальной код тот же.
#拟合一个较小的模型
glm(family = binomial, subset = train)
Ну, у тебя классификация 59%, не так уж и плохо. Использование модели меньшего размера кажется более эффективным.
Наконец, вы выполняете summary() для glm.fit и смотрите, есть ли заметные изменения.
Ничто не имеет значения, по крайней мере, P-значения лучше, что указывает на улучшенные прогнозы производительности.
Эпилог
Итак, это руководство R по построению модели логистической регрессии с использованием функции glm() и установке биномиального семейства завершено. glm() не предполагает линейной зависимости между зависимыми и независимыми переменными. Однако он предполагает линейную связь между функцией связи в логит-модели и независимыми переменными, и я надеюсь, что вы узнали что-то ценное.
Самые популярные идеи
1.Случай применения многомерной логистической регрессии на языке R
2.Пример реализации панельного регрессионного анализа с плавным переходом (PSTR)
4.Случай анализа регрессионной модели Пуассона на языке R
5.Анализ логистической модели логистической регрессии смешанных эффектов языка R рака легких
6.Реализация регрессии LASSO, регрессии Ridge и модели эластичной сети на языке r
8.python использует линейную регрессию для прогнозирования цен на акции