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로 전달할 희소 행렬로 만들 수 있습니까?