วิธีจัดการกับข้อมูลแบบลำดับชั้น / ซ้อนในการเรียนรู้ของเครื่อง


29

ฉันจะอธิบายปัญหาด้วยตัวอย่าง สมมติว่าคุณต้องการที่จะทำนายรายได้ของแต่ละบุคคลที่มีคุณลักษณะบางอย่าง: {อายุ, เพศ, ประเทศ, ภูมิภาค, เมือง} คุณมีชุดข้อมูลการฝึกอบรมเช่นนั้น

train <- data.frame(CountryID=c(1,1,1,1, 2,2,2,2, 3,3,3,3), 
             RegionID=c(1,1,1,2, 3,3,4,4, 5,5,5,5), 
             CityID=c(1,1,2,3, 4,5,6,6, 7,7,7,8), 
             Age=c(23,48,62,63, 25,41,45,19, 37,41,31,50), 
             Gender=factor(c("M","F","M","F", "M","F","M","F", "F","F","F","M")),
             Income=c(31,42,71,65, 50,51,101,38, 47,50,55,23))
train
   CountryID RegionID CityID Age Gender Income
1          1        1      1  23      M     31
2          1        1      1  48      F     42
3          1        1      2  62      M     71
4          1        2      3  63      F     65
5          2        3      4  25      M     50
6          2        3      5  41      F     51
7          2        4      6  45      M    101
8          2        4      6  19      F     38
9          3        5      7  37      F     47
10         3        5      7  41      F     50
11         3        5      7  31      F     55
12         3        5      8  50      M     23

ตอนนี้สมมติว่าฉันต้องการทำนายรายได้ของคนใหม่ที่อาศัยอยู่ในเมือง 7 ชุดการฝึกอบรมของฉันมีตัวอย่างจำนวน 3 ชุดกับผู้คนในเมือง 7 (สมมติว่านี่เป็นจำนวนมาก) ดังนั้นฉันจึงอาจใช้รายได้เฉลี่ยในเมือง 7 ทำนายรายได้ของบุคคลใหม่นี้

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

การคาดการณ์ความคิดนี้เล็กน้อยฉันสามารถเปลี่ยนชุดข้อมูลการฝึกอบรมของฉันเป็น

    Age Gender CountrySamples CountryIncome RegionSamples RegionIncome CitySamples CityIncome
 1:  23      M              4         52.25             3        48.00           2    36.5000
 2:  48      F              4         52.25             3        48.00           2    36.5000
 3:  62      M              4         52.25             3        48.00           1    71.0000
 4:  63      F              4         52.25             1        65.00           1    65.0000
 5:  25      M              4         60.00             2        50.50           1    50.0000
 6:  41      F              4         60.00             2        50.50           1    51.0000
 7:  45      M              4         60.00             2        69.50           2    69.5000
 8:  19      F              4         60.00             2        69.50           2    69.5000
 9:  37      F              4         43.75             4        43.75           3    50.6667
10:  41      F              4         43.75             4        43.75           3    50.6667
11:  31      F              4         43.75             4        43.75           3    50.6667
12:  50      M              4         43.75             4        43.75           1    23.0000

ดังนั้นเป้าหมายคือการรวม CityIncome, RegionIncome และ CountryIncome โดยเฉลี่ยในขณะที่ใช้จำนวนตัวอย่างการฝึกอบรมสำหรับแต่ละคนเพื่อให้น้ำหนัก / ความน่าเชื่อถือกับแต่ละค่า (เป็นการดียังคงรวมถึงข้อมูลจากอายุและเพศ)

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

UPDATE

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


7
แบบจำลองลำดับชั้นแบบเบย์นั้นเป็นเรื่องธรรมดามากที่จะใช้ประโยชน์จากโครงสร้างดังที่อธิบายไว้ในข้อมูลของคุณ ตรวจสอบตัวอย่างคลาสสิกเกี่ยวกับการสร้างแบบจำลองการปนเปื้อนของเรดอนmc-stan.org/documentation/case-studies/radon.html
Vladislavs Dovgalecs

ลองดูที่ Kaggle นี้เริ่มต้นความท้าทายกวดวิชา: kaggle.com/c/titanic มันเกี่ยวข้องกับปัญหาที่คล้ายกันนั่นคือการทำนายว่าคน ๆ หนึ่งรอดพ้นจากภัยพิบัติจากไททานิคหรือไม่เนื่องจากคุณลักษณะต่าง ๆ เกี่ยวกับบุคคลเช่นเพศประเภทตั๋วเป็นต้นวิธีการส่งที่ดีที่สุดสำหรับการใช้วิธีการขั้นสูงเช่นการไล่ระดับสี ฯลฯ
Vihari Piratla

6
@VihariPiratla ขอบคุณสำหรับการป้อนข้อมูล แต่ฉันคุ้นเคยกับชุดข้อมูลและความท้าทายไททานิกและฉันไม่เห็นว่าเกี่ยวข้องกับปัญหาข้อมูลซ้อนที่ฉันถามเกี่ยวกับ
Ben

การใช้การทำให้เป็นมาตรฐาน L2 / L1 สำหรับโมเดลเหล่านั้นเช่นการถดถอยโลจิสติก / SVM ที่ดำเนินการควรช่วยได้ (เบย์แบบลำดับขั้นที่ไม่ดี) คุณจะลงโทษค่าสัมประสิทธิ์ได้อย่างมีประสิทธิภาพดังนั้นหากค่าสัมประสิทธิ์มีนัยสำคัญ (เช่นข้อมูลจำนวนมาก) จะช่วยปรับปรุงข้อผิดพลาดมันจะถูกตั้งค่าให้ใกล้กับศูนย์ และคุณใช้ crossvalidation เพื่อตัดสินใจระดับการลงโทษ
seanv507

คุณต้องการที่จะทำนายรายได้ของคนที่อาศัยอยู่ในเมือง 9 หรือไม่?
jan-glx

คำตอบ:


14

ฉันคิดถึงปัญหานี้มาระยะหนึ่งแล้วโดยมีแรงบันดาลใจจากคำถามต่อไปนี้ในไซต์นี้

ก่อนอื่นให้ฉันแนะนำโมเดลเอฟเฟ็กต์แบบผสมสำหรับข้อมูลแบบลำดับชั้น / ซ้อนและเริ่มจากแบบจำลองสองระดับอย่างง่าย (ตัวอย่างที่ซ้อนอยู่ภายในเมือง) สำหรับตัวอย่าง -th ในเมืองi- th เราเขียนผลลัพธ์y i jเป็นฟังก์ชันของ covariates (รายการตัวแปรรวมถึงเพศและอายุ), ที่เป็นตัดสุ่มสำหรับแต่ละเมืองJหากเราถือว่าและติดตามการแจกแจงปกติด้วยค่าเฉลี่ย 0 และค่าความแปรปรวนและJผมYผมJxผมJJ = 1 , ... , n ฉันU ฉันε ฉันJ σ 2 U σ 2 U ฉันUฉัน = σ 2 U

YผมJ=(xผมJ)+ยูผม+εผมJ,
ยูผมJ=1,...,nผมยูผมεผมJσยู2σ2การประมาณค่าเบส์ (EB) เชิงประจักษ์ของคือที่ ,ถ้าเราปฏิบัติต่อเป็น OLS (ธรรมดาตารางน้อยที่สุด) ของดังนั้น EB ประมาณการเป็นผลรวมถ่วงน้ำหนักของ 0 และ OLS ประเมินและน้ำหนักเป็นฟังก์ชั่นที่เพิ่มขึ้นของขนาดตัวอย่างn_iคำทำนายสุดท้ายคือที่ยูผม ˉ Yฉัน =1
ยู^ผม=σยู2σยู2+σ2/nผม(Y¯ผม.-(x¯ผม.)),
( ˉ xฉัน.)=1Y¯ผม.=1nผมΣผมnผมYผมJ(x¯ผม.)=1nผมΣผมnผม(xผมJ).(Y¯ผม.-(x¯ผม.))ยูผมnผม
^(xผมJ)+ยู^ผม,
^(xผมJ)เป็นการประมาณค่าผลกระทบคงที่จากการถดถอยเชิงเส้นหรือวิธีการเรียนรู้ของเครื่องเช่นฟอเรสต์แบบสุ่ม สิ่งนี้สามารถขยายไปถึงระดับของข้อมูลได้ง่ายพูดตัวอย่างที่ซ้อนกันในเมืองจากนั้นภูมิภาคและประเทศต่างๆ อื่น ๆ กว่าวิธีต้นไม้ที่ใช้มีวิธีบนพื้นฐานของSVM

สำหรับวิธีการสุ่มแบบฟอเรสต์คุณสามารถลองMixRF()ในแพ็คเกจ R ของเราMixRFบน CRAN


คุณช่วยอธิบายได้ไหมว่าทำไมการสกัดกั้นได้รับอนุญาตให้เปลี่ยนแปลงกับแต่มีพารามิเตอร์ชุดเดียวสำหรับทั้งหมดหรือไม่ มันเป็นข้อสันนิษฐานที่ทำให้ง่ายขึ้นเพื่อหลีกเลี่ยงการ overfitting หรือทำให้ปัญหาเวิ้งว้าง? ผมผม
user20160

@ user20160 ใช่เราเรียกส่วนเป็นส่วนลักษณะคงที่และเป็นเอฟเฟกต์แบบสุ่ม นอกจากนี้เรายังสามารถสุ่มลาดได้เช่นแต่ควร จำกัด จำนวนการสุ่มลาดเพราะสิ่งนี้จะแนะนำองค์ประกอบความแปรปรวนจำนวนมากใน เมทริกซ์ความแปรปรวนร่วมของผลสุ่มหากไม่มีโครงสร้าง ยูผมxผมJ'ยูผม,
Randel

6

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

หากคุณมีตัวทำนายจำนวนมากตัวอย่าง RF ตามวิธี EM ที่กล่าวถึงโดย @Randel จะเป็นตัวเลือก อีกตัวเลือกหนึ่งที่ฉันยังไม่เห็นคือการใช้การเพิ่มประสิทธิภาพตามรุ่น (มีให้ผ่านทางแพคเกจ mboost ใน R ) โดยพื้นฐานแล้ววิธีนี้ช่วยให้คุณสามารถประเมินรูปแบบการทำงานของเอฟเฟกต์คงที่ของคุณโดยใช้ผู้เรียนพื้นฐานต่าง ๆ (เชิงเส้นและไม่เป็นเชิงเส้น) และการประมาณผลกระทบแบบสุ่มนั้น นี้กระดาษคือการสอนที่ดีงาม (ผลกระทบสุ่มเรียนฐานที่จะกล่าวถึงในหน้า 11)

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


1
+1 สำหรับการแนะนำmboostแพ็คเกจ
Randel

จริงข้อมูลที่ฉันกำลังทำงานกับมีมากขึ้นกว่าสองตัวแปรที่เพิ่มจำนวนมากของระเบียบโลกแห่งความจริงที่ไม่ได้หยิบขึ้นมาโดยตัวอย่างง่ายๆของฉัน (เช่นไม่ใช่เชิงเส้น codependence ค่าหายไปค่าเด็ดขาด ฯลฯ ) . จากประสบการณ์ของฉันผู้เรียนที่ใช้ต้นไม้ทำงานได้ดีที่สุดในการจัดการกับความยุ่งเหยิงในโลกแห่งความเป็นจริงซึ่งเป็นเหตุผลที่ฉันโน้มตัวไปใช้พวกเขา (มีเหตุผล XGBoost ชนะการแข่งขันโครงสร้างข้อมูลเกือบทั้งหมดใน Kaggle) mboostฟังดูน่าสนใจ - ฉันจะดูมัน ขอบคุณ
เบ็น

1
ฉันเห็นด้วยเห็นด้วยว่าต้นไม้จะมีประโยชน์ในสถานการณ์นั้น ในกรณีที่การเกาะติดกับข้อเสนอแนะของ @ Randel จะเป็นตัวเลือกที่ดี Mboost ยังมีผู้เรียนพื้นฐานต้นไม้ด้วยซึ่งอาจพิสูจน์ว่ามีประโยชน์เมื่อใช้ร่วมกับผู้เรียนพื้นฐานแบบสุ่ม
dmartin

3

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

https://github.com/dpmartin42/mleda/blob/master/README.md

นอกจากนี้คุณสามารถค้นหาวิทยานิพนธ์ของเขาที่นี่:

http://dpmartin42.github.io/about.html


2
ขอบคุณสำหรับการอ้างอิงเอริค! สิ่งหนึ่งที่ต้องคำนึงถึงในวิทยานิพนธ์ของฉันก็คือมันประเมินเฉพาะวิธีการปฏิบัติป่า "นอกกรอบ" เมื่อสัมผัสกับโครงสร้างข้อมูลหลายระดับ วิธีการที่ @Randel กล่าวถึงถูกกล่าวถึงในบทที่ 3 เป็นการทบทวนวรรณกรรม แต่การศึกษาแบบจำลองได้ทำการตรวจสอบอัลกอริทึมดั้งเดิมของ Breiman และต้นไม้ / ป่าที่มีเงื่อนไข
dmartin

1

ฟังก์ชั่นRFcluster()จากแพคเกจเกมคลาสสำหรับ R "จะปรับฟอเรสต์แบบสุ่มให้ทำงาน (แม้ว่าจะงุ่มง่ามและไร้ประสิทธิภาพ) พร้อมกับข้อมูลผลลัพธ์หมวดหมู่แบบกลุ่ม" ตัวอย่างต่อไปนี้มาจากหน้าช่วยเหลือสำหรับRFcluster:

 library(randomForest)
 library(gamclass)
 data(mlbench::Vowel)
 RFcluster(formula=Class ~., id = V1, data = Vowel, nfold = 15,
           tree=500, progress=TRUE, printit = TRUE, seed = 29)

สิ่งนี้ส่งคืนความแม่นยำของ OOB (โดยที่ "ถุง" เป็นถุงของลำโพงไม่ใช่ถุงของตัวอย่างของลำโพงแต่ละตัว) ซึ่งเครื่องของฉันให้เป็น 0.57


0

คุณอาจต้องการดูmetboost : Miller PJ et al metboost: การวิเคราะห์การถดถอยเชิงสำรวจด้วย data.arXiv คลัสเตอร์แบบลำดับชั้น: 1702.03994

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

มันถูกใช้งานในแพ็คเกจ R mvtboost


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