ฟอเรสต์แบบสุ่มมีมากเกินไป


15

ฉันกำลังพยายามใช้ Random Forest Regression ใน Scikits-Learn ปัญหาคือฉันได้รับข้อผิดพลาดการทดสอบที่สูงมาก:

train MSE, 4.64, test MSE: 252.25.

นี่คือลักษณะที่ข้อมูลของฉัน: (สีน้ำเงิน: ข้อมูลจริง, สีเขียว: คาดการณ์):

ทำความสะอาดการถดถอยของป่า

ฉันใช้ 90% สำหรับการฝึกอบรมและ 10% สำหรับการทดสอบ นี่คือรหัสที่ฉันใช้หลังจากลองชุดพารามิเตอร์หลายชุด:

rf = rf = RandomForestRegressor(n_estimators=10, max_features=2, max_depth=1000, min_samples_leaf=1, min_samples_split=2, n_jobs=-1) 
test_mse = mean_squared_error(y_test, rf.predict(X_test))
train_mse = mean_squared_error(y_train, rf.predict(X_train))

print("train MSE, %.4f, test MSE: %.4f" % (train_mse, test_mse))
plot(rf.predict(X))
plot(y)

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


คุณฝึกฟังก์ชั่นการทำงานเป็นระยะด้วยแกน x เป็นอินพุตและแกน y เป็นป้ายกำกับสำหรับ x <= 245 และทดสอบ x> 245 หรือไม่ หรือฉันกำลังตีความพล็อตของคุณผิด?
rrenaud

ชนิดจริง ๆ แล้วแกน x คือดัชนีการสังเกตทั้งหมดมี 300 การสังเกตดังนั้นจาก 245 ในนั่นคือข้อมูลการทดสอบที่ไม่ได้ใช้สำหรับการฝึกอบรมรูปแบบเวกเตอร์คุณลักษณะการป้อนข้อมูลประกอบด้วยจำนวนเต็มมีรูปร่าง (300,2) และคล้ายกับฟังก์ชั่นเชิงเส้นของดัชนีการสังเกตดังนั้นฉันจึงไม่เพิ่มข้อมูลเกี่ยวกับมันเพื่อที่จะไม่ทำให้คำถามซับซ้อนเกินไป
elyase

1
คุณอาจต้องการลบรอบ (ส่วนตามฤดูกาล) ออกจากข้อมูลของคุณก่อน (และแนวโน้ม)
หม่อมราชวงศ์ Prost

คุณเคยศึกษาการวิเคราะห์อนุกรมเวลาหรือไม่ มันไม่ชัดเจนสำหรับฉันว่ามีอะไรในแกน x ของคุณ แต่ดูเหมือนจะเป็นระยะสำหรับฉัน ตรวจสอบที่นี่และแจ้งให้เราทราบหากสิ่งนี้ช่วยได้: otexts.org/fpp/7/5
Bram Van Camp

คำตอบ:


21

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

สิ่งที่คุณต้องการคือการวิเคราะห์อนุกรมเวลา (เช่นการแยกแนวโน้มการวิเคราะห์สเปกตรัมและการตอบรับอัตโนมัติหรือ HMM ส่วนที่เหลือ) หรือฟิสิกส์ (เช่นการคิดว่ามี ODE ที่อาจสร้างผลลัพธ์ดังกล่าวและพยายามให้พอดีกับพารามิเตอร์ผ่านปริมาณที่สงวนไว้)


เครื่องจักรไม่ได้เรียนรู้เกี่ยวกับการแยกโมเดลทั่วไปจากข้อมูลหรือไม่ เมื่อมีชุดหนึ่งที่ interpolate ข้อมูลได้ดีเราสามารถเลือกชุดที่มีคุณสมบัติการประมาณ / การอนุมานที่ดีขึ้นโดยใช้ตัวอย่างการตรวจสอบข้าม มีความเข้าใจผิดหรือเปล่า?
elyase

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

1
ทีนี้, หน้าจอแสดง bobcat; คุณทำการแก้ไขประวัติที่เหมาะสมและสามารถแก้ไขได้โดยทั่วไปกดปุ่มสีเขียวและรับไฟฟ้าช็อตแทนคุกกี้ ทำไมสิ่งนี้จึงเกิดขึ้น เพราะการแก้ปัญหาคือวงจร (gggrrr) และภาพสัตว์เป็นเพียงการหลอกลวง คุณได้ทำสิ่งเดียวกันกับป่าไม้ของคุณ - ทำให้มันกลายเป็นชุดฝึกอบรมของคุณในขณะที่ซ่อนข้อมูลจริง

เป็นตัวอย่างที่ดี แต่ไม่เห็นว่าคุณเป็นอย่างไร ในตัวอย่างของคุณเรามีข้อมูลต่อไปนี้: คุณสมบัติเป้าหมาย ( gหรือr) และ 2 ( index(ชั่วคราว) และanimal) จากข้อมูลนี้ฉันสามารถใส่หลายรุ่นที่ให้น้ำหนักมากกว่าหรือน้อยกว่าลงในฟีเจอร์ 1 หรือ 2 (หรือเท่ากับทั้งสอง) การตรวจสอบความถูกต้องไขว้ (สมมติว่ามีข้อมูลเพียงพอ) ควรมาถึงแบบจำลองด้วยคุณลักษณะ 2 (สัตว์) ที่มีความสำคัญน้อยกว่า ฉันเห็นว่าแบบจำลองของฉันใส่ข้อมูลมากเกินไป แต่ฉันก็ยังคิดว่าฉันควรจะสามารถแยกโมเดลที่ตามหลังรูปแบบนี้ (เนื่องจากพฤติกรรมไม่เปลี่ยนแปลง) โดยมีพื้นที่ของโมเดลที่ใหญ่พอ
elyase

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

9

ปัญหาที่ใหญ่ที่สุดคือต้นไม้ถดถอย (และอัลกอริธึมที่ยึดตามพวกมันเช่นป่าสุ่ม) ทำนายหน้าที่คงที่ทีละชิ้น ๆ ให้ค่าคงที่สำหรับข้อมูลที่ตกอยู่ภายใต้ใบไม้แต่ละใบ ซึ่งหมายความว่าเมื่อคาดการณ์นอกโดเมนการฝึกอบรมพวกเขาเพียงแค่คาดการณ์ค่าเดียวกับที่พวกเขาทำสำหรับจุดที่ใกล้ที่สุดที่พวกเขามีข้อมูลการฝึกอบรม @mbq ถูกต้องว่ามีเครื่องมือพิเศษสำหรับการเรียนรู้อนุกรมเวลาที่อาจจะดีกว่าเทคนิคการเรียนรู้ของเครื่องทั่วไป อย่างไรก็ตามป่าสุ่มนั้นไม่ดีเป็นพิเศษสำหรับตัวอย่างนี้และมีเทคนิค ML ทั่วไปอื่น ๆ ที่อาจทำงานได้ดีกว่าสิ่งที่คุณเห็น SVM ที่มีเมล็ดไม่เชิงเส้นเป็นตัวเลือกหนึ่งที่อยู่ในใจ เนื่องจากฟังก์ชั่นของคุณมีโครงสร้างเป็นระยะสิ่งนี้จึงแนะนำให้ทำงานโดเมนความถี่ด้วย


AFAIK SVM มีปัญหาป่าสุ่ม พวกเขาไม่คาดการณ์ได้ดีนอกพื้นที่ที่พวกเขาได้รับการฝึกฝน เครือข่ายประสาทอาจเป็นคำตอบที่ดีกว่า
Donbeo

หากข้อมูลอยู่บนเส้นโค้งและเคอร์เนลเป็นชนิดที่ถูกต้องเพื่อให้พอดีกับเส้นโค้งนั้น SVM จะสามารถประมาณค่าไปตามเส้นโค้งนั้นได้ ถ้าข้อมูลมีแนวโน้มเป็นเส้นตรงแล้ว SVM เชิงเส้นจะพอดีกับเส้นจะประมาณตามเส้นนั้น เคอร์เนลที่ซับซ้อนมากขึ้นสามารถปรับให้เหมาะสมและคาดการณ์พฤติกรรมที่ซับซ้อนมากขึ้น มันขึ้นอยู่กับการมีเคอร์เนลที่เหมาะสม นั่นไม่ใช่การทำให้ SVM เป็นเครื่องมือที่เหมาะสมสำหรับการคาดการณ์และการทำนาย TS แต่มันทำให้ดีกว่าป่าสุ่ม
Daniel Mahler

3

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

ขั้นตอนที่ 1 สร้างฟังก์ชันการย่อขนาด MSE โดยใช้การปรับให้เหมาะสมที่สุดของ NM ตัวอย่างสามารถดูได้ที่นี่: http://glowingpython.blogspot.de/2011/05/curve-fitting-using-fmin.html

ขั้นตอนที่ 2 ภายในฟังก์ชันย่อขนาดเล็กสุดนี้มีวัตถุประสงค์เพื่อลด MSE ในการดำเนินการนี้ให้สร้างข้อมูลแยกเป็นสิบเท่าซึ่งเรียนรู้รูปแบบใหม่ใน 9 เท่าและทดสอบในครึ่งที่ 10 กระบวนการนี้ทำซ้ำสิบครั้งเพื่อให้ได้ MSE ในแต่ละครั้ง MSE ที่รวมจะถูกส่งคืนอันเป็นผลมาจากวัตถุประสงค์

ขั้นตอนที่ 3 fmin ใน python จะทำการวนซ้ำสำหรับคุณ ตรวจสอบว่าพารามิเตอร์ไฮเปอร์ใดที่จำเป็นต้องปรับแต่งอย่างละเอียด (n_estimators, max_features ฯลฯ ) และส่งต่อไปยัง fmin

ผลลัพธ์จะเป็นพารามิเตอร์ไฮเปอร์ที่ดีที่สุดซึ่งจะช่วยลดความเป็นไปได้ของการปรับตัวที่มากเกินไป


ใช่ดูเหมือนว่าจะ overfitting (โดยปกติการถดถอยป่าแบบสุ่มไม่ได้ดังนั้นคำถาม) ตอนนี้ฉันสังเกตเห็นว่าการเปลี่ยนพารามิเตอร์มีผลเพียงเล็กน้อยกับ RF Regressors ตอนนี้การตรวจสอบข้ามต้องใช้โมเดลพื้นฐานที่ยืดหยุ่นเพียงพอที่จะปรับให้เหมาะสม คุณแนะนำรุ่น / อัลกอริทึม ML ประเภทใดสำหรับข้อมูลประเภทนี้
elyase

3

ข้อเสนอแนะบางส่วน:

  1. ปรับแต่งพารามิเตอร์ของคุณโดยใช้วิธีเลื่อนหน้าต่าง (โมเดลของคุณจะต้องปรับให้เหมาะสมเพื่อคาดการณ์ค่าต่อไปในอนุกรมเวลาไม่ใช่เพื่อทำนายค่าระหว่างค่าที่ให้มา)
  2. ลองรุ่นอื่น ๆ (แม้แต่รุ่นที่ง่ายกว่าด้วยการเลือกคุณสมบัติที่เหมาะสมและกลยุทธ์ด้านวิศวกรรมคุณสมบัติอาจพิสูจน์ได้ว่าเหมาะกับปัญหาของคุณมากขึ้น)
  3. พยายามที่จะเรียนรู้การแปลงที่เหมาะสมที่สุดของตัวแปรเป้าหมาย (ปรับแต่งสิ่งนี้ด้วย, มีแนวโน้มเป็นเส้นตรง / เลขชี้กำลังเป็นลบ, คุณอาจประเมินได้)
  4. บางทีการวิเคราะห์สเปกตรัม
  5. maxima / minima นั้นมีระยะห่างเท่ากัน เรียนรู้ว่าพวกเขาได้รับคุณลักษณะของคุณจากที่ใด (ไม่มีตัวดำเนินการป้อนข้อมูลสร้างอัลกอริทึมค้นพบเพื่อลบอคติ) และเพิ่มคุณลักษณะนี้เป็นคุณลักษณะ สร้างคุณสมบัติให้nearest maximumด้วย Dunno มันอาจใช้งานได้หรืออาจจะไม่ใช่คุณสามารถรู้ได้ก็ต่อเมื่อคุณทดสอบ :)

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

1
คำแนะนำ # 2 @Tim และป่าสุ่มจะไม่ทำงานอย่างไร้เดียงสากับข้อมูลนี้ แต่การดึงคุณสมบัติที่ชาญฉลาดอาจทำให้มันใช้งานได้
Firebug


0

หลังจากอ่านโพสต์ด้านบนฉันต้องการให้คำตอบที่แตกต่างกัน

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

ดังนั้นเราสามารถทำอะไรได้บ้างสำหรับการทำนายอนุกรมเวลาด้วยตัวแบบต้นไม้?

วิธีที่เป็นไปได้คือการรวมเข้ากับการถดถอยเชิงเส้น: ก่อนอื่นให้ทำลายอนุกรมเวลา (หรือการสร้างแบบจำลองแนวโน้มด้วยการถดถอยเชิงเส้น) จากนั้นสร้างแบบจำลองส่วนที่เหลือกับต้นไม้

นอกจากนี้ยังมีรูปแบบต้นไม้รวมกับการถดถอยเชิงเส้นสามารถคาดการณ์ที่เรียกว่า cubist มันจะถดถอยเชิงเส้นบนใบ


0

หากคุณเพียงแค่ต้องการคาดการณ์ภายในขอบเขตของกราฟจากนั้นก็ทำการสุ่มการสังเกตก่อนที่จะแยกชุดข้อมูลควรแก้ปัญหา จากนั้นจะกลายเป็นปัญหาการแก้ไขจากการประมาณหนึ่งดังที่แสดง

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