#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)
вместо этого классификацию.