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)