Вимірювання точності моделі на основі логістичної регресії


26

У мене є навчена модель логістичної регресії, яку я застосовую до набору даних тестування. Залежна змінна - двійкова (булева). Для кожного зразка в наборі даних тестування я застосовую логістичну регресійну модель, щоб генерувати% ймовірність того, що залежна змінна буде істинною. Потім я записую, чи було акустичне значення правдивим чи хибним. Я намагаюся обчислити цифру або відрегульовану як у моделі лінійної регресії.R 2R2R2

Це дає мені запис для кожного зразка в тестовому наборі:

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_valueзначення 0,45. Це добре, оскільки його в асортименті? Поганий, оскільки його не близько 37,5% (центр ареалу)?

Тож я застряг у тому, що, здається, має бути простим питанням, і сподіваюся, що хтось може вказати мені на ресурс або метод, щоб обчислити статичну точність для моделі логістичної регресії.


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

Відповіді:


18

Мірою, яка часто використовується для перевірки логістичної регресії, є AUC кривої ROC (графік чутливості до 1-специфічності - просто google для термінів, якщо це необхідно). Це, по суті, оцінює весь діапазон порогових значень.

З іншого боку: оцінювати весь діапазон порогових значень може не те, що ви хочете, оскільки це (як правило) включає пороги, які призводять до дуже великої кількості помилкових негативів або помилкових позитивних результатів. Існують версії AUC, які враховують це (часткове AUC), тому якщо це питання для вас, ви можете вивчити це.


1
Якщо я на хвилину відклав AUC, чи правильно я припускаю, що побудова кривої ROC є чимось подібним? Для кожного дискретного значення prob_value_is_true створіть одну таблицю надзвичайних ситуацій, використовуючи дискретне значення як поріг. Потім запишіть істинну позитивну швидкість і хибну позитивну швидкість кожної таблиці непередбачених ситуацій. Накресліть ставки для всіх таблиць на випадок надзвичайних ситуацій на розсіювачі, і ви повинні бачити криву ROC? Це правильно звучить?
Джон Рід

Для цього я зібрав якийсь код, просто подаючи випадкові значення як вірогідність та фактичне значення, і це була пряма лінія. Я припускаю, що AUC вимірює відхилення "кривої" від пристосованої моделі, що відповідає "лінії" або випадковості?
Джон Рід

Щодо РПЦ: так, це приблизно так. Існують деякі варіанти (більш-менш згладжені; враховуючи ймовірності, передбачувані для вибору порогів чи ні). Зауважте, що (залежно від використовуваного програмного забезпечення / мови вибору) існує безліч інструментів, які вже надають це. Wrt AUC: це не більше або менше фактичної площі під кривою ROC. Якщо не досконалий випадковий прогноктор, крива ROC була б прямою лінією від (0,0) до (1,1), в результаті чого AUC становив 0,5. Хоча AUC має кілька приємних тлумачень (див. Навіть Google або Вікіпедію :-))
Нік Саббе

8

Ви правильно турбуватися про правильну пропорцію, класифіковану як головну, що відображає ефект довільної межі. Я б рекомендував два заходи. Один - область -index або ROC, як описали інші. Це тлумачення є простішим, ніж думати про криву ROC, і є мірою чистої прогнозної дискримінації. По-друге, оцініть безперервну калібрувальну криву без будь-якого зшивання даних. Якщо прогнози оцінюються на незалежному наборі даних, ви можете використовувати при виявленні зовнішніх вимкнених даних, щоб оцінити взаємозв'язок між передбачуваною та фактичною проблемою [Y = 1]. Функція в R пакет буде робити обидві ці речі. Інші функції вclowessval.probrmsrms зробить те ж саме для внутрішньої перевірки, використовуючи переустановку для усунення наслідків надмірного пристосування.


6

Якщо ваші дані згруповані за значеннями , ви можете обчислити передбачуване значення моделі та пов'язаний з ним довірчий інтервал, і побачити, чи не спостерігається відсоток у цьому діапазоні. Наприклад, якби у вас було 10 спостережень при х = 10 , 10 очок при х = 20 , 10 об при х = 30 і т.д., то , і т.д., ви отримаєте відсотки, які можна порівняти з прогнозами. Майте на увазі, що навіть якщо модель ідеальна, деякі спостережувані відсотки будуть відскакувати поза 95% ІС, як і в регресії OLS. Якщо ваші дані не згруповані, ви можете сформувати власні групи, поповнивши дані відповідно до діапазонів xхх=10х=20х=30mean(y[x==10]==1)mean(y[x==20]==1)хзмінна, як ви пропонуєте. Це не в повній мірі, оскільки це залежатиме від вибору бункерів, може бути корисним як спосіб вивчення вашої моделі.

Загалом, завдання, яке ви поставили собі тут, важко. Це тому, що з логістичною регресією ви маєте справу з двома різними видами речей. Прогнози моделі є латентною змінною, тоді як ваша змінна спостережувана відповідь (хоча імовірно породжена латентною змінною) не є. Звичайно, люди часто хочуть знати, що таке прогнозована реакція, і це цілком розумно; це лише один із тих випадків, коли життя не є чесним.

у=1у^.5у=1у^p(у=1)у^=.31у1<.5

(0,1)R2R2c


Чудова відповідь! Так у прикладі, що 30% усіх випадків є 1-х, прогнозована ймовірність 0,31 конкретного випадку є подібною до "ранжирування" цього випадку відносно інших випадків на те, наскільки воно ближче до 1 (чим більше, тим ближче)? І це не слід розглядати як передбачувану ймовірність того, що саме цей випадок дорівнює 1?
мак

1
у^i=.311.31.31.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. Яка частота ваших фактичних класів (фактичне значення)?


2

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

Я написав це для дещо іншої проблеми, а саме, якщо довідник (наприклад, патолог) "відмовляється" дати чіткий клас. Однак ви можете використовувати його з "нормальними" жорсткими класами, і це дозволяє уникнути визначення порогу для загартовування спочатку безперервного прогнозування - так що ви не оціните 0,8.

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

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


1

Пri=iнvлогiт(а+бхi)

у.rеp[i]Беrноуллi(p[i])

Потім запустіть це моделювання, скажімо, 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

Тепер ви обчислюєте різницю між передбачуваним у кожному моделюванні та спостережуваним. Вирахувавши цю різницю, просто обчисліть середню кількість істинно-позитивних та хибнопозитивних для кожного рядка (кожного предмета) та побудуйте гістограму. Або обчислити обидва для кожного стовпця (моделювання) e побудувати графік (я вважаю за краще це).

Сподіваюся, це допомагає ...


1

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

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

З практичного боку, R«s ROCRпакет містить 2 корисні функції

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

Ці функції разом можуть обчислювати широкий спектр заходів точності, включаючи глобальні скалярні значення (наприклад, "auc" ) та залежні від балів вектори для побудови кривих точності виклику та кривих ROC ( "prec" , "rec" , "tpr" та "fpr" тощо)


1

Вам потрібно визначити, що ви маєте на увазі під «точністю». Що ви хотіли б знати, вибачте мене за те, що я вкладаю слова в рот, - наскільки ваша модель відповідає вмісту навчальних даних, і що ще важливіше, наскільки добре ця модель «узагальнюється» на вибірки, що не є вашими навчальними даними. Хоча криві ROC можуть бути корисними для аналізу компромісу між точністю та викликом для різних значень порогу, я пропоную додати до панелі інструментів середню квадратичну помилку або показник Brier. Обчислити це легко, і ви можете одразу зрозуміти, чи впливають зміни функцій на придатність моделі, застосовуючи їх до даних тренувань. Оскільки в цьому випадку можливе перевитрата, тут не виконується ваша робота. Щоб оцінити ефективність узагальнення або наскільки добре ви робите дані, яких ви не бачили, це не так " t достатньо, щоб подивитися на ваші показники на навчальних зразках. Звичайно, ваша модель хороша для цих, тому що вони значень, які ви використовували для визначення коефіцієнтів для вашої логістики. Потрібно відкласти деякі зразки для тестових даних. Ваша ефективність MSE на цьому наборі повинна встановлювати ваші очікування щодо узагальнення відповідно до нерівності Гоффдінга. Ваша максимальна помилка узагальнення залежатиме від кількості функцій вашої моделі, а також від кількості вибірок, використаних для обчислення статистики тесту. Майте на увазі, що вам потрібно буде вкрасти деякі ваші навчальні зразки для тестових зразків. Я рекомендую 10-кратну перехресну перевірку, коли ви переміщуєтесь, вибирайте 90% для тренувань, 10% для тестування, а потім вимірюйте, повторюйте та потім оцінюйте всі вимірювання. тому що це значення, які ви використовували для визначення коефіцієнтів для вашої логістики. Потрібно відкласти деякі зразки для тестових даних. Ваша ефективність MSE на цьому наборі повинна встановлювати ваші очікування щодо узагальнення відповідно до нерівності Гоффдінга. Ваша максимальна помилка узагальнення залежатиме від кількості функцій вашої моделі, а також від кількості вибірок, використаних для обчислення статистики тесту. Майте на увазі, що вам потрібно буде вкрасти деякі ваші навчальні зразки для тестових зразків. Я рекомендую 10-кратну перехресну перевірку, коли ви переміщуєтесь, вибирайте 90% для тренувань, 10% для тестування, а потім вимірюйте, повторюйте та потім оцінюйте всі вимірювання. тому що це значення, які ви використовували для визначення коефіцієнтів для вашої логістики. Потрібно відкласти деякі зразки для тестових даних. Ваша ефективність MSE на цьому наборі повинна встановлювати ваші очікування щодо узагальнення відповідно до нерівності Гоффдінга. Ваша максимальна помилка узагальнення залежатиме від кількості функцій вашої моделі, а також від кількості вибірок, використаних для обчислення статистики тесту. Майте на увазі, що вам потрібно буде вкрасти деякі ваші навчальні зразки для тестових зразків. Я рекомендую 10-кратну перехресну перевірку, коли ви переміщуєтесь, вибирайте 90% для тренувань, 10% для тестування, а потім вимірюйте, повторюйте та потім оцінюйте всі вимірювання. Ваша ефективність MSE на цьому наборі повинна встановлювати ваші очікування щодо узагальнення відповідно до нерівності Гоффдінга. Ваша максимальна помилка узагальнення залежатиме від кількості функцій вашої моделі, а також від кількості вибірок, використаних для обчислення статистики тесту. Майте на увазі, що вам потрібно буде вкрасти деякі ваші навчальні зразки для тестових зразків. Я рекомендую 10-кратну перехресну перевірку, коли ви переміщуєтесь, вибирайте 90% для тренувань, 10% для тестування, а потім вимірюйте, повторюйте та потім оцінюйте всі вимірювання. Ваша ефективність MSE на цьому наборі повинна встановлювати ваші очікування щодо узагальнення відповідно до нерівності Гоффдінга. Ваша максимальна помилка узагальнення залежатиме від кількості функцій вашої моделі, а також від кількості вибірок, використаних для обчислення статистики тесту. Майте на увазі, що вам потрібно буде вкрасти деякі ваші навчальні зразки для тестових зразків. Я рекомендую 10-кратну перехресну перевірку, коли ви переміщуєтесь, вибирайте 90% для тренувань, 10% для тестування, а потім вимірюйте, повторюйте та потім оцінюйте всі вимірювання.


1

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

При цьому не страждають довільні пороги. Чим менше міра, тим краще.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.