H2O слияние оценок с исходным набором данных

#python #h2o

#python #h2o

Вопрос:

Я использую H2O для генерации прогнозов на большом наборе данных с идентификатором пользователя в качестве одного из столбцов. Однако, как только я набираю набор данных, набор данных прогнозов не содержит идентификатора… Единственное, что поддерживает работу, — это то, что порядок оценок соответствует порядку набора входных данных, что довольно неаккуратно, IMO.

Есть ли способ указать H2O либо сохранить столбец ID в наборе данных прогнозов, либо, альтернативно, добавить его после подсчета очков, но все еще в H2O?

Я не в восторге от перевода результатов в python или R вместе с набором данных с идентификаторами и использованием cbind и подобных, но, пожалуйста, сообщите, если это единственный вариант.

Ответ №1:

Да, вам просто нужно привязать информацию из фреймов, которые вы хотите использовать в качестве конечного результата. Вот полный пример: я делаю регрессию, чтобы предсказать рост пациента на основе его возраста и категории риска. (!)

 import h2o
h2o.init()

patients = {
  'age':[29, 33, 65],
  'height':[188, 157, 175.1],
  'name':["Tom", "Dick", "Harry"],
  'risk':['A', 'B', 'B']
  }

train = h2o.H2OFrame.from_python(
  patients,
  destination_frame="patients"
  )

m = h2o.estimators.H2ODeepLearningEstimator()
m.train(["age","risk"], "height", train)
p = m.predict(train)

train["name"].cbind(p["predict"])
  

Поскольку у меня нет никаких тестовых данных, для примера я прогнозирую данные обучения. Последний шаг — взять столбцы из train и объединить со столбцами из p . (При категоризации вы получите дополнительные столбцы, которые вы можете включать, а можете и не включать.)

ПРИМЕЧАНИЕ: Операция cbind выполняется в вашем кластере H2O, а не на клиенте. Таким образом, он отлично работает, если это 100 миллионов строк данных, распределенных по нескольким машинам.

Постскриптум Сделайте m.train(["age","height"], "risk", train) вместо этого классификацию.