Module imodels.tests.classification_continuous_inputs_test
Expand source code
import random
from imodels import *
class TestClassClassificationBinary:
'''Tests simple classification for different models. Note: still doesn't test all the models!
'''
def setup(self):
np.random.seed(13)
random.seed(13)
self.n = 40
self.p = 2
self.X_classification_binary = np.random.randn(self.n, self.p)
self.y_classification_binary = (self.X_classification_binary[:, 0] > 0).astype(int) # y = x0 > 0
self.y_classification_binary[-2:] = 1 - self.y_classification_binary[-2:] # flip labels for last few
def test_classification_binary(self):
'''Test imodels on basic binary classification task
'''
for model_type in [
RuleFitClassifier, GreedyRuleListClassifier,
FPLassoClassifier, SkopeRulesClassifier,
FPSkopeClassifier, BoostedRulesClassifier,
OneRClassifier, SlipperClassifier,
]: # IRFClassifier, SLIMClassifier, BayesianRuleSetClassifier
init_kwargs = {}
if model_type == RuleFitClassifier:
init_kwargs['max_rules'] = 5
if model_type == SkopeRulesClassifier or model_type == FPSkopeClassifier:
init_kwargs['random_state'] = 0
init_kwargs['max_samples_features'] = 1.
if model_type == SlipperClassifier:
init_kwargs['n_estimators'] = 1
m = model_type(**init_kwargs)
X = self.X_classification_binary
m.fit(X, self.y_classification_binary)
# test predict()
preds = m.predict(X) # > 0.5).astype(int)
assert preds.size == self.n, 'predict() yields right size'
# test preds_proba()
if not model_type == CorelsRuleListClassifier:
preds_proba = m.predict_proba(X)
assert len(preds_proba.shape) == 2, 'preds_proba has 2 columns'
assert preds_proba.shape[1] == 2, 'preds_proba has 2 columns'
assert np.max(preds_proba) < 1.1, 'preds_proba has no values over 1'
assert (np.argmax(preds_proba, axis=1) == preds).all(), "predict_proba and predict correspond"
# test acc
acc_train = np.mean(preds == self.y_classification_binary)
print(type(m), m, 'final acc', acc_train)
assert acc_train > 0.8, 'acc greater than 0.8'
if __name__ == '__main__':
t = TestClassClassificationBinary()
t.setup()
t.test_classification_binary()
Classes
class TestClassClassificationBinary (*args, **kwargs)
-
Tests simple classification for different models. Note: still doesn't test all the models!
Expand source code
class TestClassClassificationBinary: '''Tests simple classification for different models. Note: still doesn't test all the models! ''' def setup(self): np.random.seed(13) random.seed(13) self.n = 40 self.p = 2 self.X_classification_binary = np.random.randn(self.n, self.p) self.y_classification_binary = (self.X_classification_binary[:, 0] > 0).astype(int) # y = x0 > 0 self.y_classification_binary[-2:] = 1 - self.y_classification_binary[-2:] # flip labels for last few def test_classification_binary(self): '''Test imodels on basic binary classification task ''' for model_type in [ RuleFitClassifier, GreedyRuleListClassifier, FPLassoClassifier, SkopeRulesClassifier, FPSkopeClassifier, BoostedRulesClassifier, OneRClassifier, SlipperClassifier, ]: # IRFClassifier, SLIMClassifier, BayesianRuleSetClassifier init_kwargs = {} if model_type == RuleFitClassifier: init_kwargs['max_rules'] = 5 if model_type == SkopeRulesClassifier or model_type == FPSkopeClassifier: init_kwargs['random_state'] = 0 init_kwargs['max_samples_features'] = 1. if model_type == SlipperClassifier: init_kwargs['n_estimators'] = 1 m = model_type(**init_kwargs) X = self.X_classification_binary m.fit(X, self.y_classification_binary) # test predict() preds = m.predict(X) # > 0.5).astype(int) assert preds.size == self.n, 'predict() yields right size' # test preds_proba() if not model_type == CorelsRuleListClassifier: preds_proba = m.predict_proba(X) assert len(preds_proba.shape) == 2, 'preds_proba has 2 columns' assert preds_proba.shape[1] == 2, 'preds_proba has 2 columns' assert np.max(preds_proba) < 1.1, 'preds_proba has no values over 1' assert (np.argmax(preds_proba, axis=1) == preds).all(), "predict_proba and predict correspond" # test acc acc_train = np.mean(preds == self.y_classification_binary) print(type(m), m, 'final acc', acc_train) assert acc_train > 0.8, 'acc greater than 0.8'
Methods
def setup(self)
-
Expand source code
def setup(self): np.random.seed(13) random.seed(13) self.n = 40 self.p = 2 self.X_classification_binary = np.random.randn(self.n, self.p) self.y_classification_binary = (self.X_classification_binary[:, 0] > 0).astype(int) # y = x0 > 0 self.y_classification_binary[-2:] = 1 - self.y_classification_binary[-2:] # flip labels for last few
def test_classification_binary(self)
-
Test imodels on basic binary classification task
Expand source code
def test_classification_binary(self): '''Test imodels on basic binary classification task ''' for model_type in [ RuleFitClassifier, GreedyRuleListClassifier, FPLassoClassifier, SkopeRulesClassifier, FPSkopeClassifier, BoostedRulesClassifier, OneRClassifier, SlipperClassifier, ]: # IRFClassifier, SLIMClassifier, BayesianRuleSetClassifier init_kwargs = {} if model_type == RuleFitClassifier: init_kwargs['max_rules'] = 5 if model_type == SkopeRulesClassifier or model_type == FPSkopeClassifier: init_kwargs['random_state'] = 0 init_kwargs['max_samples_features'] = 1. if model_type == SlipperClassifier: init_kwargs['n_estimators'] = 1 m = model_type(**init_kwargs) X = self.X_classification_binary m.fit(X, self.y_classification_binary) # test predict() preds = m.predict(X) # > 0.5).astype(int) assert preds.size == self.n, 'predict() yields right size' # test preds_proba() if not model_type == CorelsRuleListClassifier: preds_proba = m.predict_proba(X) assert len(preds_proba.shape) == 2, 'preds_proba has 2 columns' assert preds_proba.shape[1] == 2, 'preds_proba has 2 columns' assert np.max(preds_proba) < 1.1, 'preds_proba has no values over 1' assert (np.argmax(preds_proba, axis=1) == preds).all(), "predict_proba and predict correspond" # test acc acc_train = np.mean(preds == self.y_classification_binary) print(type(m), m, 'final acc', acc_train) assert acc_train > 0.8, 'acc greater than 0.8'