Я не уверен, что многие приятные функции xgboost
можно комбинировать так, как мне нужно (?), Но то, что я пытаюсь сделать, - запустить Случайный лес с разреженными предсказателями данных для переменной, зависящей от нескольких классов.xgboost Случайный лес с разреженными матричными данными и многочленом Y
Я знаю, что xgboost
может сделать любой 1 из этих вещей:
- Random Forest с помощью тонкой настройки параметров:
xgboost
bst <- xgboost(data = train$data, label = train$label, max.depth = 4, num_parallel_tree = 1000, subsample = 0.5, colsample_bytree =0.5, nround = 1, objective = "binary:logistic")
bst <- xgboost(data = sparse_matrix, label = output_vector, max.depth = 4, eta = 1, nthread = 2, nround = 10,objective = "binary:logistic")
- Multinomial (мультиклассируют) зависимые переменные модели через
multi:softmax
илиmulti:softprob
xgboost(data = data, label = multinomial_vector, max.depth = 4, eta = 1, nthread = 2, nround = 10,objective = "multi:softmax")
Однако, я бегу в ошибку относительно несоответствующего длины, когда я пытаюсь сделать все они сразу:
sparse_matrix <- sparse.model.matrix(TripType~.-1, data = train)
Y <- train$TripType
bst <- xgboost(data = sparse_matrix, label = Y, max.depth = 4, num_parallel_tree = 100, subsample = 0.5, colsample_bytree =0.5, nround = 1, objective = "multi:softmax")
Error in xgb.setinfo(dmat, names(p), p[[1]]) :
The length of labels must equal to the number of rows in the input data
length(Y)
[1] 647054
length(sparse_matrix)
[1] 66210988200
nrow(sparse_matrix)
[1] 642925
Ошибка длины я получаю сравниваю длину моего одного зависимого вектора мульти-класса (назовет его п) к длине разреженного индекса матрицы, который я считаю, является J * п для j предикторов.
Конкретный вариант использования здесь - конкурс Kaggle.com Walmart (данные общедоступны, но очень большие по умолчанию - около 650 000 строк и несколько тысяч функций кандидата). Я запускал многомодовые модели RF на нем через H2O, но похоже, что многие другие люди используют xgboost
, поэтому я задаюсь вопросом, возможно ли это.
Если это невозможно, то мне интересно, можно ли/следовало бы оценить каждый уровень зависимой переменной отдельно и попытаться прийти к результатам?