[Python] How to save shap summary_plot as image file

Discussão em 'Python' iniciado por Stack, Abril 25, 2025.

  1. Stack

    Stack Membro Participativo

    I have the following script that is working

    import numpy as np
    import shap
    from tensorflow import keras
    from tensorflow.keras import layers
    X = np.array([[(1,2,3,3,1),(3,2,1,3,2),(3,2,2,3,3),(2,2,1,1,2),(2,1,1,1,1)],
    [(4,5,6,4,4),(5,6,4,3,2),(5,5,6,1,3),(3,3,3,2,2),(2,3,3,2,1)],
    [(7,8,9,4,7),(7,7,6,7,8),(5,8,7,8,8),(6,7,6,7,8),(5,7,6,6,6)],
    [(7,8,9,8,6),(6,6,7,8,6),(8,7,8,8,8),(8,6,7,8,7),(8,6,7,8,8)],
    [(4,5,6,5,5),(5,5,5,6,4),(6,5,5,5,6),(4,4,3,3,3),(5,5,4,4,5)],
    [(4,5,6,5,5),(5,5,5,6,4),(6,5,5,5,6),(4,4,3,3,3),(5,5,4,4,5)],
    [(1,2,3,3,1),(3,2,1,3,2),(3,2,2,3,3),(2,2,1,1,2),(2,1,1,1,1)]])
    y = np.array([0, 1, 2, 2, 1, 1, 0])

    # Updated model with correct input shape
    model = keras.Sequential([
    layers.Conv1D(128, kernel_size=3, activation='relu',input_shape=(5,5)),
    layers.MaxPooling1D(pool_size=2),
    layers.LSTM(128, return_sequences=True),
    layers.Flatten(),
    layers.Dense(128, activation='relu'),
    layers.Dense(5, activation='softmax') # Adjust the number of output units based on your problem (3 for 3 classes)
    ])

    model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

    # Train the model
    model.fit(X, y, epochs=10)

    explainer = shap.GradientExplainer(model, X)
    shap_values = explainer.shap_values(X)
    #print(shap_values)

    cls = 0
    idx = 0
    shap.summary_plot(shap_values[cls][:,idx,:], X[:,idx,:])



    I want to save shap.summary_plot as an image file in my folder. How can I do that?

    I am trying the following code but it is saving an empty figure.

    # Save the plot using matplotlib
    import matplotlib.pyplot as plt

    save_path = 'shap_summary_plot.png'
    plt.savefig(save_path)
    plt.close()


    Anyone know how to plot this?

    Continue reading...

Compartilhe esta Página