рдЗрд╕ рдкреАрдЖрд░ рдореЗрдВ , рд╣рдо test_algoritthms.py
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╢реЗрдк рдЯреЗрд╕реНрдЯ (test_shap) рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ENC рдХреЗ рд▓рд┐рдП init params рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВред рдХреЗ рд░реВрдк рдореЗрдВ init рдкреИрд░рд╛рдореАрдЯрд░ рдЫреЛрдбрд╝рдХрд░ alpha = 0.0001
рдФрд░ l1_ratio=0.15
рд╡рдЬрд╣ рд╕реЗ рдПрдХ ZeroDivisionError
shap, рдЬреЛ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╕рдордп рдпрд╣ ред
рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдХреНрдпреЛрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рддреНрд░реБрдЯрд┐ рд╕реЗ рдмрдЪрдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рджрд░реНрдЬ рдХрд░рдирд╛ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╢реЗрдк рдЗрд╢реНрдпреВ рд╣реИред рдореИрдВрдиреЗ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП https://github.com/slundberg/shap/issues/2000 рджрд╛рдпрд░ рдХрд┐рдпрд╛ред рдЕрд▓реНрдкрд╛рд╡рдзрд┐ рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
KernelExplainer
рдореЗрдВ рд▓рд┐рдВрдХ = "рдкрд╣рдЪрд╛рди" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВexplainer = shap.LinearExplainer(classifier, X, link=shap.links.logit)
рдПрдХ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдЬреЛ рд╡рд┐рдлрд▓ рд░рд╣рд╛:
, рдореБрдЦреНрдп рдкреНрд░рдпреЛрдЧ рдкрд░ alpha=0.5, l1_ratio=0.5
, рдЬреЛ рд╣реИ рдХрд┐ рд╣рдо рдХреНрдпрд╛ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣реИ рдЗрд╕ рд╣реИ, рд╣рдо рдореЗрдВ рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдЕрдЧрд░ evalml/tests/model_understanding_tests/prediction_explaination_tests/test_explainers.py
:
@pytest.mark.parametrize("estimator", ["Extra Trees Classifier", "Elastic Net Classifier"])
def test_elastic_net(estimator, fraud_100):
pytest.importorskip('imblearn', reason='Skipping test because imblearn not installed')
X, y = fraud_100
pipeline = BinaryClassificationPipeline(component_graph=["Imputer", "One Hot Encoder", "DateTime Featurization Component", estimator])
pipeline.fit(X=X, y=y)
pipeline.predict(X)
importance = explain_predictions(pipeline, X, y, indices_to_explain=[0], top_k_features=4)
assert report['feature_names'].isnull().sum() == 0
assert report['feature_values'].isnull().sum() == 0
рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ:
рдЕрдЧрд░ рд╣рдо рдЕрд▓реНрдлрд╛ рдФрд░ l1_ratio рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рднреА рдпрд╣ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред
рдареАрдХ рд╣реИ @ bchen1116 , рдЬрд╛рдУ рдЗрд╕реЗ рдХрд░реЛред
рдЗрд╕ рдЬрдирд╕рдВрдкрд░реНрдХ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкрди