Jak radzić sobie z kombinacją wejść binarnych i ciągłych w sieciach neuronowych?

14

Używam pakietu nnet w R, aby spróbować zbudować ANN, aby przewidzieć ceny nieruchomości na mieszkanie (prywatny projekt). Jestem w tym nowy i nie mam doświadczenia w matematyce, więc proszę o kontakt ze mną.

Mam zmienne wejściowe, które są zarówno binarne, jak i ciągłe. Na przykład niektóre zmienne binarne, które były pierwotnie tak / nie, zostały przekonwertowane na 1/0 dla sieci neuronowej. Inne zmienne są ciągłe jak Sqft.

Próbka danych wejściowych

Znormalizowałem wszystkie wartości w skali 0-1. Może Bedroomsi Bathroomsnie powinien być znormalizowany, ponieważ ich zakres wynosi tylko 0-4?

Czy te mieszane dane wejściowe stanowią problem dla ANN? Osiągnąłem dobre wyniki, ale po dokładniejszym zbadaniu wagi wybrane przez ANN dla niektórych zmiennych nie wydają się mieć sensu. Mój kod jest poniżej, jakieś sugestie?

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)

AKTUALIZACJA: W oparciu o poniższe komentarze dotyczące podziału danych binarnych na osobne pola dla każdej klasy wartości, mój kod wygląda teraz następująco:

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)

Ukryte węzły w powyższym kodzie to 12, ale wypróbowałem zakres ukrytych węzłów od 3 do 25 i wszystkie dają gorsze wyniki niż oryginalne parametry, które miałem powyżej w pierwotnym kodzie. Próbowałem również z wyjściem liniowym = prawda / fałsz.

Domyślam się, że muszę podawać dane do nnet w inny sposób, ponieważ nie interpretuje to poprawnie danych binarnych. Albo to, albo muszę podać inne parametry.

Jakieś pomysły?

ChrisArmstrong
źródło
1
Standardowym sposobem wykorzystania danych binarnych lub jakościowych jako danych wejściowych sieci neuronowej jest rozszerzenie pola na wektory wskaźnikowe. Na przykład, jeśli masz pole, które może przyjmować wartości 1,2 lub 3, wówczas 1 zostanie rozwinięte do [1,0,0], 2 -> [0,1,0] i 3 -> [ 0,0,1]. Dane wejściowe o wartości rzeczywistej są na ogół utrzymywane w niezmienionej postaci.
user1149913,
1
Teraz, kiedy o tym wspominasz, wydaje mi się, że pamiętam, by gdzieś to przeczytać podczas poszukiwania odpowiedzi. Więc skoro źródło informacji znajduje się w pliku csv, tak naprawdę muszę dodać kolumny, aby dostosować nowe pola dla każdego wejścia binarnego? Na przykład, jeśli dane wejściowe do sypialni mieszczą się w zakresie od 0-4, korzystając z powyższego przykładu utworzę 4 dodatkowe kolumny (łącznie 5, ponieważ sypialnie „0” oznaczają studio), a mieszkanie 3BR byłoby wyrażone jako 0,0,0,1 , 0?
ChrisArmstrong

Odpowiedzi:

8

Jednym ze sposobów radzenia sobie z tą sytuacją jest przeskalowanie danych wejściowych, aby ich wariancje były mniej więcej w tej samej skali. Ta rada jest ogólnie podana w przypadku modelowania regresji, ale tak naprawdę ma zastosowanie do wszystkich sytuacji modelowania, które obejmują zmienne mierzone w różnych skalach. Wynika to z faktu, że wariancja zmiennej binarnej często różni się znacznie od wariancji zmiennej ciągłej. Gelman i Hill (2006) zalecają przeskalowanie ciągłych danych wejściowych o dwa odchylenia standardowe w celu uzyskania parzystości z (nieskalowanymi) danymi binarnymi. To zalecenie znajduje również odzwierciedlenie w poście na papierze i blogu .

Bardziej szczegółowym zaleceniem dla sieci neuronowych jest stosowanie „kodowania efektów” dla wejść binarnych (to jest -1 i 1) zamiast „kodowania pozornego” (0 i 1) oraz podjęcie dodatkowego kroku centrowania zmiennych ciągłych. Te rekomendacje pochodzą z obszernego FAQ Warrena Sarle'a, w szczególności z sekcji „Dlaczego nie kodować danych binarnych jako 0 i 1?” i „Czy powinienem standaryzować zmienne wejściowe?” Istota jest jednak taka sama:

Wkład wkładu będzie silnie zależeć od jego zmienności w stosunku do innych wkładów.

Jak dla nieuporządkowanych zmiennych kategorycznych - Państwo musi przerwać je do wskaźników binarnych. Po prostu nie mają innego znaczenia.

Shadowtalker
źródło