SageMaker

Übergabe eines Numpy-Arrays an predict_fn bei der Inferenz für das xgboost-Modell

Ich habe ein Modell,das lokal trainiert und in SageMaker eingesetzt wird,um Schlussfolgerungen zu ziehen/Endpunkte aufzurufen.Wenn ich versuche,Vorhersagen zu treffen,erhalte ich die folgende Ausnahme.

raise ValueError('Input numpy.ndarray must be 2 dimensional')
ValueError: Input numpy.ndarray must be 2 dimensional
    

Mein model ist ein xgboost-Modell mit etwas Vorverarbeitung (variable Codierung) und Hyperparameter-Tuning. So sieht das Modellobjekt aus model

XGBRegressor(colsample_bytree=xxx, gamma=xxx,
             learning_rate=xxx, max_depth=x, n_estimators=xxx,
             subsample=xxx)

Meine Testdaten sind eine Zeichenkette mit Float-Werten,die in ein Array umgewandelt wird,da die Daten als Numpy-Array übergeben werden müssen.

testdata = [........., 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 2000, 200, 85, 412412, 123, 41, 552, 50000, 512, 0.1, 10.0, 2.0, 0.05]

Ich habe versucht,das Numpy-Array von 1d auf 2d umzuformen,aber das funktioniert nicht,da die Anzahl der Features zwischen Testdaten und trainiertem Modell nicht übereinstimmt.

Meine Frage ist,wie übergebe ich ein Numpy-Array gleich die Länge der#von Features in trainierten Modell? Ich bin in der Lage,Vorhersagen zu machen,indem ich Testdaten als Liste lokal übergebe.

Weitere Informationen zum Inferenzskript finden Sie hier: https://github.com/aws-samples/amazon-sagemaker-local-mode/blob/main/xgboost_script_mode_local_training_and_serving/code/inference.py

Traceback (most recent call last):
File "/miniconda3/lib/python3.6/site-packages/sagemaker_containers/_functions.py", line 93, in wrapper
return fn(*args, **kwargs)
File "/opt/ml/code/inference.py", line 75, in predict_fn
prediction = model.predict(input_data)
File "/miniconda3/lib/python3.6/site-packages/xgboost/sklearn.py", line 448, in predict
test_dmatrix = DMatrix(data, missing=self.missing, nthread=self.n_jobs)
File "/miniconda3/lib/python3.6/site-packages/xgboost/core.py", line 404, in __init__
self._init_from_npy2d(data, missing, nthread)
File "/miniconda3/lib/python3.6/site-packages/xgboost/core.py", line 474, in _init_from_npy2d
raise ValueError('Input numpy.ndarray must be 2 dimensional')
ValueError: Input numpy.ndarray must be 2 dimensional




Versuchen Sie,Ihre Liste in ein Numpy-2d-Array zu konvertieren,etwa so:

a = np.array([1, 2, 3])

und ersetzen Sie [1, 2, 3] durch Ihre Liste.




XGBoost,ähnlich wie scikit-learn,erwartet X als 2D-Daten (n_samples,n_features).Um eine Probe vorherzusagen,müssen Sie Ihre Liste oder Ihren Merkmalsvektor in ein 2D-Array umwandeln.

import numpy as np

lst = [1, 2, 3]
lst_reshaped = np.array(lst).reshape((1,-1))
clf.predict(lst_reshaped)