예제 #1
0
def compare_ensemble(name='g', N=1, T=50, H=4):
    from EnsembleCE import TreeEnsembleCEExtractor
    from sklearn.ensemble import RandomForestClassifier
    from utils import Database

    S = Database(filename=name)
    X, X_ts, y, y_ts, features, types, categories = S.get_dataset(split=True)
    mdl = RandomForestClassifier(n_estimators=T, max_depth=H, random_state=0)
    mdl = mdl.fit(X, y)
    denied_individual = [
        i for i in np.where(mdl.predict(X_ts) == 1)[0] if y_ts[i] == 1
    ]

    K = 6
    N = np.min([N, len(denied_individual)])
    for i in range(N):
        x = X_ts[denied_individual[i]]
        print('---------- PCC ----------')
        cee = TreeEnsembleCEExtractor(mdl,
                                      X=X,
                                      Y=y,
                                      FeatureNames=features,
                                      FeatureTypes=types,
                                      Categories=categories)
        action = cee.extract(x,
                             max_mod=K,
                             interaction=False,
                             alpha=-1,
                             weight_type='PCC')
        if (action != None): print(cee.explanation_)

        print('---------- TLPS ----------')
        cee = TreeEnsembleCEExtractor(mdl,
                                      X=X,
                                      Y=y,
                                      FeatureNames=features,
                                      FeatureTypes=types,
                                      Categories=categories)
        action = cee.extract(x,
                             max_mod=K,
                             interaction=False,
                             alpha=-1,
                             weight_type='TLPS')
        if (action != None): print(cee.explanation_)

        print('---------- MAD ----------')
        cee = TreeEnsembleCEExtractor(mdl,
                                      X=X,
                                      Y=y,
                                      FeatureNames=features,
                                      FeatureTypes=types,
                                      Categories=categories)
        action = cee.extract(x,
                             max_mod=K,
                             interaction=False,
                             alpha=-1,
                             weight_type='MAD')
        if (action != None): print(cee.explanation_)

        print('---------- Proposed (alp. = 0.01) ----------')
        cee = TreeEnsembleCEExtractor(mdl,
                                      X=X,
                                      Y=y,
                                      FeatureNames=features,
                                      FeatureTypes=types,
                                      Categories=categories)
        action = cee.extract(x, max_mod=K, interaction=True, alpha=0.01)
        if (action != None): print(cee.explanation_)

        print(
            '-----------------------------------------------------------------'
        )
예제 #2
0
def compare_linear(name='g', N=1):
    from LinearCE import LinearCEExtractor
    from sklearn.linear_model import LogisticRegression
    from utils import Database

    S = Database(filename=name)
    X, X_ts, y, y_ts, features, types, categories = S.get_dataset(split=True)
    mdl = LogisticRegression(C=1.0,
                             penalty='l2',
                             solver='liblinear',
                             random_state=0)
    mdl = mdl.fit(X, y)
    denied_individual = [
        i for i in np.where(mdl.predict(X_ts) == 1)[0] if y_ts[i] == 1
    ]

    N = np.min([N, len(denied_individual)])
    K = 6
    for i in range(N):
        x = X_ts[denied_individual[i]]
        print('---------- PCC ----------')
        cee = LinearCEExtractor(mdl,
                                X=X,
                                Y=y,
                                FeatureNames=features,
                                FeatureTypes=types,
                                Categories=categories)
        action = cee.extract(x,
                             max_mod=K,
                             interaction=False,
                             alpha=-1,
                             weight_type='PCC')
        if (action != None): print(cee.explanation_)

        print('---------- TLPS ----------')
        cee = LinearCEExtractor(mdl,
                                X=X,
                                Y=y,
                                FeatureNames=features,
                                FeatureTypes=types,
                                Categories=categories)
        action = cee.extract(x,
                             max_mod=K,
                             interaction=False,
                             alpha=-1,
                             weight_type='TLPS')
        if (action != None): print(cee.explanation_)

        print('---------- MAD ----------')
        cee = LinearCEExtractor(mdl,
                                X=X,
                                Y=y,
                                FeatureNames=features,
                                FeatureTypes=types,
                                Categories=categories)
        action = cee.extract(x,
                             max_mod=K,
                             interaction=False,
                             alpha=-1,
                             weight_type='MAD')
        if (action != None): print(cee.explanation_)

        print('---------- Proposed (alp. = 0.1) ----------')
        cee = LinearCEExtractor(mdl,
                                X=X,
                                Y=y,
                                FeatureNames=features,
                                FeatureTypes=types,
                                Categories=categories)
        action = cee.extract(x, max_mod=K, interaction=True, alpha=0.1)
        if (action != None): print(cee.explanation_)

        print(
            '-----------------------------------------------------------------'
        )