머신 러닝에서 계층 적 / 중첩 된 데이터를 처리하는 방법


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

이제 City 7에 사는 새로운 사람의 소득을 예측하고 싶다고 가정 해 봅시다. 제 훈련 세트는 City 7에있는 사람들과 함께 무려 3 개의 샘플을 가지고 있습니다. 이 새로운 개인의 소득을 예측하십시오.

이제 City 2에 사는 새로운 사람의 소득을 예측하려고한다고 가정하겠습니다. 내 훈련 세트에는 City 2의 표본이 하나만 있으므로 City 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을 어떻게 결합하여 각 값에 대한 가중치 / 신뢰성을주기 위해 각 훈련 샘플 수를 사용하는 것입니다. (아직도 여전히 연령과 성별의 정보를 포함합니다.)

이 유형의 문제를 해결하기위한 팁은 무엇입니까? 랜덤 포레스트 또는 그라디언트 부스팅과 같은 트리 기반 모델을 사용하는 것이 더 좋지만 제대로 작동하지 못했습니다.

최신 정보

이 문제에 기꺼이 응하려는 사람은 여기에서 제안 된 솔루션을 테스트하기 위해 샘플 데이터를 생성 했습니다 .


7
계층 적 베이지안 모델은 데이터에 설명 된대로 구조를 이용하는 데 매우 자연 스럽습니다. 라돈 오염 모델링에 대한 고전적인 예를 확인하십시오 mc-stan.org/documentation/case-studies/radon.html
Vladislavs Dovgalecs

이 Kaggle 시작하기 튜토리얼 도전을 살펴보세요 kaggle.com/c/titanic을 . 성별, 티켓 유형 등과 같은 사람에 대한 다양한 속성을 고려하여 타이타닉 재난에서 살아남 았는지 예측하는 비슷한 문제를 다루고 있습니다. 등
Vihari Piratla

6
@VihariPiratla 의견을 보내 주셔서 감사합니다.하지만 타이타닉 데이터 셋과 챌린지에 익숙하며, 내가 요청한 중첩 데이터 문제와 어떻게 관련이 있는지 알 수 없습니다.
Ben

로지스틱 회귀 / SVM과 같은 모델에 L2 / L1 정규화를 사용하면 도움이됩니다 (가난한 계층 적 베이). 효과적으로 계수에 불이익을 주므로 계수가 현저하게 (즉, 많은 데이터에서) 오류를 개선하지 않는 한 0에 가깝게 설정됩니다. 그리고 교차 검증을 통해 처벌 수준을 결정합니다
seanv507

9 번 도시에 사는 사람의 소득을 예측하고 싶습니까?
jan-glx

답변:


14

이 사이트에 대한 다음 질문에서 영감을 얻어이 문제에 대해 잠시 생각하고 있습니다.

먼저 계층 적 / 중첩 데이터에 대한 혼합 효과 모델을 소개하고 간단한 2 단계 모델 (도시 내에 중첩 된 샘플)에서 시작하겠습니다. 들어 j 번째의 샘플 나는 번째시, 우리는 결과 물품 와이나는j 공변량의 함수로서의 엑스나는j (성별, 연령 등의 변수들의리스트)를

와이나는j=에프(엑스나는j)+나는+ϵ나는j,
여기서 나는 는 각 도시의 랜덤 차단입니다. . 우리가 가정한다면 U에게 난을 하고 ε I J 평균 0 정규 분포를 따라 편차를 σ 2 U를 σ 2 의 경험적 베이지안 (EB)를 추정 u는 I 이다 I = σ 2 Uj=1,,나는나는ϵ나는jσ2σ2나는 ˉ Y. =1
^나는=σ2σ2+σ2/나는(와이¯나는.에프(엑스¯나는.)),
,f( ˉ x i.)=1와이¯나는.=1나는나는나는와이나는j우리가 취급하는 경우( ˉ Y.-F는( ˉ X I.))OLS (통상 최소 제곱)의 추정값으로서U가가중치는 다음 EB 추정치는 0의 가중 합이되고 OLS가 추정 및 샘플 크기의 함수 증가ni. 최종 예측은 f를 (XIJ)+ U I에프(엑스¯나는.)=1나는나는나는에프(엑스나는j).(와이¯나는.에프(엑스¯나는.))나는나는F ( X I J는 ) 선형 회귀 또는 랜덤 포레스트 같은 기계 학습 방법에서 고정 효과의 추정치이다. 이는 도시, 지역, 국가에 중첩 된 샘플과 같이 모든 수준의 데이터로 쉽게 확장 할 수 있습니다. 트리 기반 방법 외에SVM기반 방법이있습니다.
에프^(엑스나는j)+^나는,
에프^(엑스나는j)

임의 포리스트 기반 방법의 경우 CRAN MixRF()의 R 패키지 MixRF를 사용해 볼 수 있습니다 .


나는에프나는

에프나는엑스나는j'나는,

6

두 개의 변수와 간단한 중첩 만 있다고 가정하면 계층 적 베이 즈 모델을 언급하는 다른 사람들의 의견을 에코합니다. 트리 기반 메소드에 대한 선호도를 언급했지만 특별한 이유가 있습니까? 최소한의 예측 변수를 사용하면 선형성이 종종 잘 작동하는 유효한 가정이며 모든 모델 잘못 지정은 잔차 그림을 통해 쉽게 확인할 수 있습니다.

많은 예측 변수가있는 경우 @Randel이 언급 한 EM 접근 방식을 기반으로하는 RF 예제는 확실히 선택 사항입니다. 내가 아직 보지 못한 또 다른 옵션은 모델 기반 부스팅을 사용하는 것입니다 ( Rmboost 패키지를 통해 사용 가능 ). 기본적으로이 방법을 사용하면 다양한 기본 학습자 (선형 및 비선형)를 사용하여 고정 효과의 기능적 형태를 추정 할 수 있으며, 임의의 효과 추정치는 해당 특정 요인의 모든 수준에 대해 능선 기반 페널티를 사용하여 근사됩니다. 백서는 매우 훌륭한 튜토리얼입니다 (랜덤 효과 기반 학습자는 11 페이지에서 설명합니다).

샘플 데이터를 살펴 보았지만 도시, 지역 및 국가의 랜덤 효과 변수 만있는 것처럼 보입니다. 이 경우 예측 변수와 상관없이 해당 요인에 대한 경험적 베이 추정치를 계산하는 것이 유용합니다. 높은 수준 (예 : 국가)에서 결과에 설명 된 편차가 최소이므로 일반적으로 시작하는 것이 좋습니다. 따라서 모델에 추가하는 것이 좋습니다.


1
mboost패키지 소개 +1
Randel

내가 작업하고 있는 실제 데이터에는 두 가지 이상의 변수가있어 간단한 예제 (예 : 비 선형성, 코드 종속, 결측 값, 범주 값 등)로 선택되지 않는 많은 실제 혼란을 추가합니다. . 내 경험상 트리 기반 학습자는 모든 실제 혼란을 처리하는 데 최선을 다합니다. (XGBoost가 Kaggle에서 거의 모든 구조화 된 데이터 경쟁에서이기는 이유가 있습니다.) mboost흥미롭게 들립니다. 감사합니다
Ben

1
나는 그 상황에서 나무가 확실히 유용 할 수 있다는 데 동의했다. 이 경우 @Randel의 제안을 고수하는 것이 좋습니다. Mboost에는 또한 나무 기반 학습자가 있으며이 효과는 임의 효과 기본 학습자와 함께 유용하게 사용될 수 있습니다.
dmartin

3

이것은 답변이 아니라 의견이나 제안에 가깝지만 여기서 중요한 질문을한다고 생각합니다. 다단계 데이터로 독점적으로 일하는 사람으로서, 다단계 데이터로 기계 학습에 대해 거의 발견하지 못했다고 말할 수 있습니다. 그러나 최근 버지니아 대학교 (University of Virginia)의 정량 심리학 박사 학위를받은 Dan Martin은 다단계 데이터와 함께 회귀 트리 사용에 대한 논문을 발표했습니다. 아래는 이러한 목적 중 일부를 위해 작성한 R 패키지의 링크입니다.

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

또한, 그의 논문을 찾을 수 있습니다 :

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


2
참조 주셔서 감사합니다, Erik! 내 논문에서 명심해야 할 한 가지는 다중 수준 데이터 구조에 노출 될 때 포리스트 메서드가 "즉시"수행되는 방식 만 평가한다는 것입니다. @Randel이 언급 한 방법은 3 장에서 문헌 검토로 논의되었지만 시뮬레이션 연구는 주로 Breiman의 원래 알고리즘과 조건부 추론 트리 / 포리스트를 조사했습니다.
dmartin

1

RFcluster()R에 대한 gamclass 패키지 의 기능 은 "임의적이고 비효율적이지만 임의의 포리스트가 클러스터 된 범주 형 결과 데이터와 함께 작동하도록 조정합니다". 다음은 도움말 페이지의 예입니다 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)

이것은 내 기계가 0.57로 제공하는 OOB 정확도 ( "백"이 개별 스피커 샘플의 백이 아닌 스피커 백입니다)를 반환합니다.


0

당신은 한 번 봐 가지고 할 수 있습니다 metboost 밀러 PJ 등을 :. metboost : 계층 적으로 클러스터 된 데이터를 사용한 탐색 적 회귀 분석.

요약 : 우리는 계층 적으로 클러스터 된 데이터를 위해 metboost라는 강화 된 의사 결정 의사 결정 트리의 확장을 제안합니다. 각 트리의 구조를 그룹 전체에서 동일하게 제한하지만 터미널 노드 수단이 다를 수 있습니다. 이를 통해 예측 자와 분할 지점이 각 그룹 내에서 다른 예측으로 이어지고 비선형 그룹 별 효과와 유사합니다. 중요하게도 metboost는 결 측값을 포함 할 수있는 수천 개의 관측치 및 수백 개의 예측 변수에 대해 계산 가능한 것으로 남아 있습니다.

R 패키지 mvtboost 에서 구현됩니다.


1
링크가 죽을 수 있으므로 링크 (특히 첫 번째 링크) 대신 참조를 제공하십시오.
Antoine
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.