В настоящее время я работаю с h2o.xgboost в h2o версии 3.26.0.2 и получаю java .lang.NullPointerException (полная ошибка ниже).
Набор данных составляет 25 ГБ в формате CSV с 6.000.000 строк (trian + test), и информация о кластере, которую я использую:
R is connected to the H2O cluster:
H2O cluster uptime: 30 minutes 18 seconds
H2O cluster timezone: Europe/Madrid
H2O data parsing timezone: UTC
H2O cluster version: 3.26.0.2
H2O cluster version age: 7 months and 12 days !!!
H2O cluster name: H2O_started_from_R_xxx
H2O cluster total nodes: 1
H2O cluster total memory: 343.27 GB
H2O cluster total cores: 1
H2O cluster allowed cores: 48
H2O cluster healthy: TRUE
H2O Connection ip: localhost
H2O Connection port: 60576
H2O Connection proxy: NA
H2O Internal Security: FALSE
H2O API Extensions: Amazon S3, XGBoost, Algos, AutoML, Core V3, Core V4
R Version: R version 3.5.1 (2018-07-02)
Типы данных h2o:
types N
1: int 319
2: real 316
И мой код:
start <- proc.time()
model_trans.h2o <- h2o::h2o.xgboost(
distribution = "gaussian"
,model_id = "xgb_test"
,training_frame = data_train.h2o
,validation_frame = data_test.h2o
,x = vars
,y = target_str
,seed = 1234
,ntrees = 1500
,learn_rate = 0.08
,col_sample_rate_per_tree = 0.8
,max_dept = 5
,verbose = F
)
end <- proc.time(); end - start;
Ошибка выдается обычно через 2 минуты, и я сделал следующие тесты:
- Используйте меньше столбцов. С 500 столбцы работают нормально (я не использовал случайную выборку только 1: 500 из имен столбцов).
- Используйте меньше данных. Если я уменьшу данные, скажем, 2.000.000 строк, он работает нормально также.
После этих тестов я догадался, что происходит то, что h2o.xgboost как-то не подготовлен обрабатывать такое большое количество данных, и когда пытается расширить его, «матрица» разрушает.
Может ли быть ошибкой версия h2o?
Можно ли решить эту проблему без обновления версии? Поскольку модели h2o не совместимы с кросс-версиями, это может стать для меня проблемой.
Заранее спасибо!
Примечание 1:
У меня есть Я выполнил свое предыдущее исследование по этой теме и нашел только:
Что такое исключение NullPointerException и как его исправить? ТАКОЕ обсуждение без исключения нулевого указателя
https://0xdata.atlassian.net/browse/PUBDEV-6921 На каком-то форуме h2o без четкого ответа (этот второй довольно бесполезен)
Примечание 2: Полная ошибка:
java.lang.NullPointerException
java.lang.NullPointerException
at hex.tree.xgboost.matrix.SparseMatrixFactory$NestedArrayPointer.set(SparseMatrixFactory.java:87)
at hex.tree.xgboost.matrix.SparseMatrixFactory$InitializeCSRMatrixFromChunkIdsMrFun.map(SparseMatrixFactory.java:178)
at water.LocalMR.compute2(LocalMR.java:84)
at water.LocalMR.compute2(LocalMR.java:76)
at water.LocalMR.compute2(LocalMR.java:76)
at water.LocalMR.compute2(LocalMR.java:76)
at water.LocalMR.compute2(LocalMR.java:76)
at water.LocalMR.compute2(LocalMR.java:76)
at water.LocalMR.compute2(LocalMR.java:76)
at water.LocalMR.compute2(LocalMR.java:76)
at water.H2O$H2OCountedCompleter.compute(H2O.java:1417)
at jsr166y.CountedCompleter.exec(CountedCompleter.java:468)
at jsr166y.ForkJoinTask.doExec(ForkJoinTask.java:263)
at jsr166y.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:974)
at jsr166y.ForkJoinPool.runWorker(ForkJoinPool.java:1477)
at jsr166y.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:104)