Как разрешить NonSPDMatrixException в h2o GLM-классификаторе для большого набора данных? - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь запустить разные классификаторы, используя оценщик H2O.Однако при запуске классификатора GLM я получаю сообщение об ошибке.Вставляем соответствующий код ниже.

CLASSIFIERS = {
'RandomForest': H2ORandomForestEstimator(ntrees=200, keep_cross_validation_predictions=True, stopping_rounds=2, score_each_iteration=True, model_id="rf_cv_all_folds_"+CLASSIFIER_DATE_STR, seed=1000000),
'RandomForest_depth6': H2ORandomForestEstimator(ntrees=200, max_depth=6,keep_cross_validation_predictions=True, stopping_rounds=2, score_each_iteration=True, model_id="rf_cv_all_folds_"+CLASSIFIER_DATE_STR, seed=1000000),
'GLM': H2OGeneralizedLinearEstimator(family= "binomial", lambda_ = 0, compute_p_values = True, remove_collinear_columns=True, keep_cross_validation_predictions=True, model_id="glm_cv_all_folds_"+CLASSIFIER_DATE_STR, seed=1000000), # todo: regularization? http://docs.h2o.ai/h2o/latest-stable/h2o-docs/data-science/glm.html#regularization-parameters-in-glm
'GLM': H2OGeneralizedLinearEstimator(family= "binomial", lambda_ = 0, compute_p_values = True, remove_collinear_columns=True, keep_cross_validation_predictions=True, model_id="glm_cv_all_folds_"+CLASSIFIER_DATE_STR, seed=1000000, max_iterations=10000000), # todo: regularization? http://docs.h2o.ai/h2o/latest-stable/h2o-docs/data-science/glm.html#regularization-parameters-in-glm
'GBM': H2OGradientBoostingEstimator(ntrees=200, learn_rate=0.2, max_depth=20, stopping_tolerance=0.01, stopping_rounds=2, score_each_iteration=True, keep_cross_validation_predictions=True, model_id="gbm_cv_all_folds_"+CLASSIFIER_DATE_STR, seed=1000000),
'NaiveBayes': H2ONaiveBayesEstimator(keep_cross_validation_predictions=True,model_id="naive_bayes_cv_all_folds_"+CLASSIFIER_DATE_STR, seed=1000000)
} 

При выполнении кода на примере набора данных я начал получать следующее «UserWarning» для классификатора GLM.

C:\Program Files\Anaconda2\lib\site-packages\h2o\job.py:69: UserWarning: Reached maximum number of iterations 50!
  warnings.warn(w)

Однако, когда я пыталсязапустив код для всего набора данных (3 ГБ), я получаю следующее сообщение об ошибке для классификатора GLM.

   Job with key $03017f00000132d4ffffffff$_94bc493aa6606867c224fe00dac44410 failed with an exception: hex.gram.Gram$NonSPDMatrixException
    stacktrace: 
    hex.gram.Gram$NonSPDMatrixException
            at hex.gram.Gram$Cholesky.solve(Gram.java:664)
            at hex.gram.Gram$Cholesky$1.compute(Gram.java:607)
            at jsr166y.RecursiveAction.exec(RecursiveAction.java:160)
            at jsr166y.ForkJoinTask.doExec(ForkJoinTask.java:263)
            at jsr166y.ForkJoinTask.doInvoke(ForkJoinTask.java:360)
            at jsr166y.ForkJoinTask.invokeAll(ForkJoinTask.java:741)
            at hex.gram.Gram$Cholesky.solve(Gram.java:611)
            at hex.gram.Gram$Cholesky.getInv(Gram.java:617)
            at hex.glm.GLM$GLMDriver.fitModel(GLM.java:1119)
            at hex.glm.GLM$GLMDriver.computeSubmodel(GLM.java:1169)
            at hex.glm.GLM$GLMDriver.computeImpl(GLM.java:1254)
            at hex.ModelBuilder$Driver.compute2(ModelBuilder.java:218)
            at hex.glm.GLM$GLMDriver.compute2(GLM.java:571)
            at water.H2O$H2OCountedCompleter.compute(H2O.java:1395)
            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)

Даже когда я увеличиваю max_iternations = 1000000 для полного набора данных, я получаю ту же ошибку.

Любая помощь в этом отношении будет полезна.Спасибо.

...