2017-09-05 3 views
0

XGB vignette을 읽는 중입니다.데이터 프레임의 XGB 스파 스 매트릭스

기차 데이터를 사용하고 있습니다. 위에서 설명한대로 데이터와 레이블 이 모두 목록에 저장됩니다.

희소 매트릭스에서 0을 포함하는 셀은 메모리에 저장되지 않습니다. 따라서 주로 0으로 만들어진 데이터 세트에서 메모리 크기가 줄어 듭니다. 그것 같은 데이터 세트를 가지고 매우 평소입니다.

그런 다음 비 네트가 밀도 매트릭스에도 작업하는 방법을 알려줍니다.

텍스트 데이터에서 파생 된 데이터 프레임이 있으므로 대부분의 값이 0이라는 점에서 매우 희소합니다. 나는 데이터 프레임을 XGB에 전달하고 있으며 실행하는 데 오랜 시간이 걸리지 만 예상대로 일 수 있습니다. 1M 관측, 92 변수에 대해 교육 중이며 15 개의 프로세서가있는 호스트 된 RStudio 64GB를 사용하고 있습니다 (터미널에서 모니터 할 때 사용 가능한 모든 프로세서를 사용하는 XGB도 표시됨).

제 질문은, 제 데이터 프레임에 변형을 만들어서 희소 행렬로 만들어야합니까? 어떻게 든 아마도 모델이 더 빨리 훈련 할 XGB에 대한 희소 행렬에 내 데이터 프레임 training_data을 변경하는 경우 궁금하기 때문에

library(tidyverse) 
library(caret) 
library(xgboost) 

## xgboost 
# set up parameter search 
xgb_grid = expand.grid( # stopped using differing permutations of parameters because training was taking so long 
    nrounds = 150, 
    eta = 0.3, # default 0.3; previously verified 0.3 was best model with 100k sample 
    max_depth = 6, # default 6; previously verified 6 was best model with 100k sample 
    gamma = 0, #default = 0 
    colsample_bytree = 1, # default = 1 
    min_child_weight = 1, # default = 1 
    subsample = 1 # default = 1 
) 

# fit a xgboost model 
print("begin xgb") 
mod_xgb <- train(
    cluster ~., 
    data = select(training_data, -id), 
    method = "xgbTree", 
    trControl = train_control, 
    na.action = na.pass, 
    tuneGrid = xgb_grid, 
    metric = "Kappa" 
) 

> str(training_data) 
'data.frame': 1000000 obs. of 92 variables: 
$ violat   : num 0 0 0 0 0 0 0 0 0 0 ... 
$ found   : num 0 0 0 0 0 0 0 0 0 0 ... 
$ person   : num 0 0 0 0 0 0 0 0 0 0 ... 
$ theft   : num 0 0 0 1 0 0 0 0 0 0 ... 
$ theft_from  : num 0 0 0 0 0 0 0 0 0 0 ... 

내가 부탁 해요? 그럴 거니?

어떻게 training_data를 XGBoost로 전달할 희소 행렬로 만들 수 있습니까?

답변

0

Matrix 패키지에는 희소 행렬 sparse.model.matrix()을 생성하는 다음 기능이 있습니다. xgboost 함수로 공급할 때 종속 변수 y가 스파 스 행렬과 동일한 길이인지 확인하기 위해 스파 스 행렬을 만들기 전에 데이터에서 NA를 제거하면 도움이 될 수 있습니다.

또한 필자의 교육 데이터에서 요인 수준을 기록하는 경향이 있으므로 보이지 않는 테스트 데이터 집합을 예측할 때 테스트 데이터가 교육 데이터와 동일한 요인 수준을 갖출 수 있습니다. 이렇게하면 테스트 데이터 행렬이 학습 행렬과 동일한 차원을 갖게됩니다. mtcars에서

예 :

f<-mpg~hp+as.factor(cyl) 
trainMatrix<-sparse.model.matrix(f,mtcars) 
관련 문제