SageMaker
pasar un array numpy a predict_fn al hacer inferencia para el modelo xgboost
Tengo un modelo entrenado localmente y desplegado en SageMaker para hacer inferencias/invocar el punto final.Cuando intento hacer predicciones,obtengo la siguiente excepción.
raise ValueError('Input numpy.ndarray must be 2 dimensional')
ValueError: Input numpy.ndarray must be 2 dimensional
Mi model
o es un modelo xgboost con algo de preprocesamiento (codificación variable) y ajuste de hiperparámetros. Así es como se ve el objeto model
o :
XGBRegressor(colsample_bytree=xxx, gamma=xxx,
learning_rate=xxx, max_depth=x, n_estimators=xxx,
subsample=xxx)
Mis datos de prueba son una cadena de valores flotantes que se convierten en un array ya que los datos deben pasarse como array de numpy.
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]
He intentado reformar el array numpy de 1d a 2d,sin embargo,eso no funciona ya que el número de características entre los datos de prueba y el modelo entrenado no coinciden.
Mi pregunta es cómo puedo pasar un array numpy igual a la longitud del#de características en el modelo entrenado? Soy capaz de hacer predicciones pasando los datos de prueba como una lista local.
Más información sobre el script de inferencia aquí: 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
Intenta convertir tu lista en un array numpy 2d de esta manera:
a = np.array([1, 2, 3])
y reemplaza [1, 2, 3]
con tu lista.
XGBoost,similar a scikit-learn,espera que X sea un dato 2D (n_muestras,n_características).Para predecir una muestra,es necesario remodelar su lista o vector de características a una matriz 2D.
import numpy as np
lst = [1, 2, 3]
lst_reshaped = np.array(lst).reshape((1,-1))
clf.predict(lst_reshaped)