การถ่วงน้ำหนักข้อมูลล่าสุดในโมเดล Random Forest


14

ฉันกำลังฝึกรูปแบบการจัดหมวดหมู่กับ Random Forest เพื่อแยกแยะระหว่าง 6 หมวดหมู่ ข้อมูลธุรกรรมของฉันมีการสังเกตประมาณ 60k + และตัวแปร 35 ตัว นี่คือตัวอย่างของลักษณะโดยประมาณ

 _________________________________________________
|user_id|acquisition_date|x_var_1|x_var_2| y_vay  |
|-------|----------------|-------|-------|--------|
|111    | 2013-04-01     | 12    | US    | group1 |
|222    | 2013-04-12     | 6     | PNG   | group1 |
|333    | 2013-05-05     | 30    | DE    | group2 |
|444    | 2013-05-10     | 78    | US    | group3 |
|555    | 2013-06-15     | 15    | BR    | group1 |
|666    | 2013-06-15     | 237   | FR    | group6 |

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

ไม่มีใครรู้ว่าแพคเกจสุ่มป่าไม้ใน R สามารถจัดการน้ำหนักต่อการสังเกต?

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

ขอบคุณมากล่วงหน้า!


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

ฉันอาจไม่ชัดเจนเพียงพอในการเขียน แต่คำถามของฉันไม่เกี่ยวกับปัญหาการใช้งาน ตัวอย่างเช่นในส่วนที่ฉันถามเกี่ยวกับการสร้างตัวแปรน้ำหนักฉันไม่ได้ตั้งใจถามว่าคำสั่งใดใน R สามารถช่วยฉันทำสิ่งนั้นได้ ฉันเพียงแค่สงสัยว่าถ้าเป็นเช่นนั้นฉันจะละเมิดสมมติฐานใด ๆ ของป่าสุ่ม
Nikolay Nenov

1
คำตอบคือไม่ฉันเชื่อ คุณสามารถกำหนดตุ้มน้ำหนักให้กับกลุ่มต่างๆตามที่อธิบายไว้ในคำตอบด้านล่าง ฉันเข้าใจว่านี่ไม่ใช่สิ่งที่คุณสนใจ แต่เป็นความคิดที่คล้ายกัน คุณสามารถลองใช้การสังเกตซ้ำตามที่ฉันแนะนำ
Alex Williams

คำตอบ:


5

rangerแพคเกจใน R ( ไฟล์ PDF ) ซึ่งเป็นเรื่องค่อนข้างใหม่จะทำเช่นนี้ การบังคับใช้แรนเจอร์ของป่าสุ่มมีcase.weightsอาร์กิวเมนต์ที่ใช้เวกเตอร์ที่มีน้ำหนักตัวพิมพ์ / กล่อง


เรียบร้อย! ตะเข็บเหมือนวิธีแก้ปัญหาที่ฉันกำลังมองหา คุณมีลิงก์ไปยังรายละเอียดของวิธีคำนวณความน่าจะเป็นในการคำนวณตัวพิมพ์ใหญ่หรือไม่
Nikolay Nenov

1
ฉันไม่แน่ใจ 100% ว่าพวกเขาคำนวณความน่าจะเป็นอย่างไร - แต่ฉันคิดว่าถ้าคุณต้องการเริ่มต้นให้ดูบทความนี้: Malley, JD, Kruppa, J. , Dasgupta, A. , Malley, KG, & Ziegler , A. (2012) เครื่องที่น่าจะเป็น: การประมาณความน่าจะเป็นที่สม่ำเสมอโดยใช้เครื่องการเรียนรู้แบบไม่มีพารามิเตอร์ วิธีการ Inf Med 51: 74-81 dx.doi.org/10.3414/ME00-01-0052
GrantRWHumphries

7

คุณสามารถสุ่มตัวอย่างข้อมูลอีกครั้งเพื่อแสดงถึงจุดข้อมูลล่าสุด Rf เกี่ยวข้องกับขั้นตอน sampel-with-replacment ต่อไปและ "การบรรจุถุงอย่างสมดุล" สำหรับชั้นเรียนที่ไม่สมดุลใช้การสุ่มตัวอย่างเพื่อแสดงชั้นของชนกลุ่มน้อยมากและให้ผลลัพธ์ที่ดีหรือดีกว่าป่าสุ่มถ่วงน้ำหนักระดับในประสบการณ์ของฉัน

คุณสามารถลองใหม่อีกครั้งที่ระดับของการสร้างเมทริกซ์การฝึกอบรมของคุณ ( อ้างอิง ) แทนระหว่างการบรรจุถุงเพื่อให้การใช้งานง่ายขึ้นแม้ว่าฉันจะแนะนำให้ทำซ้ำหลายครั้งในกรณีนั้น

การนำป่าสุ่มไปใช้ภายในประเทศรวมถึงการเรียนรู้ scikit ใช้น้ำหนักตัวอย่างเพื่อติดตามจำนวนตัวอย่างแต่ละครั้งที่อยู่ในถุงและควรเทียบเท่ากับการ oversampling ในระดับการบรรจุและใกล้เคียงกับการ oversampling ในระดับการฝึกอบรม


4

คุณควรตรวจสอบพารามิเตอร์ "classwt" ดูเหมือนจะไม่ใช่สิ่งที่คุณสนใจโดยตรง แต่อาจให้ความรู้สึกถึงสิ่งที่คุณต้องการทำ

ดูที่นี่: คำถาม Stack Exchange # 1

และที่นี่: คำถาม Stack Exchange # 2

บทความเกี่ยวกับป่าไม้แบบถ่วงน้ำหนัก: PDF

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

ดูเหมือนว่าคุณต้องการทำสิ่งที่คล้ายกัน แต่สำหรับเหตุการณ์ล่าสุด (ไม่ใช่สำหรับบางกลุ่ม / การจำแนก) วิธีง่ายๆในการทำเช่นนี้คือการสร้างการสังเกตซ้ำ (เช่นใส่ในแถวที่ซ้ำกันซ้ำ ๆ กัน) สำหรับการสังเกตล่าสุด อย่างไรก็ตามสิ่งนี้อาจไม่มีประสิทธิภาพ ฉันไม่รู้วิธีถ่วงน้ำหนักการสังเกตแต่ละครั้งใน R โดยตรง แต่ฉันไม่รู้ตัว

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


1
ขอบคุณมากสำหรับลิงค์อเล็กซ์ กระดาษให้ตัวอย่างที่ดีของกรณีที่คุณต้องการให้น้ำหนักตัวแยกประเภทของคุณ ฉันเกรงว่าสิ่งนี้จะไม่ทำงานสำหรับฉัน แต่อย่างใดอย่างหนึ่งไม่สามารถใช้พารามิเตอร์ "classwt" สำหรับสิ่งอื่นที่ไม่ใช่น้ำหนักตัวแยกประเภท - นั่นคือคุณต้องมีหนึ่งน้ำหนักต่อคลาส
Nikolay Nenov

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