예제 #1
0
def test_explain_catboost_catboost(boston_train):
    xs, ys, feature_names = boston_train
    catb = CatBoost().fit(xs, ys)
    res = explain_weights(catb)
    for expl in format_as_all(res, catb):
        assert '12' in expl
    res = explain_weights(catb, feature_names=feature_names)
    for expl in format_as_all(res, catb):
        assert 'LSTAT' in expl
예제 #2
0
def test_explain_xgboost_regressor(boston_train):
    xs, ys, feature_names = boston_train
    reg = XGBRegressor()
    reg.fit(xs, ys)
    res = explain_weights(reg)
    for expl in format_as_all(res, reg):
        assert 'f12' in expl
    res = explain_weights(reg, feature_names=feature_names)
    for expl in format_as_all(res, reg):
        assert 'LSTAT' in expl
예제 #3
0
def test_explain_xgboost_booster(boston_train):
    xs, ys, feature_names = boston_train
    booster = xgboost.train(
        params={'objective': 'reg:linear', 'silent': True},
        dtrain=xgboost.DMatrix(xs, label=ys),
    )
    res = explain_weights(booster)
    for expl in format_as_all(res, booster):
        assert 'f12' in expl
    res = explain_weights(booster, feature_names=feature_names)
    for expl in format_as_all(res, booster):
        assert 'LSTAT' in expl
예제 #4
0
def test_explain_weights_feature_names_pandas(boston_train):
    pd = pytest.importorskip('pandas')
    X, y, feature_names = boston_train
    df = pd.DataFrame(X, columns=feature_names)
    reg = XGBRegressor().fit(df, y)

    # it shoud pick up feature names from DataFrame columns
    res = explain_weights(reg)
    for expl in format_as_all(res, reg):
        assert 'PTRATIO' in expl

    # it is possible to override DataFrame feature names
    numeric_feature_names = ["zz%s" % idx for idx in range(len(feature_names))]
    res = explain_weights(reg, feature_names=numeric_feature_names)
    for expl in format_as_all(res, reg):
        assert 'zz12' in expl
def explain_weights_pipeline(estimator, feature_names=None, **kwargs):
    last_estimator = estimator.steps[-1][1]
    transform_pipeline = Pipeline(estimator.steps[:-1])
    if 'vec' in kwargs:
        feature_names = get_feature_names(feature_names, vec=kwargs.pop('vec'))
    feature_names = transform_feature_names(transform_pipeline, feature_names)
    out = explain_weights(last_estimator,
                          feature_names=feature_names,
                          **kwargs)
    out.estimator = repr(estimator)
    return out
예제 #6
0
def test_explain_catboost_catboost_wrong_importance_type(
        iris_train, importance_type):
    x, y, feature_names, target = iris_train
    train = Pool(x, y)
    catb = CatBoostClassifier(iterations=10,
                              learning_rate=1,
                              depth=2,
                              loss_function='MultiClass')
    catb.fit(train)
    with pytest.raises(ValueError):
        res = explain_weights(catb,
                              importance_type=importance_type,
                              pool=train)
예제 #7
0
def test_explain_catboost_classifier(iris_train, importance_type):
    x, y, feature_names, target = iris_train
    train = Pool(x, y)
    catb = CatBoostClassifier(iterations=10,
                              learning_rate=1,
                              depth=2,
                              loss_function='MultiClass')
    catb.fit(train)
    res = explain_weights(catb, importance_type=importance_type, pool=train)
    for expl in format_as_all(res, catb):
        assert '3' in expl
    res = explain_weights(catb,
                          feature_names=feature_names,
                          importance_type=importance_type,
                          pool=train)
    for expl in format_as_all(res, catb):
        assert 'petal width (cm)' in expl
    if (importance_type == 'LossFunctionChange'):
        with pytest.raises(ValueError):
            res = explain_weights(catb,
                                  feature_names=feature_names,
                                  importance_type=importance_type,
                                  pool=[x, y])