Я получаю сообщение об ошибке для нужного набора данных при попытке использовать метод изолирующего леса для обнаружения аномалий. Однако у меня есть совершенно другой набор данных, с которым он работает нормально. Что может вызвать эту проблему?
isolationforest Model Build progress: | (failed) | 0% Traceback (most recent call last): File
"h2o_test.py", line 149, in <module> isoforest.train(x=iso_forest.col_names[0:65],
training_frame=iso_forest) File "/home/ec2-user/.local/lib/python3.7/site-
packages/h2o/estimators/estimator_base.py", line 107, in train self._train(parms,
verbose=verbose) File "/home/ec2-user/.local/lib/python3.7/site-
packages/h2o/estimators/estimator_base.py", line 199, in _train
job.poll(poll_updates=self._print_model_scoring_history if verbose else None) File
"/home/ec2-user/.local/lib/python3.7/site-packages/h2o/job.py", line 89, in poll
"\n{}".format(self.job_key, self.exception, self.job["stacktrace"])) OSError: Job with key
$03017f00000132d4ffffffff$_92ee3e892f7bc86460e80153eaec4b70 failed with an exception:
java.lang.AssertionError stacktrace: java.lang.AssertionError at
hex.tree.DHistogram.init(DHistogram.java:350) at
hex.tree.DHistogram.init(DHistogram.java:343) at
hex.tree.ScoreBuildHistogram2$ComputeHistoThread.computeChunk(ScoreBuildHistogram2.java:427)
at hex.tree.ScoreBuildHistogram2$ComputeHistoThread.map(ScoreBuildHistogram2.java:408) at
water.LocalMR.compute2(LocalMR.java:89) at water.LocalMR.compute2(LocalMR.java:81) at
water.H2O$H2OCountedCompleter.compute(H2O.java:1704) at
jsr166y.CountedCompleter.exec(CountedCompleter.java:468) at
jsr166y.ForkJoinTask.doExec(ForkJoinTask.java:263) at
jsr166y.ForkJoinPool$WorkQueue.popAndExecAll(ForkJoinPool.java:906) at
jsr166y.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:979) at
jsr166y.ForkJoinPool.runWorker(ForkJoinPool.java:1479) at
jsr166y.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:104)
with open('/home/webapp/flask-api/tmp_rows/temp_file2.csv', 'w+') as tmp_file:
temp_name = "/tmp_rows/temp_file2.csv"
tmp_file.write(text_stream.getvalue())
tmp_file.close()
h2o.init()
print("TEMP_nAME", temp_name)
iso_forest = h2o.import_file('/home/webapp/flask-api/{0}'.format(temp_name))
seed = 12345
ntrees = 100
isoforest = h2o.estimators.H2OIsolationForestEstimator(
ntrees=ntrees, seed=seed)
isoforest.train(x=iso_forest.col_names[0:65], training_frame=iso_forest)
predictions = isoforest.predict(iso_forest)
print(predictions)
h2o.cluster().shutdown()
CSV создается нормально, поэтому, похоже, с этим нет проблем. Что вызывает эту ошибку Java? Я даже увеличил размер своего ec2, чтобы иметь больше оперативной памяти, но это тоже не решило проблему.
@thatotherguy Извините за поздний ответ и спасибо за ваш. У меня действительно есть такой столбец, в нем только нули. Я попробую удалить этот столбец.
Также извините, что не смог опубликовать CSV-файл, он действительно содержит конфиденциальную информацию.






Я предполагаю, что это наберет близкое количество голосов, потому что именно данные будут вызывать проблему, но данные не предоставлены. Но возможно ваши данные не могут быть предоставлены, или их слишком много.
Поэтому я бы предложил попробовать просто использовать первую/половину второй половины данных, и если только один или другой триггер вызывает их, продолжайте повторять, чтобы посмотреть, сможете ли вы сузить их до одной строки.
То же самое для столбцов, например. попробуйте 10-15 столбцов одновременно, чтобы увидеть, вызывает ли это только один столбец или, возможно, определенные типы столбцов.
Конечно, если это у вас есть, у вас также есть решение: исключить проблемный столбец/строку. Но вам также будет достаточно отправить отчет об ошибке в H2O (похоже, это можно сделать по адресу https://github.com/h2oai/h2o-3/issues)
Эврика!! Спасибо, Даррен, я объединил фрейм данных, чтобы использовать только первые 10 строк, и получил результат, ты потрясающий. (Я не смог опубликовать CSV, поскольку данные конфиденциальны)
AssertionError означает, что это внутренняя ошибка в h2o. Вот утверждение, к которому вы пришли. Возможно, у вас есть столбец в CSV-файле, который содержит одно значение?