Skip to content
Snippets Groups Projects
Commit 7b49f93f authored by Baptiste Bauvin's avatar Baptiste Bauvin
Browse files

Added c_bound tracking on cqboost

parent 14b44192
Branches
Tags
No related merge requests found
......@@ -14,7 +14,7 @@ from ... import Metrics
class ColumnGenerationClassifier(BaseEstimator, ClassifierMixin, BaseBoost):
def __init__(self, mu=0.01, epsilon=1e-06, n_max_iterations=None, estimators_generator=None, dual_constraint_rhs=0, save_iteration_as_hyperparameter_each=None, random_state=None):
def __init__(self, mu=0.01, epsilon=1e-06, n_max_iterations=100, estimators_generator=None, dual_constraint_rhs=0, save_iteration_as_hyperparameter_each=None, random_state=None):
super(ColumnGenerationClassifier, self).__init__()
self.epsilon = epsilon
self.n_max_iterations = n_max_iterations
......@@ -36,6 +36,7 @@ class ColumnGenerationClassifier(BaseEstimator, ClassifierMixin, BaseBoost):
self.estimators_generator.fit(X, y)
self.classification_matrix = self._binary_classification_matrix(X)
self.c_bounds = []
self.infos_per_iteration_ = defaultdict(list)
......@@ -76,6 +77,8 @@ class ColumnGenerationClassifier(BaseEstimator, ClassifierMixin, BaseBoost):
# Solve restricted master for new costs.
w, alpha = self._restricted_master_problem(previous_w=w, previous_alpha=alpha)
cbound = self.compute_empiric_cbound(w, y_kernel_matrix)
self.c_bounds.append(cbound)
self.update_values(h_values, worst_h_index, alpha, w)
......@@ -113,6 +116,11 @@ class ColumnGenerationClassifier(BaseEstimator, ClassifierMixin, BaseBoost):
self.step_predict(classification_matrix)
return signs_array
def compute_empiric_cbound(self, w, y_kernel_matrix):
cbound = 1 - (1.0/self.n_total_examples) * (np.sum(np.average(y_kernel_matrix[:, self.chosen_columns_], axis=1, weights=w))**2/
np.sum(np.average(y_kernel_matrix[:, self.chosen_columns_], axis=1, weights=w)**2))
return cbound
def step_predict(self, classification_matrix):
if classification_matrix.shape != self.train_shape:
self.step_decisions = np.zeros(classification_matrix.shape)
......
......@@ -39,6 +39,8 @@ class CQBoost(ColumnGenerationClassifier, BaseMonoviewClassifier):
def getInterpret(self, directory, y_test):
np.savetxt(directory + "train_metrics.csv", self.train_metrics, delimiter=',')
np.savetxt(directory + "c_bounds.csv", self.c_bounds,
delimiter=',')
np.savetxt(directory + "y_test_step.csv", self.step_decisions,
delimiter=',')
step_metrics = []
......
......@@ -161,10 +161,10 @@ def parseTheArgs(arguments):
help='Set the mu parameter for CQBoost', default=0.001)
groupCQBoost.add_argument('--CQB_epsilon', metavar='FLOAT', type=float, action='store',
help='Set the epsilon parameter for CQBoost', default=1e-08)
groupCQBoost.add_argument('--CQB_stump', metavar='INT', type=int,
groupCQBoost.add_argument('--CQB_stumps', metavar='INT', type=int,
action='store',
help='Set the number of stumps for CQBoost',
default=10)
default=1)
groupCQBoostv2 = parser.add_argument_group('CQBoostv2 arguments')
groupCQBoostv2.add_argument('--CQB2_mu', metavar='FLOAT', type=float, action='store',
......@@ -186,7 +186,7 @@ def parseTheArgs(arguments):
groupCGreed = parser.add_argument_group('CGreed arguments')
groupCGreed.add_argument('--CGR_stumps', metavar='INT', type=int, action='store',
help='Set the n_stumps_per_attribute parameter for CGreed', default=10)
help='Set the n_stumps_per_attribute parameter for CGreed', default=1)
groupCGreed.add_argument('--CGR_n_iter', metavar='INT', type=int, action='store',
help='Set the n_max_iterations parameter for CGreed', default=100)
......@@ -194,7 +194,7 @@ def parseTheArgs(arguments):
groupCGDesc.add_argument('--CGD_stumps', metavar='INT', type=int,
action='store',
help='Set the n_stumps_per_attribute parameter for CGreed',
default=10)
default=1)
groupCGDesc.add_argument('--CGD_n_iter', metavar='INT', type=int,
action='store',
help='Set the n_max_iterations parameter for CGreed',
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment