chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
from typing import Any
|
||||
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
|
||||
import shap
|
||||
|
||||
|
||||
def test_dependence_one_string_feature():
|
||||
"""Test the dependence plot with a string feature."""
|
||||
X = _create_sample_dataset(string_features={"Sex"})
|
||||
|
||||
shap.dependence_plot("Sex", np.random.randn(*X.values.shape), X, interaction_index="Age", show=False)
|
||||
|
||||
|
||||
def test_dependence_two_string_features():
|
||||
"""Test the dependence plot with two string features."""
|
||||
X = _create_sample_dataset(string_features={"Sex", "Blood group"})
|
||||
|
||||
shap.dependence_plot("Sex", np.random.randn(*X.values.shape), X, interaction_index="Blood group", show=False)
|
||||
|
||||
|
||||
def test_dependence_one_string_feature_no_interaction():
|
||||
"""Test the dependence plot with no interactions."""
|
||||
X = _create_sample_dataset(string_features={"Sex"})
|
||||
|
||||
shap.dependence_plot("Sex", np.random.randn(*X.values.shape), X, interaction_index=None, show=False)
|
||||
|
||||
|
||||
def test_dependence_one_string_feature_auto_interaction():
|
||||
"""Test the dependence plot with auto interaction detection."""
|
||||
X = _create_sample_dataset(string_features={"Sex"})
|
||||
|
||||
shap.dependence_plot("Sex", np.random.randn(*X.values.shape), X, interaction_index="auto", show=False)
|
||||
|
||||
|
||||
def test_approximate_interactions():
|
||||
"""Test the approximate interaction detector."""
|
||||
X_no_string_features = _create_sample_dataset(string_features={})
|
||||
X_one_string_feature = _create_sample_dataset(string_features={"Sex"})
|
||||
X_two_string_features = _create_sample_dataset(string_features={"Sex", "Blood group"})
|
||||
|
||||
shap_values = np.random.randn(*X_one_string_feature.values.shape)
|
||||
|
||||
interactions_no_features = shap.approximate_interactions(0, shap_values, X_no_string_features)
|
||||
interactions_one_string_feature = shap.approximate_interactions(0, shap_values, X_one_string_feature)
|
||||
interactions_two_string_feature = shap.approximate_interactions(0, shap_values, X_two_string_features)
|
||||
|
||||
assert (interactions_no_features == interactions_one_string_feature).all()
|
||||
assert (interactions_no_features == interactions_two_string_feature).all()
|
||||
|
||||
|
||||
def _create_sample_dataset(string_features):
|
||||
sex_values: list[Any]
|
||||
if "Sex" in string_features:
|
||||
sex_values = ["Male", "Female", "Male", "Male", "Female", "Female"]
|
||||
else:
|
||||
sex_values = [0, 1, 0, 0, 1, 1]
|
||||
|
||||
blood_values: list[Any]
|
||||
if "Blood group" in string_features:
|
||||
blood_values = ["A", "B", "A", "O", "O", "O"]
|
||||
else:
|
||||
blood_values = [1, 2, 1, 3, 3, 3]
|
||||
|
||||
X = pd.DataFrame(
|
||||
{
|
||||
"Sex": sex_values,
|
||||
"Blood group": blood_values,
|
||||
"Age": [10, 15, 28, 3, 84, 56],
|
||||
"Height": [130, 170, 185, 40, 150, 164],
|
||||
}
|
||||
)
|
||||
return X
|
||||
Reference in New Issue
Block a user