2016-05-06 8 views
0

Я тренируюсь DRFModel и оценивая получение исключения: Exception in thread "main" java.lang.ClassCastException: hex.ModelMetricsRegression cannot be cast to hex.ModelMetricsBinomial.Как заставить столбец H2OFrame по типу Integer в scala?

Данные имеют столбец, называемый «меткой», который содержит 0 или 1, и это целевой столбец: dRFParameters._response_column = "label". Похоже, что модель рассматривает значения целевого столбца как действительные числа.

У меня также возникла проблема с API-интерфейсом python и исправлена ​​с помощью следующего: H2OFrame: hdf['label'] = hdf['label'].asfactor(). Я новичок в scala и h2o. Мне было интересно, как лучше всего заставить h2o обрабатывать целевой столбец в H2OFrame как двоичный (Integer).

(Это мой первый вопрос на переполнение стека. Дайте мне знать, если мне нужно быть более конкретным или прикрепить весь код. Спасибо.)

ответ

1

Если кто-то еще может дать элегантный ответ на мой первоначальный вопрос, это было бы оценено. Но я нашел методы .replace() на H2OFrame, чтобы быть полезным. Я должен был использовать что-то вроде

for(i <- 0 until h2oFrame.numCols()) h2oFrame.replace(i, h2oFrame.vec(i).toCategoricalVec) 

, который решал мою проблему.

0

Решение, о котором вы говорили, доступно только в настоящее время в H2O.

Вы можете сделать это немного лучше, удалив возвращенный Vec, если вам больше не нужен этот Vec. Он удаляет предыдущий вектор из внутреннего хранилища DKV H2O. Удаление не выполняется автоматически, так как в некоторых случаях вы также можете сохранить старый Vec.

for(i <- 0 until h2oFrame.numCols()){ 
    h2oFrame.replace(i, h2oFrame.vec(i).toCategoricalVec).remove() 
} 

Если вы просто хотите, чтобы превратить одну колонку категориальные, вы можете сделать

h2oFrame.replace(h2oFrame.find("target"),h2oFrame.vec("target").toCategoricalVec).remove() 
+0

Спасибо. Хороший совет с '.remove()'! –