Точность измерения логистической регрессионной модели


26

У меня есть обученная модель логистической регрессии, которую я применяю к набору данных тестирования. Зависимая переменная является двоичной (булевой). Для каждого образца в наборе данных тестирования я применяю модель логистической регрессии для генерации% вероятности того, что зависимая переменная будет истинной. Затем я записываю, было ли истинное значение истинным или ложным. Я пытаюсь вычислить значение или Скорректированный как в модели линейной регрессии.R 2р2р2

Это дает мне запись для каждого образца в наборе тестирования, как:

prob_value_is_true         acutal_value
   .34                          0
   .45                          1
   .11                          0
   .84                          0
    ....                        ....          

Мне интересно, как проверить точность модели. Моя первая попытка состояла в том, чтобы использовать таблицу непредвиденных обстоятельств и сказать «если prob_value_is_true> 0,80, предположить, что фактическое значение истинно», а затем измерить соотношение правильных и неправильных классификаций. Но мне это не нравится, потому что мне кажется, что я просто оцениваю 0,80 как границу, а не точность модели в целом и всех prob_value_is_trueзначений.

Затем я попытался просто посмотреть на каждое дискретное значение prob_value_is_true, в качестве примера, просматривая все выборки, где prob_value_is_true= 0,34, и измеряя% из тех выборок, где истинное значение верно (в этом случае, идеальная точность была бы, если бы процент выборок это было правдой = 34%). Я мог бы создать оценку точности модели, суммируя разницу при каждом дискретном значении prob_value_is_true. Но размеры выборки здесь представляют огромную проблему, особенно для экстремальных значений (около 0% или 100%), так что средние значения точных значений не являются точными, поэтому использование их для измерения точности модели не представляется правильным.

Я даже пытался создать огромные диапазоны, чтобы обеспечить достаточный размер выборки (0 -25, .25-.50, .50-.75, .75-1.0), но как измерить «добротность» этого% фактического значения, это ставит меня в тупик , Скажем, все образцы в диапазоне prob_value_is_trueот 0,25 до 0,50 имеют в среднем acutal_value0,45. Это хорошо, так как в ассортименте? Плохо, так как это не около 37,5% (центр диапазона)?

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


Я думаю, что пример диапазонов: (0-.25, .25-.50, .50-.75, .75-1.0) имеет смысл. Было бы полезно, если бы вы сузили диапазоны? Такие как: 0 -03, 0,03-.06, .06-.09, ..... т.е. каждый .03. Это может быть полезно для регионов с большим количеством точек данных.
Мак

Ответы:


18

Мера, которая часто используется для проверки логистической регрессии, представляет собой AUC кривой ROC (график чувствительности к 1-специфичности - просто используйте Google для терминов, если необходимо). Это, по сути, оценивает весь диапазон пороговых значений.

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


1
Отложив AUC на мгновение, я прав, полагая, что построение кривой ROC является чем-то вроде этого? Для каждого дискретного значения prob_value_is_true создайте одну таблицу непредвиденных расходов, используя дискретное значение в качестве порогового значения. Затем запишите истинную положительную ставку и ложную положительную ставку для каждой таблицы непредвиденных обстоятельств. График ставок для всех таблиц сопряженности на диаграмме рассеяния, и вы должны увидеть кривую ROC? Это звучит правильно?
Джон Рид

Я собрал некоторый код, чтобы сделать это, просто передавая случайные значения как вероятность и фактическое значение, и это была прямая линия. Я предполагаю, что AUC измеряет отклонение «кривой» от подобранной модели против «линии» или случайности?
Джон Рид

Что касается РПЦ: да, это правильно. Есть несколько вариантов (более или менее сглаженных; принимая во внимание вероятности, предсказанные для вашего выбора порогов или нет). Обратите внимание, что (в зависимости от используемого вами программного обеспечения / выбранного языка) существует множество инструментов, которые уже предоставляют это. WUCT AUC: это не больше или меньше, чем фактическая площадь под кривой ROC. Не с идеальным случайным предиктором, кривая ROC будет прямой линией от (0,0) до (1,1), что приведет к AUC 0,5. У AUC есть несколько хороших интерпретаций, хотя (см. Google или Wikipedia даже :-))
Ник Сэбб

8

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


6

xx=10x=20x=30mean(y[x==10]==1)mean(y[x==20]==1)Икспеременная, как вы предлагаете. Это не совсем верно, так как это будет зависеть от выбора корзин, может быть полезным для изучения вашей модели.

В общем, задача, которую вы здесь поставили, сложная. Это потому, что с логистической регрессией вы имеете дело с двумя разными вещами. Предсказания модели - это скрытая переменная, в то время как наблюдаемая вами переменная ответа (хотя предположительно генерируемая скрытой переменной) - нет. Конечно, люди часто хотят знать, каков прогнозируемый ответ, и это совершенно разумно; это только один из тех случаев, когда жизнь несправедлива.

y=1Y^0,5Yзнак равно1Y^п(Yзнак равно1)Y^знак равно0,31Y1<0,5

(0,1)р2р2с


Отличный ответ! Таким образом, в примере, в котором 30% всех случаев являются единицами, прогнозируемая вероятность 0,31 для конкретного случая подобна «ранжированию» этого случая по сравнению с другими случаями по тому, насколько близко оно к 1 (чем больше, тем ближе)? И это не должно рассматриваться как предсказанная вероятность того, что этот конкретный случай равен 1?
Мак

1
Y^язнак равно0,3110,310,31+0,25

3

Я думаю, что вы могли бы установить порог (скажем, 0,5), поэтому, когда ваша вероятность равна или превышает этот порог, ваш прогнозируемый класс будет 1, а в противном случае - 0. Затем вы можете получить меру вашей точности следующим образом:

confusion_matrix <- ftable(actual_value, predicted_value)
accuracy <- sum(diag(confusion_matrix))/number of events*100

Учитывая, что ваша вероятность равна вероятности предоставления ваших данных (x), а при использовании вашей модели значение вашего класса (y) равно 1, я не понимаю, почему вы всегда получаете значения вероятности ниже 0,5. Какова частота ваших реальных классов (actual_value)?


2

Возможно, вы захотите взглянуть на мой пакет softclassval(на softclassval.r-forge.r-project.org вы также найдете две устные презентации, которые я дал об идеях пакета).

Я написал это для немного другой проблемы, а именно, если ссылка (например, патолог) «отказывается» дать четкий класс. Тем не менее, вы можете использовать его с «обычными» жесткими классами, и это позволит избежать определения порога для усиления изначально непрерывного прогноза - поэтому вы не оцениваете 0,8.

Тем не менее, я рекомендую использовать его вместе, скажем, с ROC или диаграммой специфичности-чувствительности: результаты часто выглядят довольно плохо, так как «мои» методы будут штрафовать и без того небольшие отклонения (например, 0,9 вместо 1 дает 0,1 разницу для моих показателей) , но все пороги ниже 0,9 будут игнорировать это). На самом деле, я думаю, что это скорее преимущество: отсутствие этой чувствительности против небольших отклонений является одним из основных пунктов критики с такими «жесткими» мерами, как точность, чувствительность, отзыв и т. Д.

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


1

прязнак равнояNvLогяT(a+бИкся)

Y,реп[я]~ВерNоULLя(п[я])

Затем запустите эту симуляцию, скажем, 100 раз. У вас будет матрица с n строками (n - количество предметов) и k столбцами (в этом случае k = 100 - количество симуляций). В коде r:

for (j  in 1:100)
  mat.y.rep[,j] <- Bernoulli ( p) # p is a vector with a probability for each subject

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

Надеюсь, это поможет...


1

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

Например, если вы планируете выбрать несколько высоких результатов для дорогостоящего последующего исследования, вы можете максимизировать точность при высоких показателях. С другой стороны, если последующее исследование стоит дешево, вы можете максимизировать отзыв (чувствительность) при более низких баллах. ROC AUC может подойти, если вы сравниваете другой метод и т. Д.

С практической стороны, R«s ROCRпакет содержит 2 полезные функции

pred.obj <- prediction(predictions, labels,...)
performance(pred.obj, measure, ...)

Вместе эти функции могут вычислять широкий диапазон мер точности, включая глобальные скалярные значения (такие как «auc» ) и зависимые от оценки векторы для построения кривых точности восстановления и ROC ( «prec» , «rec» , «tpr» и "фпр" и т. д.)


1

Вы должны определить, что вы подразумеваете под «точностью». Что бы вы хотели знать, прошу прощения за то, что вы положили слова в рот, насколько хорошо ваша модель соответствует данным тренировки и, что более важно, насколько хорошо эта модель «обобщает» образцы, которых нет в ваших данных тренировки. Хотя кривые ROC могут быть полезны при анализе компромисса между точностью и отзывом для различных значений порога, я предлагаю добавить среднеквадратичную ошибку или показатель Бриера к вашему набору инструментов. Это легко вычислить, и вы можете сразу же почувствовать, влияют ли изменения функций на соответствие модели применительно к данным обучения. Поскольку в этом случае возможен наряд, ваша работа здесь не закончена. Чтобы оценить производительность обобщения или то, насколько хорошо вы справляетесь с данными, которые вы не видели, это не так. Достаточно посмотреть на ваши результаты на тренировочных примерах. Конечно, ваша модель хороша для тех, потому что они значения, которые вы использовали для определения коэффициентов для вашей логистики. Вам необходимо выделить несколько образцов для тестовых данных. Ваша производительность MSE в этом наборе должна установить ваши ожидания обобщения в соответствии с неравенством Хоффдинга. Ваша максимальная ошибка обобщения будет зависеть от количества функций в вашей модели, а также от количества выборок, использованных для вычисления статистики теста. Помните, что вам нужно будет украсть некоторые тренировочные образцы для тестовых образцов. Я рекомендую 10-кратную перекрестную проверку, когда вы перемешиваете, выбираете 90% для обучения, 10% для тестирования, а затем измеряете, повторяете и затем усредняете все измерения. потому что они значения, которые вы использовали для определения коэффициентов для вашей логистики. Вам необходимо выделить несколько образцов для тестовых данных. Ваша производительность MSE в этом наборе должна установить ваши ожидания обобщения в соответствии с неравенством Хоффдинга. Ваша максимальная ошибка обобщения будет зависеть от количества функций в вашей модели, а также от количества выборок, использованных для вычисления статистики теста. Помните, что вам нужно будет украсть некоторые тренировочные образцы для тестовых образцов. Я рекомендую 10-кратную перекрестную проверку, когда вы перемешиваете, выбираете 90% для обучения, 10% для тестирования, а затем измеряете, повторяете и затем усредняете все измерения. потому что они значения, которые вы использовали для определения коэффициентов для вашей логистики. Вам необходимо выделить несколько образцов для тестовых данных. Ваша производительность MSE в этом наборе должна установить ваши ожидания обобщения в соответствии с неравенством Хоффдинга. Ваша максимальная ошибка обобщения будет зависеть от количества функций в вашей модели, а также от количества выборок, использованных для вычисления статистики теста. Помните, что вам нужно будет украсть некоторые тренировочные образцы для тестовых образцов. Я рекомендую 10-кратную перекрестную проверку, когда вы перемешиваете, выбираете 90% для обучения, 10% для тестирования, а затем измеряете, повторяете и затем усредняете все измерения. Ваша производительность MSE в этом наборе должна установить ваши ожидания обобщения в соответствии с неравенством Хоффдинга. Ваша максимальная ошибка обобщения будет зависеть от количества функций в вашей модели, а также от количества выборок, использованных для вычисления статистики теста. Помните, что вам нужно будет украсть некоторые тренировочные образцы для тестовых образцов. Я рекомендую 10-кратную перекрестную проверку, когда вы перемешиваете, выбираете 90% для обучения, 10% для тестирования, а затем измеряете, повторяете и затем усредняете все измерения. Ваша производительность MSE в этом наборе должна установить ваши ожидания обобщения в соответствии с неравенством Хоффдинга. Ваша максимальная ошибка обобщения будет зависеть от количества функций в вашей модели, а также от количества выборок, использованных для вычисления статистики теста. Помните, что вам нужно будет украсть некоторые тренировочные образцы для тестовых образцов. Я рекомендую 10-кратную перекрестную проверку, когда вы перемешиваете, выбираете 90% для обучения, 10% для тестирования, а затем измеряете, повторяете и затем усредняете все измерения.


1

0-журнал(1-п^)01-журнал(п^)1

Это не страдает от произвольных порогов. Чем меньше мера, тем лучше.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.