# Using Lime on a binary classification neural network

I would like to use Lime to interpret a neural network model. For the sake of this question, I made a simple Dense model using this dataset:

https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv

To make this dataset similar to the one I'm using, I added a header row to the .cvs file, and cut the labels (y) and pasted them into a new .cvs file.

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn import preprocessing

from keras.models import Sequential
from keras.layers import Dense, Dropout
from keras import regularizers

import lime.lime_tabular

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.1, random_state=0)
min_max_scaler = preprocessing.MinMaxScaler()
x_train = min_max_scaler.fit_transform(x_train)
x_test = min_max_scaler.fit_transform(x_test)

model = Sequential()
print(model.summary())
model.compile(optimizer='rmsprop',
loss='binary_crossentropy',
metrics=['accuracy'])

model.fit(x_train, y_train, epochs=50, validation_data=(x_test, y_test), batch_size=32)

print(x)
print(y)

explainer = lime.lime_tabular.LimeTabularExplainer(x, feature_names=list(x), class_names=[0, 1], mode='classification')
exp = explainer.explain_instance(x_test[0], model.predict, num_features=8)
exp.show_in_notebook(show_table=True, show_all=False)


This is the two printed pandas dataframes as well as the error I'm getting:

     preg  pl_gl  bl_pr  tr_sk  ins   bmi   dpf  age
0       6    148     72     35    0  33.6   627   50
1       1     85     66     29    0  26.6   351   31
2       8    183     64      0    0  23.3   672   32
3       1     89     66     23   94  28.1   167   21
4       0    137     40     35  168  43.1  2288   33
..    ...    ...    ...    ...  ...   ...   ...  ...
763    10    101     76     48  180  32.9   171   63
764     2    122     70     27    0  36.8   340   27
765     5    121     72     23  112  26.2   245   30
766     1    126     60      0    0  30.1   349   47
767     1     93     70     31    0  30.4   315   23

[768 rows x 8 columns]
label
0        1
1        0
2        1
3        0
4        1
..     ...
763      0
764      0
765      0
766      1
767      0

[768 rows x 1 columns]
Traceback (most recent call last):
File "/home/Liz/src/programming/predicting_quality.py", line 346, in <module>
explainer = lime.lime_tabular.LimeTabularExplainer(x, feature_names=list(x), class_names=[0, 1], mode='classification')
File "/home/Liz/src/programming/nova/lib/python3.6/site-packages/lime/lime_tabular.py", line 218, in __init__
random_state=self.random_state)
File "/home/Liz/src/programming/nova/lib/python3.6/site-packages/lime/discretize.py", line 180, in __init__
random_state=random_state)
File "/home/Liz/src/programming/nova/lib/python3.6/site-packages/lime/discretize.py", line 51, in __init__
bins = self.bins(data, labels)
File "/home/Liz/src/programming/nova/lib/python3.6/site-packages/lime/discretize.py", line 185, in bins
qts = np.array(np.percentile(data[:, feature], [25, 50, 75]))
File "/home/Liz/src/programming/nova/lib/python3.6/site-packages/pandas/core/frame.py", line 2995, in __getitem__
indexer = self.columns.get_loc(key)
File "/home/Liz/src/programming/nova/lib/python3.6/site-packages/pandas/core/indexes/base.py", line 2897, in get_loc
return self._engine.get_loc(key)
File "pandas/_libs/index.pyx", line 107, in pandas._libs.index.IndexEngine.get_loc
File "pandas/_libs/index.pyx", line 109, in pandas._libs.index.IndexEngine.get_loc
TypeError: '(slice(None, None, None), 0)' is an invalid key


I could only find examples of decision forests for this type of binary classification using Lime[1], or neural networks that use image classification[2].

Is it possible to use Lime with this type of neural network? If so, what mistake did I make (I suppose it would be in last three lines)?

# changed x to x_train