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
.
Znormalizowałem wszystkie wartości w skali 0-1. Może Bedrooms
i Bathrooms
nie 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?
źródło
Odpowiedzi:
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:
Jak dla nieuporządkowanych zmiennych kategorycznych - Państwo musi przerwać je do wskaźników binarnych. Po prostu nie mają innego znaczenia.
źródło