Random Forest - วิธีจัดการกับการสวมใส่ที่มากเกินไป


41

ฉันมีพื้นฐานด้านวิทยาการคอมพิวเตอร์ แต่ฉันพยายามสอนวิทยาศาสตร์ข้อมูลด้วยตนเองโดยการแก้ปัญหาทางอินเทอร์เน็ต

ฉันได้พยายามแก้ไขปัญหานี้ในช่วงสองสามสัปดาห์ที่ผ่านมา (ประมาณ 900 แถวและ 10 ฟีเจอร์) ตอนแรกฉันใช้การถดถอยแบบโลจิสติกส์ แต่ตอนนี้ฉันเปลี่ยนเป็นป่าแบบสุ่ม เมื่อฉันใช้โมเดลฟอเรสต์แบบสุ่มบนข้อมูลการฝึกอบรมของฉันฉันจะได้รับค่าที่สูงมากสำหรับ auc (> 99%) อย่างไรก็ตามเมื่อฉันรันโมเดลเดียวกันกับข้อมูลการทดสอบผลลัพธ์จะไม่ดี (ความแม่นยำประมาณ 77%) สิ่งนี้ทำให้ฉันเชื่อว่าฉันเหมาะสมกว่าข้อมูลการฝึกอบรม

อะไรคือวิธีปฏิบัติที่ดีที่สุดเกี่ยวกับการป้องกันการติดตั้งในป่าสุ่ม?

ฉันใช้ r และ rstudio เป็นสภาพแวดล้อมการพัฒนาของฉัน ฉันใช้randomForestแพคเกจและได้ยอมรับค่าเริ่มต้นสำหรับพารามิเตอร์ทั้งหมด


4
Breiman อ้างว่า RF ไม่เหมาะสม stat.berkeley.edu/~breiman/RandomForests/cc_home.htmจากการสันนิษฐานว่าเขาถูกต้องอาจมีความไม่สอดคล้องระหว่างชุดการฝึกอบรมและชุดทดสอบของคุณหรือไม่
Reinstate Monica

RF ทำ AVOIDS เกินพอดีกับข้อมูลการทดสอบถ้าคุณปรับพารามิเตอร์การปรับให้เหมาะสม
Brash Equilibrium

ฉันพบ sampsize พารามิเตอร์การปรับจูนที่มองข้ามอย่างสมบูรณ์ stackoverflow.com/questions/34997134/…
Soren Havelund Welling

คำตอบ:


30

kk{5,10}


1
ขอขอบคุณ. มีบทช่วยสอนซึ่งแสดงวิธีการปรับพารามิเตอร์เหล่านี้ให้เหมาะสมหรือไม่?
Abhi

คุณจะต้องลงทะเบียนหลักสูตรออนไลน์ของ Stanford ซึ่งค่อนข้างเรียบง่าย แต่นี่คือวิดีโอสอนการใช้งานใน R: class.stanford.edu/courses/HumanitiesScience/StatLearning/
Brash Equilibrium

หากฉันเข้าใจสิ่งนี้อย่างถูกต้องเราจะใช้การตรวจสอบความถูกต้องแบบไขว้เพื่อตรวจสอบจำนวนฟีเจอร์ที่เข้าสู่โมเดลฟอเรสต์แบบสุ่มซึ่งตรงข้ามกับจำนวนฟีเจอร์ที่ตัวแบบจะลองทุกขั้นตอน ถูกต้องหรือไม่
Abhi

4
ฉันจะโต้แย้งกับคำตอบนี้: คุณสมบัติที่น่าสนใจสองประการของ RFs คือมันยากเกินกว่าที่จะให้พวกเขาและพารามิเตอร์เริ่มต้นมักจะค่อนข้างดี คำตอบนี้ดูเหมือนจะบ่งบอกว่า RF มีความไวต่อการเริ่มต้นที่จะไม่ค่อยมีกรณี
ชาร์ลส์

7
สังเกตุฉันไม่พบว่ามันยากเลยที่จะทำให้ป่าสุ่มที่มีขนาดใหญ่เกินไปป่าที่มีไกด์นำทางป่าสุ่มที่ถูกทำให้เป็นระเบียบหรือป่าสุ่มที่ได้รับการชี้นำ พวกเขาทำงานได้เป็นอย่างดีในการตรวจสอบข้าม แต่ไม่ดีเมื่อใช้กับข้อมูลใหม่เนื่องจากการปรับตัว ฉันเชื่อว่ามันเกี่ยวข้องกับชนิดของปรากฏการณ์ที่เป็นแบบจำลอง มันไม่ได้เป็นปัญหามากนักเมื่อสร้างแบบจำลองกระบวนการทางกล แต่ด้วยบางอย่างเช่นแบบจำลองพฤติกรรมฉันได้รับผลลัพธ์ที่มีเสถียรภาพมากขึ้นด้วยการถดถอยที่ระบุไว้อย่างดี
Hack-R

33

คุณได้รับ AUC 99% นั้นจากข้อมูลการฝึกอบรมของคุณอย่างไร ระวังให้ดีว่ามีความแตกต่างระหว่าง

predict(model)

และ

predict(model, newdata=train)

เมื่อได้รับการคาดการณ์สำหรับชุดข้อมูลการฝึกอบรม ตัวเลือกแรกที่ได้รับออกจากกระเป๋าคาดการณ์จากป่าสุ่ม นี่คือสิ่งที่คุณต้องการโดยทั่วไปเมื่อเปรียบเทียบค่าที่คาดการณ์กับข้อมูลจริงในการฝึกอบรม

ที่สองถือว่าข้อมูลการฝึกอบรมของคุณราวกับว่ามันเป็นชุดข้อมูลใหม่และเรียกใช้การสังเกตลงต้นไม้แต่ละต้น สิ่งนี้จะส่งผลให้เกิดความสัมพันธ์อย่างใกล้ชิดกับการทำนายและของจริงเนื่องจากอัลกอริทึม RF มักจะไม่ตัดต้นไม้แต่ละต้นโดยอาศัยแทนที่จะใช้ชุดของต้นไม้เพื่อควบคุมการ overfitting ดังนั้นอย่าทำเช่นนี้หากคุณต้องการได้รับข้อมูลการฝึกอบรม


3
ฉันกำลังใช้การทำนาย (โมเดลข้อมูล = รถไฟ) ตอนนี้ฉันเปลี่ยนเป็นทำนาย (รุ่น) และ auc ของฉันลดลงเป็น 87% นี่เป็นสิ่งที่ดีหรือไม่ดี?
Abhi

2
ขอขอบคุณ! ฉันพบว่านี่เป็นปัญหาสำหรับฉันเช่นกัน ฉันโพสต์คำถามติดตามเกี่ยวกับมาตรการที่จะใช้เป็น 'ข้อผิดพลาดการฝึกอบรม' สำหรับรุ่น RF ที่นี่: stats.stackexchange.com/questions/162353/…
Berk U.

เยี่ยมมากขอบคุณ !! ฉันก็ทำผิดเช่นกัน! ถึง @Abhi: เป็นเรื่องที่ดีเพราะ AUC ก่อนหน้านี้ไม่สูงมากนัก อันนี้เหมือนจริงมากขึ้น ลองใช้การตรวจสอบข้ามและวัด AUC จากนั้นคุณอาจเห็นค่าที่คล้ายกัน
อยากรู้อยากเห็น

7

สำหรับต้นไม้ตัดสินใจมีสองวิธีในการจัดการการ overfitting: (a) ไม่ปลูกต้นไม้ให้เต็มที่ (b) พรุน

เช่นเดียวกับป่าต้นไม้ - อย่าปลูกมากเกินไปและพรุน

ฉันไม่ได้ใช้randomForestมากนัก แต่สำหรับความรู้ของฉันมีหลายพารามิเตอร์ที่คุณสามารถใช้ปรับแต่งป่าของคุณ:

  • nodesize - ขนาดต่ำสุดของโหนดเทอร์มินัล
  • maxnodes - จำนวนสูงสุดของโหนดเทอร์มินัล
  • mtry - จำนวนตัวแปรที่ใช้สร้างต้นไม้แต่ละต้น (ขอบคุณ @ user777)

1
และmtryจำนวนตัวแปรที่อัลกอริธึมวาดเพื่อสร้างต้นไม้แต่ละต้นโดยค่าเริ่มต้นรากที่สองของจำนวนคุณลักษณะทั้งหมด
Reinstate Monica

ฉันจะปล่อยให้ maxnodes และ sampsize ต่ำลงแทน ทั้งสอง maxnodes decresing และต้นไม้ที่ให้ sampsize ที่มีความลึกน้อยลงและเป็นป่าที่แข็งแกร่งมากขึ้น sampsize สัมพันธ์ต้นไม้ แต่ยังต่ำกว่าและป่าไม้มีแนวโน้มที่จะมาบรรจบกันเพื่อลดข้อผิดพลาดข้ามการตรวจสอบการทำนายดูstackoverflow.com/questions/34997134/...
โซเรน Havelund เอ่อ

2

คุณอาจต้องการใช้วิธีการตรวจสอบข้ามเช่นการตรวจสอบ K fold cross


คุณต้องการที่จะทำให้ปกติ / ขนาดคุณสมบัติ?
charles

4
@ ช่วยขอโทษฉันด้วย ไม่จำเป็นต้องขยายคุณลักษณะในการใช้ฟอเรสต์แบบสุ่ม ดู: stackoverflow.com/questions/8961586/...
Fre

ฉันคิดว่าการตรวจสอบข้ามจะมีประโยชน์ นี้เป็นชุดข้อมูลที่มีขนาดค่อนข้างเล็กกับการตรวจสอบตัวอย่างแยกอาจผลิตประมาณการของข้อผิดพลาดที่ไม่เสถียร (แม้ว่าจะยอมรับฉันได้รับความรู้สึกนี้ไม่ได้เป็นปัญหาที่นี่)
ชาร์ลส์

1

คุณสามารถปรับพารามิเตอร์ของคุณโดยใช้กริดการค้นหา

from sklearn.ensemble import RandomForestClassifier

from sklearn.grid_search import GridSearchCV

random_classifier = RandomForestClassifier()

parameters = { 'max_features':np.arange(5,10),'n_estimators':[500],'min_samples_leaf': [10,50,100,200,500]}

random_grid = GridSearchCV(random_classifier, parameters, cv = 5)

บรรณาธิการพยายามแสดงให้เห็นว่าโมดูลGridSearchCVที่อยู่ในที่เรียกว่าmodel_selection& from sklearn.model_selection import GridSearchCVจึงว่าบรรทัดที่สองของรหัสที่ควรจะเป็น
gung - Reinstate Monica

0

ลองปรับแต่งพารามิเตอร์max_depthในช่วง [5, 15] แต่ไม่มากไปกว่านี้เพราะถ้าคุณมีความลึกขนาดใหญ่มีโอกาสสูงที่จะทำการ overfitting

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