신경망에서 이진 입력과 연속 입력의 혼합을 처리하는 방법은 무엇입니까?


14

R의 nnet 패키지를 사용하여 콘도 (개인 프로젝트)의 부동산 가격을 예측하기 위해 ANN을 작성하려고합니다. 나는 이것에 익숙하지 않으며 수학 배경이 없으므로 나와 함께 맨손으로하십시오.

이진 및 연속 입력 변수가 있습니다. 예를 들어 원래 예 / 아니오였던 일부 이진 변수는 신경망에 대해 1/0으로 변환되었습니다. 다른 변수는 다음과 같이 연속적 Sqft입니다.

입력 데이터 샘플

모든 값을 0-1 스케일로 정규화했습니다. 어쩌면 BedroomsBathrooms그 범위는 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로 시도했습니다.

내 생각에 바이너리 입력을 올바르게 해석하지 않기 때문에 데이터를 다른 방식으로 nnet에 공급해야한다고 생각합니다. 그 중 하나이거나 다른 매개 변수를 제공해야합니다.

어떤 아이디어?


1
이진 또는 범주 형 데이터를 신경망 입력으로 사용하는 표준 방법은 필드를 표시기 벡터로 확장하는 것입니다. 예를 들어 값 1,2 또는 3을 사용할 수있는 필드가있는 경우 1은 [1,0,0], 2-> [0,1,0] 및 3-> [ 0,0,1]. 실제 값 입력은 일반적으로 그대로 유지됩니다.
user1149913

1
당신이 이것을 언급 했으므로, 나는 대답을 찾는 동안 어딘가에서 이것을 읽는 것을 상기시키는 것 같습니다. 정보 소스가 CSV 파일에 있기 때문에 실제로 각 이진 입력의 새 필드를 수용하기 위해 열을 추가해야합니까? 예를 들어 침실 입력 범위가 0-4 인 경우 위의 예를 사용하여 4 개의 추가 열을 생성하고 ( '0'침실이 스튜디오를 의미하므로 총 5 개) 3BR 콘도는 0,0,0,1로 표시됩니다. 0?
ChrisArmstrong

답변:


8

이 상황을 처리하는 한 가지 방법은 입력의 스케일을 조정하여 분산이 거의 동일한 스케일에 있도록하는 것입니다. 이 조언은 일반적으로 회귀 모델링에 대해 제공되지만 실제로는 다른 척도로 측정 된 변수와 관련된 모든 모델링 상황에 적용됩니다 . 이진 변수의 분산은 종종 연속 변수의 분산과 상당히 다르기 때문입니다. Gelman and Hill (2006)은 (비 스케일링 된) 이진 입력과의 패리티를 얻기 위해 두 개의 표준 편차로 연속 입력의 크기를 조정할 것을 권장합니다. 이 권장 사항은 논문블로그 게시물 에도 반영됩니다 .

신경망에 대한보다 구체적인 권장 사항은 "더미 코딩"(0 및 1) 대신 이진 입력 (즉, -1 및 1)에 "효과 코딩"을 사용하고 연속 변수를 중심에 맞추는 추가 단계를 수행하는 것입니다. 이러한 권장 사항은 Warren Sarle 의 광범위한 FAQ , 특히 "이진 입력을 0과 1로 코딩하지 않는 이유"섹션에서 제공됩니다. "입력 변수를 표준화해야합니까?" 그러나 요지는 동일합니다.

입력의 기여는 다른 입력에 대한 변동성에 크게 좌우됩니다.

정렬되지 않은 범주 형 변수로 - 당신은 해야한다 바이너리 지표로 그들을 탈출. 그들은 단순히 다른 의미가 없습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.