Интеграция модели XGBoost Spark One на каждого работника - PullRequest
1 голос
/ 28 октября 2019

Попытка работать через этот блокнот https://databricks -prod-cloudfront.cloud.databricks.com / public / 4027ec902e239c93eaaa8714f173bcfc / 1526931011080774/3624187670661048/6320440561800420 / latest.html * 100 * 100 * 100 * 100 * 1003spark версии 2.4.3 и xgboost 0.90

Продолжайте получать эту ошибку ValueError: bad input shape () при попытке выполнить ...

features = inputTrainingDF.select("features").collect()
lables = inputTrainingDF.select("label").collect()

X = np.asarray(map(lambda v: v[0].toArray(), features))
Y = np.asarray(map(lambda v: v[0], lables))

xgbClassifier = xgb.XGBClassifier(max_depth=3, seed=18238, objective='binary:logistic')

model = xgbClassifier.fit(X, Y)
ValueError: bad input shape () 

и

def trainXGbModel(partitionKey, labelAndFeatures):
  X = np.asarray(map(lambda v: v[1].toArray(), labelAndFeatures))
  Y = np.asarray(map(lambda v: v[0], labelAndFeatures))
  xgbClassifier = xgb.XGBClassifier(max_depth=3, seed=18238, objective='binary:logistic' )
  model =  xgbClassifier.fit(X, Y)
  return [partitionKey, model]

xgbModels = inputTrainingDF\
.select("education", "label", "features")\
.rdd\
.map(lambda row: [row[0], [row[1], row[2]]])\
.groupByKey()\
.map(lambda v: trainXGbModel(v[0], list(v[1])))

xgbModels.take(1)
ValueError: bad input shape ()

Вы можете увидетьв записной книжке он работает для тех, кто его опубликовал. Я предполагаю, что это как-то связано с отображением X и Y np.asarray(), потому что логика просто пытается отобразить метку и объекты на функцию, но фигуры пусты. Получил работу, используя этот код

pandasDF = inputTrainingDF.toPandas()
series = pandasDF['features'].apply(lambda x : np.array(x.toArray())).as_matrix().reshape(-1,1)
features = np.apply_along_axis(lambda x : x[0], 1, series)
target = pandasDF['label'].values
xgbClassifier = xgb.XGBClassifier(max_depth=3, seed=18238, objective='binary:logistic' )
model = xgbClassifier.fit(features, target)

, однако хочу интегрировать в исходный вызов функции и понять, почему оригинальный ноутбук не работает. Буду признателен за дополнительные глаза для устранения этой проблемы!

1 Ответ

1 голос
/ 05 ноября 2019

Вы, вероятно, используете python3. Проблема в том, что в python3 map функция возвращает объект-итератор, а не коллекцию. Все, что вам нужно сделать, чтобы исправить этот пример, это изменить map -> list(map(...)):

def trainXGbModel(partitionKey, labelAndFeatures):
  X = np.asarray(list(map(lambda v: v[1].toArray(), labelAndFeatures)))
  Y = np.asarray(list(map(lambda v: v[0], labelAndFeatures)))

Или вы можете использовать np.fromiter для преобразования итерируемого объекта в массив numpy.

...