chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
import numpy as np
|
||||
|
||||
import shap
|
||||
|
||||
|
||||
def model(x):
|
||||
return np.array([np.linalg.norm(x)])
|
||||
|
||||
|
||||
X = np.array([[3, 4], [5, 12], [7, 24]])
|
||||
y = np.array([5, 13, 25])
|
||||
explainer = np.array([[-1, 2], [-4, 2], [1, 2]])
|
||||
masker = X
|
||||
|
||||
|
||||
def test_update():
|
||||
"""This is to test the update function within benchmark/framework"""
|
||||
sort_order = "positive"
|
||||
|
||||
def score_function(true, pred):
|
||||
return np.mean(pred)
|
||||
|
||||
perturbation = "keep"
|
||||
scores = {"name": "test", "metrics": list(), "values": dict()}
|
||||
|
||||
shap.benchmark.update(model, X, y, explainer, masker, sort_order, score_function, perturbation, scores)
|
||||
|
||||
metric = perturbation + " " + sort_order
|
||||
|
||||
assert scores["metrics"][0] == metric
|
||||
assert len(scores["values"][metric]) == 3
|
||||
|
||||
|
||||
def test_get_benchmark():
|
||||
"""This is to test the get benchmark function within benchmark/framework"""
|
||||
metrics = {"sort_order": ["positive", "negative"], "perturbation": ["keep"]}
|
||||
scores = shap.benchmark.get_benchmark(model, X, y, explainer, masker, metrics)
|
||||
|
||||
expected_metrics = ["keep positive", "keep negative"]
|
||||
|
||||
assert set(expected_metrics) == set(scores["metrics"])
|
||||
assert len(scores["values"]) == 2
|
||||
|
||||
|
||||
def test_get_metrics():
|
||||
"""This is to test the get metrics function with respect to different selection method"""
|
||||
scores1 = {"name": "test1", "metrics": ["keep positive", "keep absolute"], "values": dict()}
|
||||
scores2 = {"name": "test2", "metrics": ["keep positive", "keep negative"], "values": dict()}
|
||||
benchmarks = {"test1": scores1, "test2": scores2}
|
||||
|
||||
expected_metrics1 = set(["keep positive"])
|
||||
expected_metrics2 = set(["keep positive", "keep negative", "keep absolute"])
|
||||
|
||||
assert set(shap.benchmark.get_metrics(benchmarks, lambda x, y: x.intersection(y))) == expected_metrics1
|
||||
assert set(shap.benchmark.get_metrics(benchmarks, lambda x, y: x.union(y))) == expected_metrics2
|
||||
Reference in New Issue
Block a user