def test_risk_slim(data_csv_file, sample_weights_csv_file=None, max_coefficient=5, max_L0_value=5, max_offset=50, c0_value=1e-6, w_pos=1.00, settings=None): # load dataset data = load_data_from_csv(dataset_csv_file=data_csv_file, sample_weights_csv_file=sample_weights_csv_file) N, P = data['X'].shape # offset value coef_set = CoefficientSet(variable_names=data['variable_names'], lb=-max_coefficient, ub=max_coefficient, sign=0) conservative_offset = get_conservative_offset(data, coef_set, max_L0_value) max_offset = min(max_offset, conservative_offset) coef_set['(Intercept)'].ub = max_offset coef_set['(Intercept)'].lb = -max_offset # create constraint dictionary trivial_L0_max = P - np.sum(coef_set.C_0j == 0) max_L0_value = min(max_L0_value, trivial_L0_max) constraints = { 'L0_min': 0, 'L0_max': max_L0_value, 'coef_set': coef_set, } # Train model using lattice_cpa model_info, mip_info, lcpa_info = run_lattice_cpa(data, constraints, settings) #model info contains key results pprint(model_info) # lcpa_output contains detailed information about LCPA pprint(lcpa_info) # todo check solution # mip_output contains information to access the MIP mip_info['risk_slim_mip'] #CPLEX mip mip_info['risk_slim_idx'] #indices of the relevant constraints return True
# 'init_use_sequential_rounding': True, # use SeqRd in initialization procedure 'init_sequential_rounding_max_runtime': 10.0, # max runtime for SeqRd in initialization procedure 'init_sequential_rounding_max_solutions': 5, # max solutions to round using SeqRd # 'init_polishing_after': True, # polish after rounding 'init_polishing_max_runtime': 30.0, # max runtime for polishing 'init_polishing_max_solutions': 5, # max solutions to polish # # CPLEX Solver Parameters 'cplex_randomseed': 0, # random seed 'cplex_mipemphasis': 0, # cplex MIP strategy } # train model using lattice_cpa model_info, mip_info, lcpa_info = run_lattice_cpa(data, constraints, settings) #model info contains key results pprint(model_info) print_model(model_info['solution'], data) # mip_output contains information to access the MIP mip_info['risk_slim_mip'] #CPLEX mip mip_info['risk_slim_idx'] #indices of the relevant constraints # lcpa_output contains detailed information about LCPA pprint(lcpa_info)
def risk_slim(data, max_coefficient, max_L0_value, c0_value, max_offset, max_runtime = 120, w_pos = 1): """ @parameters: max_coefficient: value of largest/smallest coefficient max_L0_value: maximum model size (set as float(inf)) max_offset: maximum value of offset parameter (optional) c0_value: L0-penalty parameter such that c0_value > 0; larger values -> sparser models; we set to a small value (1e-6) so that we get a model with max_L0_value terms max_runtime: max algorithm running time w_pos: relative weight on examples with y = +1; w_neg = 1.00 (optional) """ # create coefficient set and set the value of the offset parameter coef_set = CoefficientSet(variable_names = data['variable_names'], lb = -max_coefficient, ub = max_coefficient, sign = 0) conservative_offset = get_conservative_offset(data, coef_set, max_L0_value) max_offset = min(max_offset, conservative_offset) coef_set['(Intercept)'].ub = max_offset coef_set['(Intercept)'].lb = -max_offset constraints = { 'L0_min': 0, 'L0_max': max_L0_value, 'coef_set':coef_set, } # Set parameters settings = { # Problem Parameters 'c0_value': c0_value, 'w_pos': w_pos, # LCPA Settings 'max_runtime': max_runtime, # max runtime for LCPA 'max_tolerance': np.finfo('float').eps, # tolerance to stop LCPA (set to 0 to return provably optimal solution) 'display_cplex_progress': True, # print CPLEX progress on screen 'loss_computation': 'lookup', # how to compute the loss function ('normal','fast','lookup') # LCPA Improvements 'round_flag': False, # round continuous solutions with SeqRd 'polish_flag': False, # polish integer feasible solutions with DCD 'chained_updates_flag': False, # use chained updates 'add_cuts_at_heuristic_solutions': True, # add cuts at integer feasible solutions found using polishing/rounding # Initialization 'initialization_flag': True, # use initialization procedure 'init_max_runtime': 300.0, # max time to run CPA in initialization procedure 'init_max_coefficient_gap': 0.49, # CPLEX Solver Parameters 'cplex_randomseed': 0, # random seed 'cplex_mipemphasis': 0, # cplex MIP strategy } # train model using lattice_cpa model_info, mip_info, lcpa_info = run_lattice_cpa(data, constraints, settings) return model_info, mip_info, lcpa_info