TabularLearner np.array predictions

I’m trying to work with DALEX package. The package requires the prediction function to be Function that takes two parameters (model, data) and returns a np.ndarray (1d) with model predictions (default is predict method extracted from the model). NOTE: This function needs to work with data as pd.DataFrame. I know that learn.predict(df.iloc[0])[2] returns a tensor prediction. How can I get all the predictions in a 1d np.array? Thanks! I’ve been struggling for a while.

You can refer this tutorial

Use the learn.get_preds() method to do batch prediction. Call numpy() method on the tensor to convert it.

1 Like

Thanks! However, DALEX takes fastai’s prediction function and a dataframe as arguments. For .get_preds(), 1) DALEX need a dataframe to pass into fastai’s prediction function in a DALEX explainer and 2) the prediction function have to return 1d array. I haven’t figured out how to change the tensor tuple to be a 1d array, and it seems .get_preds() consumes a dataloaders, not a dataframe.

I was looking at this tensorflow example and tried to do the same in fastai.

from fastai.tabular.all import *
import pandas as pd
import dalex as dx

df = pd.read_csv("https://raw.githubusercontent.com/pbiecek/xai-happiness/main/happiness.csv", index_col=0)
X, y = df.drop('score', axis=1), df.score
splits = RandomSplitter(valid_pct=0.2)(range_of(df))
to = TabularPandas(df, procs=[Normalize], cont_names=list(X.columns), y_names='score', splits=splits)
dls = to.dataloaders(bs=16)
learn = tabular_learner(dls, layers=[12,8,12,6], metrics=[rmse,mae])
learn.fit_one_cycle(200)

def my_predict(model, data):
  tdl = model.dls.test_dl(data)
  return model.get_preds(dl=tdl)[0].squeeze().numpy()

explainer = dx.Explainer(learn, X, y, label='happiness', predict_function=my_predict)
explainer.model_performance()
explainer.model_parts().plot()
1 Like