Cách xử lý dữ liệu phân cấp / lồng nhau trong học máy


29

Tôi sẽ giải thích vấn đề của tôi bằng một ví dụ. Giả sử bạn muốn dự đoán thu nhập của một cá nhân được cung cấp một số thuộc tính: {Tuổi, Giới tính, Quốc gia, Vùng, Thành phố}. Bạn có một tập dữ liệu đào tạo như vậy

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

Bây giờ, giả sử tôi muốn dự đoán thu nhập của một người mới sống ở Thành phố 7. Tập huấn luyện của tôi có 3 mẫu với những người ở Thành phố 7 (giả sử đây là rất nhiều) vì vậy tôi có thể sử dụng thu nhập trung bình ở Thành phố 7 để dự đoán thu nhập của cá nhân mới này.

Bây giờ giả sử tôi muốn dự đoán thu nhập của một người mới sống ở Thành phố 2. Tập huấn luyện của tôi chỉ có 1 mẫu với Thành phố 2, vì vậy thu nhập trung bình ở Thành phố 2 có lẽ không phải là một công cụ dự đoán đáng tin cậy. Nhưng tôi có thể sử dụng thu nhập trung bình ở Vùng 1.

Ngoại suy ý tưởng này một chút, tôi có thể chuyển đổi tập dữ liệu đào tạo của mình thành

    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

Vì vậy, mục tiêu là bằng cách nào đó kết hợp trung bình CityIncome, RegionIncome và CountryIncome trong khi sử dụng số lượng mẫu đào tạo cho từng mẫu để đưa ra trọng số / độ tin cậy cho từng giá trị. (Lý tưởng nhất, vẫn bao gồm thông tin từ Tuổi và Giới tính.)

Lời khuyên để giải quyết loại vấn đề này là gì? Tôi thích sử dụng các mô hình dựa trên cây như rừng ngẫu nhiên hoặc tăng cường độ dốc, nhưng tôi gặp khó khăn khi làm cho các mô hình này hoạt động tốt.

CẬP NHẬT

Đối với bất kỳ ai sẵn sàng chịu đựng vấn đề này, tôi đã tạo dữ liệu mẫu để kiểm tra giải pháp đề xuất của bạn tại đây .


7
Các mô hình bayesian phân cấp rất tự nhiên để khai thác cấu trúc như được mô tả trong dữ liệu của bạn. Kiểm tra ví dụ cổ điển về mô hình ô nhiễm Radon mc-stan.org/documentation/case-studies/radon.html
Vladislavs Dovgalecs

Hãy xem thử thách hướng dẫn Bắt đầu Kaggle này : kaggle.com/c/titanic . Nó giải quyết một vấn đề tương tự, đó là dự đoán liệu một người có sống sót sau thảm họa Titanic với các thuộc tính khác nhau về người đó như Giới tính, loại vé hay không, v.v. v.v.
Vihari Piratla

6
@VihariPiratla Cảm ơn bạn đã nhập, nhưng tôi quen thuộc với bộ dữ liệu và thách thức Titanic, và tôi không thấy nó liên quan đến vấn đề dữ liệu lồng nhau mà tôi đã hỏi.
Ben

Sử dụng chính quy L2 / L1 cho các mô hình đó, ví dụ hồi quy logistic / SVM thực hiện nó sẽ giúp ích (các vịnh phân cấp của người nghèo). hiệu quả là bạn xử phạt các hệ số, vì vậy trừ khi một hệ số đáng kể (nghĩa là trên nhiều dữ liệu) cải thiện lỗi, nó sẽ được đặt thành gần bằng không. và bạn sử dụng tính giá trị chéo để quyết định mức phạt
seanv507

Bạn cũng muốn có thể dự đoán thu nhập của một người sống ở thành phố 9?
jan-glx

Câu trả lời:


14

Tôi đã suy nghĩ về vấn đề này trong một thời gian, với những cảm hứng từ các câu hỏi sau đây trên trang web này.

Trước tiên tôi xin giới thiệu các mô hình hiệu ứng hỗn hợp cho dữ liệu phân cấp / lồng nhau và bắt đầu từ một mô hình hai cấp đơn giản (các mẫu được lồng trong các thành phố). Đối với mẫu thứ trong thành phố thứ i , chúng ta viết kết quả y i j là hàm của hàm số x i j (danh sách các biến bao gồm giới tính và tuổi), y i j = f ( x i j ) + u i + ϵ i j , trong đó u i là giao thoa ngẫu nhiên cho mỗi thành phố, j = 1jiyijxij

yij=f(xij)+ui+ϵij,
ui . Nếu chúng ta giả u i ε i j theo phân phối chuẩn với trung bình 0 và phương sai σ 2 u σ 2 , các Bayesian (EB) ước tính thực nghiệm của u tôi u i = σ 2 uj=1,,niuiϵijσu2σ2uinơi ˉ y i. =1
u^i=σu2σu2+σ2/ni(y¯i.f(x¯i.)),
,f( ˉ x i.)=1y¯i.=1niiniyijNếu chúng ta coi( ˉ y i.-f( ˉ x i.))Là ước tính OLS (bình phương nhỏ nhất) củaui, thì ước tính EB là tổng bằng 0 và ước tính OLS, và trọng số là một chức năng tăng của cỡ mẫuni. Dự đoán cuối cùng là f (xij)+ u if(x¯i.)=1niinif(xij).(y¯i.f(x¯i.))uini Nơi f ( x i j ) là ước tính của hiệu ứng cố định từ hồi quy tuyến tính hoặc phương pháp học máy như rừng ngẫu nhiên. Điều này có thể dễ dàng được mở rộng đến bất kỳ mức dữ liệu nào, giả sử các mẫu được lồng trong các thành phố và sau đó là các khu vực và sau đó là các quốc gia. Khác với các phương thức dựa trên cây, có một phương pháp dựa trênSVM.
f^(xij)+u^i,
f^(xij)

Đối với phương pháp dựa trên rừng ngẫu nhiên, bạn có thể thử MixRF()trong gói R của chúng tôi MixRFtrên CRAN.


ifi

fuixijui,

6

Cho rằng bạn chỉ có hai biến và lồng nhau đơn giản, tôi sẽ lặp lại ý kiến ​​của những người khác đề cập đến một mô hình Bayes phân cấp. Bạn đề cập đến một ưu tiên cho các phương pháp dựa trên cây, nhưng có một lý do cụ thể cho việc này? Với số lượng dự đoán tối thiểu, tôi thấy rằng tuyến tính thường là một giả định hợp lệ hoạt động tốt và bất kỳ đặc điểm kỹ thuật sai nào của mô hình có thể dễ dàng được kiểm tra thông qua các ô dư.

Nếu bạn đã có một số lượng lớn các yếu tố dự đoán, ví dụ RF dựa trên phương pháp EM được đề cập bởi @Randel chắc chắn sẽ là một lựa chọn. Một tùy chọn khác mà tôi chưa thấy là sử dụng tăng cường dựa trên mô hình (có sẵn thông qua gói mboost trong R ). Về cơ bản, phương pháp này cho phép bạn ước tính dạng chức năng của các hiệu ứng cố định của mình bằng cách sử dụng nhiều người học cơ sở khác nhau (tuyến tính và phi tuyến tính), và các ước tính hiệu ứng ngẫu nhiên được tính gần đúng bằng cách sử dụng hình phạt dựa trên sườn núi cho tất cả các cấp trong yếu tố cụ thể đó. Bài viết này là một hướng dẫn khá hay (người học cơ sở hiệu ứng ngẫu nhiên được thảo luận ở trang 11).

Tôi đã xem xét dữ liệu mẫu của bạn, nhưng có vẻ như nó chỉ có các biến hiệu ứng ngẫu nhiên của Thành phố, Vùng và Quốc gia. Trong trường hợp này, sẽ chỉ hữu ích khi tính toán ước tính Bay theo kinh nghiệm cho các yếu tố đó, không phụ thuộc vào bất kỳ yếu tố dự đoán nào. Nói chung, đó thực sự có thể là một bài tập tốt, vì có thể các cấp cao hơn (ví dụ: Quốc gia), có phương sai tối thiểu được giải thích trong kết quả, và vì vậy có lẽ sẽ không đáng để thêm chúng vào mô hình của bạn.


1
+1 để giới thiệu mboostgói.
Randel

Các thực dữ liệu tôi đang làm việc với có nhiều hơn hai biến mà thêm rất nhiều lộn xộn thực tế mà không được nhặt bằng ví dụ đơn giản của tôi (ví dụ như phi tuyến tính, codependence, thiếu giá trị, giá trị phân loại, vv) . Theo kinh nghiệm của tôi, những người học dựa trên cây làm công việc tốt nhất trong việc xử lý tất cả các mớ hỗn độn trong thế giới thực, đó là lý do tại sao tôi nghiêng về việc sử dụng chúng. (Có một lý do XGBoost thắng hầu hết các cuộc thi dữ liệu có cấu trúc trên Kaggle.) mboostNghe có vẻ thú vị - Tôi sẽ xem xét. Cảm ơn
Ben

1
Tôi thấy, đồng ý rằng cây chắc chắn có thể hữu ích trong tình huống đó. Trong trường hợp đó, gắn bó với đề xuất của @ Randel sẽ là một lựa chọn tốt. Mboost cũng có một người học cơ sở cây cũng có thể chứng minh hữu ích kết hợp với những người học cơ sở hiệu ứng ngẫu nhiên.
dmartin

3

Đây là nhiều hơn một bình luận hoặc đề nghị hơn là một câu trả lời, nhưng tôi nghĩ rằng bạn hỏi một câu hỏi quan trọng ở đây. Là một người làm việc độc quyền với dữ liệu đa cấp, tôi có thể nói rằng tôi đã tìm thấy rất ít về học máy với dữ liệu đa cấp. Tuy nhiên, Dan Martin, một tiến sĩ gần đây về tâm lý học định lượng tại Đại học Virginia, đã làm luận án về việc sử dụng cây hồi quy với dữ liệu đa cấp. Dưới đây là một liên kết đến một gói R ông đã viết cho một số mục đích sau:

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

Ngoài ra, bạn có thể tìm thấy luận án của mình ở đây:

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


2
Cảm ơn đã tham khảo, Erik! Một điều cần lưu ý với luận án của tôi là nó chỉ đánh giá cách các phương thức rừng thực hiện "ngoài luồng" khi tiếp xúc với các cấu trúc dữ liệu đa cấp. Các phương pháp mà @Randel đề cập được thảo luận trong Chương 3 như một tổng quan tài liệu, nhưng nghiên cứu mô phỏng chủ yếu nghiên cứu thuật toán ban đầu của Breiman và cây / rừng suy luận có điều kiện.
dmartin

1

Hàm RFcluster()từ gói gamgroup cho R "điều chỉnh các khu rừng ngẫu nhiên để hoạt động (mặc dù vụng về và không hiệu quả) với dữ liệu kết quả phân loại phân cụm". Ví dụ sau là từ trang trợ giúp cho 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)

Điều này trả về độ chính xác của OOB (trong đó "túi" là túi loa, không phải túi đựng mẫu loa riêng lẻ) mà máy của tôi cung cấp là 0,57.


0

Bạn có thể muốn có một cái nhìn về metboost : Miller PJ et al. metboost: Phân tích hồi quy thăm dò với dữ liệu được phân cấp theo cụm phân cấp.arXiv: 1702.03994

Trích dẫn từ bản tóm tắt: Chúng tôi đề xuất một phần mở rộng để tăng cường các cây quyết định được gọi là metboost cho dữ liệu được phân cấp theo cấp bậc. Nó hoạt động bằng cách ràng buộc cấu trúc của mỗi cây giống nhau giữa các nhóm, nhưng cho phép nút đầu cuối có nghĩa là khác nhau. Điều này cho phép các yếu tố dự đoán và phân chia điểm dẫn đến các dự đoán khác nhau trong mỗi nhóm và xấp xỉ các hiệu ứng cụ thể của nhóm phi tuyến. Điều quan trọng, metboost vẫn khả thi về mặt tính toán cho hàng ngàn quan sát và hàng trăm dự đoán có thể chứa các giá trị bị thiếu.

Nó được thực hiện trong gói mvtboost


1
please provide references instead of just links (especially for your first link), as links can die
Antoine
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.