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( '-----------------------------------------------------------------' )
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( '-----------------------------------------------------------------' )