วิธีการจัดการกับการผสมผสานของไบนารีและอินพุตอย่างต่อเนื่องในเครือข่ายประสาทเทียม?


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)

UPDATE: ตามความคิดเห็นด้านล่างเกี่ยวกับการแบ่งอินพุตไบนารีออกเป็นฟิลด์แยกสำหรับแต่ละคลาสค่าตอนนี้โค้ดของฉันดูเหมือน:

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 และทั้งหมดให้ผลลัพธ์ที่เลวร้ายยิ่งกว่าพารามิเตอร์เดิมที่ฉันมีอยู่ด้านบนในรหัสต้นฉบับที่โพสต์ ฉันได้ลองใช้มันด้วย linear output = 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 คอลัมน์เพิ่มเติม (รวม 5 ตั้งแต่ห้องนอน '0' หมายถึงสตูดิโอ) และคอนโด 3BR จะแสดงเป็น 0,0,0,1 , 0?
ChrisArmstrong

คำตอบ:


8

วิธีหนึ่งในการจัดการสถานการณ์นี้คือการลดความน่าเชื่อถือของอินพุตเพื่อให้ความแปรปรวนของพวกเขาอยู่ในระดับเดียวกัน คำแนะนำนี้มีให้โดยทั่วไปสำหรับการสร้างแบบจำลองการถดถอย แต่จริง ๆ แล้วมันใช้กับทุกสถานการณ์การจำลองที่เกี่ยวข้องกับตัวแปรที่วัดในระดับที่แตกต่าง นี่เป็นเพราะความแปรปรวนของตัวแปรไบนารีมักจะค่อนข้างแตกต่างจากความแปรปรวนของตัวแปรต่อเนื่อง Gelman and Hill (2006) ขอแนะนำ rescaling อินพุตต่อเนื่องโดยส่วนเบี่ยงเบนมาตรฐานสองค่าเพื่อให้ได้พาริตี้กับอินพุตไบนารี่แบบ un-scaled คำแนะนำนี้ยังสะท้อนให้เห็นในกระดาษและโพสต์บล็อก

คำแนะนำที่เฉพาะเจาะจงมากขึ้นสำหรับเครือข่ายนิวรัลคือการใช้ "เอฟเฟ็กต์โค้ด" สำหรับอินพุตไบนารี่ (นั่นคือ -1 และ 1) แทน "การเข้ารหัสดัมมี่" (0 และ 1) และใช้ขั้นตอนเพิ่มเติมของการจัดกึ่งกลางตัวแปรต่อเนื่อง คำแนะนำเหล่านี้มาจากคำถามที่พบบ่อยที่กว้างขวางโดย Warren Sarle โดยเฉพาะอย่างยิ่งในส่วน "ทำไมไม่ป้อนรหัสไบนารีเป็น 0 และ 1" และ "ฉันควรทำให้ตัวแปรอินพุตเป็นมาตรฐานหรือไม่" ส่วนสำคัญแม้ว่าจะเหมือนกัน:

การมีส่วนร่วมของอินพุตจะขึ้นอยู่กับความแปรปรวนที่สัมพันธ์กับอินพุตอื่น

สำหรับตัวแปรเด็ดขาดที่ไม่มีการเรียงลำดับ - คุณต้องแบ่งออกเป็นตัวบ่งชี้ไบนารี พวกเขาก็ไม่มีความหมายอย่างอื่น


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.