Як боротися із поєднанням бінарних та безперервних входів у нейронні мережі?


14

Я використовую пакет nnet в R, щоб спробувати створити ANN для прогнозування ціни на нерухомість на кондо (особистий проект). Я новачок у цьому і не маю досвіду математики, тому, будь ласка, голі зі мною.

У мене є вхідні змінні, які є бінарними та безперервними. Наприклад, деякі бінарні змінні, які спочатку так / ні, були перетворені в 1/0 для нейронної мережі. Інші змінні є неперервними Sqft.

Зразок вхідних даних

Я нормалізував, щоб усі значення були за шкалою 0-1. Можливо, Bedroomsі Bathroomsне слід нормалізувати, оскільки їх діапазон становить лише 0-4?

Чи представляють ці змішані дані проблему для ANN? Я отримав нормальні результати, але при більш детальному вивченні ваги, які ANN обрав для певних змінних, не мають сенсу. Мій код нижче, будь-які пропозиції?

ANN <- nnet(Price ~ Sqft + Bedrooms + Bathrooms + Parking2 + Elevator + 
            Central.AC + Terrace + Washer.Dryer + Doorman + Exercise.Room + 
            New.York.View,data[1:700,], size=3, maxit=5000, linout=TRUE, decay=.0001)

ОНОВЛЕННЯ: На підставі коментарів нижче щодо розподілу двійкових входів на окремі поля для кожного класу значень тепер мій код виглядає так:

ANN <- nnet(Price ~ Sqft + Studio + X1BR + X2BR + X3BR + X4BR + X1Bath
        + X2Bath + X3Bath + X4bath + Parking.Yes + Parking.No + Elevator.Yes + Elevator.No 
        + Central.AC.Yes + Central.AC.No + Terrace.Yes + Terrace.No + Washer.Dryer.Yes 
        + Washer.Dryer.No + Doorman.Yes + Doorman.No + Exercise.Room.Yes + Exercise.Room.No 
        + New.York.View.Yes + New.York.View.No + Healtch.Club.Yes + Health.Club.No,
    data[1:700,], size=12, maxit=50000, decay=.0001)

Прихованих вузлів у наведеному вище коді 12, але я спробував діапазон прихованих вузлів від 3 до 25, і всі вони дають гірші результати, ніж вихідні параметри, які я мав вище в оригінальному коді, розміщеному вище. Я також спробував це з лінійним виходом = true / false.

Я здогадуюсь, що мені потрібно подавати дані в мережу по-різному, тому що вона не інтерпретує бінарний ввід належним чином. Або це, або мені потрібно надати йому різні параметри.

Будь-які ідеї?


1
Стандартний спосіб використання двійкових чи категоричних даних як нейромережевих входів - це розширення поля на індикаторні вектори. Наприклад, якби у вас було поле, яке може приймати значення 1,2 або 3, то 1 буде розширено до [1,0,0], 2 -> [0,1,0] і 3 -> [ 0,0,1]. Реальний цінний внесок, як правило, зберігається таким, який є.
користувач1149913

1
Тепер, коли ви це згадуєте, я, здається, згадую, як читав це десь під час пошуку відповіді. Отже, оскільки джерело інформації знаходиться у файлі csv, мені фактично потрібно додати стовпці для розміщення нових полів для кожного бінарного вводу? Наприклад, якщо вхід для спальні коливається від 0-4, використовуючи приклад, наведений вище, я створив би 4 додаткові колонки (всього 5, оскільки спальні "0" означають студію), а кондо 3BR виражатиметься як 0,0,0,1 , 0?
ChrisArmstrong

Відповіді:


8

Один із способів вирішити цю ситуацію - змінити масштаби входів, щоб їх відхилення були приблизно однаковими. Ця порада, як правило, дається для регресійного моделювання, але вона дійсно стосується всіх ситуацій моделювання, які включають змінні, виміряні на різних масштабах. Це тому, що дисперсія бінарної змінної часто сильно відрізняється від дисперсії суцільної змінної. Gelman and Hill (2006) рекомендують змінити масштаб безперервних входів на два стандартних відхилення для отримання паритету з (не масштабованими) бінарними входами. Ця рекомендація відображена також у статті та публікації блогу .

Більш конкретна рекомендація для нейронних мереж - використовувати "кодування ефектів" для двійкових входів (тобто -1 і 1) замість "фіктивного кодування" (0 і 1), а також зробити додатковий крок центрування безперервних змінних. Ці рекомендації виходять із широкого поширеного запитання від Воррена Сарла, зокрема з розділів "Чому б не кодувати бінарні входи як 0 та 1?" та "Чи варто стандартизувати вхідні змінні?" Однак суть однакова:

Внесок вкладу буде сильно залежати від його мінливості щодо інших вхідних даних.

Що стосується не упорядкованих категоричних змінних - їх потрібно розбити на двійкові показники. Вони просто не мають сенсу інакше.


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