def main(): print("Setting up dataset and evaluator...") # Setup dataset and evaluator dataset = Dataset(load_tags=True, filter_tag=False, weight_tag=False) dataset.set_track_attr_weights_2(1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0) ev = Evaluator(seed=False) ev.cross_validation(5, dataset.train_final.copy()) for i in range(0, 5): print("Training models for fold {}-th".format(i)) train_models(dataset, ev, n_clusters=20)
def main(n_evaluations): print("Setting up dataset...") # Setup dataset and evaluator dataset = Dataset(load_tags=True, filter_tag=False, weight_tag=False) dataset.set_track_attr_weights_2(1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0) # Run mAP evaluation a number of times to reduce the variance # of the results n_clusters = 20 best = np.zeros((4, n_clusters), dtype=int) for i in range(n_evaluations): print("Running cross validation no. {}".format(i)) print("Setting up the Evaluator...") ev = Evaluator(seed=False) ev.cross_validation(5, dataset.train_final.copy()) folding_best = train_models(dataset, ev, n_folds=5, n_clusters=n_clusters) best += folding_best top = top_over_cluster(best) _print_top(top)
def evaluateMap(): from src.utils.evaluator import Evaluator dataset = Dataset(load_tags=True, filter_tag=False, weight_tag=False) dataset.set_track_attr_weights_2(2.0, 2.0, 0.0, 0.0, 0.0, 2.0, 2.0, 0.0, 0.0) # seed = 0xcafebabe # print("Evaluating with initial seed: {}".format(seed)) ev = Evaluator(seed=False) ev.cross_validation(5, dataset.train_final.copy()) cbf = ContentBasedFiltering() for i in range(0, 5): urm, tg_tracks, tg_playlist = ev.get_fold(dataset) cbf.fit(urm, list(tg_playlist), list(tg_tracks), dataset) recs = cbf.predict() ev.evaluate_fold(recs) map_at_five = ev.get_mean_map() print("MAP@5 ", map_at_five)
def evaluateMap(): from src.utils.evaluator import Evaluator dataset = Dataset(load_tags=True, filter_tag=False, weight_tag=False) dataset.set_track_attr_weights_2(1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0) dataset.set_playlist_attr_weights(1, 1, 1, 0, 0) ev = Evaluator() ev.cross_validation(5, dataset.train_final.copy()) cbf = ContentBasedFiltering(alfa=0.999) for i in range(0, 5): urm, tg_tracks, tg_playlist = ev.get_fold(dataset) cbf.fit(urm, list(tg_playlist), list(tg_tracks), dataset) recs = cbf.predict() ev.evaluate_fold(recs) map_at_five = ev.get_mean_map() print("MAP@5 ", map_at_five)
def run(self): used_seconds = 0 # 迭代 while True: logger.info(f"{'*' * 50}") # 确定当前时间, 取算法执行时间和模拟器的切片时间的大值 self.cur_time = self.pre_time + ( used_seconds // self.time_interval + 1) * self.time_interval logger.info( f"cur time: {datetime.datetime.fromtimestamp(self.cur_time)}, " f"pre time: {datetime.datetime.fromtimestamp(self.pre_time)}") # update the status of vehicles and orders in a given interval [self.pre_time, self.cur_time] updated_input_info = self.update_input() # 派单环节, 设计与算法交互 used_seconds, dispatch_result = self.dispatch(updated_input_info) self.time_to_dispatch_result[self.cur_time] = dispatch_result # 校验, 车辆目的地不能改变 if not Checker.check_dispatch_result( dispatch_result, self.id_to_vehicle, self.id_to_order): logger.error("Dispatch result is infeasible") return # 根据派单指令更新车辆 self.deliver_control_command_to_vehicles(dispatch_result) # 判断是否完成所有订单的派发 if self.complete_the_dispatch_of_all_orders(): break self.pre_time = self.cur_time # 若订单已经超时, 但是算法依旧未分配, 模拟终止 if self.ignore_allocating_timeout_orders(dispatch_result): logger.error('Simulator terminated') sys.exit(-1) # 模拟完成车辆剩下的订单 self.simulate_the_left_ongoing_orders_of_vehicles(self.id_to_vehicle) # 根据self.history 计算指标 self.total_score = Evaluator.calculate_total_score( self.history, self.route_map, len(self.id_to_vehicle))
return self.R_hat def get_model(self): """ Returns the complete R_hat """ return self.R_hat.copy() if __name__ == '__main__': ds = Dataset(load_tags=True, filter_tag=True) ds.set_track_attr_weights_2(1, 1, 1, 1, 1, num_rating_weight=1, inferred_album=1, inferred_duration=1, inferred_playcount=1) ev = Evaluator() ev.cross_validation(5, ds.train_final.copy()) for i in range(0, 5): fm = FM() urm, tg_tracks, tg_playlist = ev.get_fold(ds) fm.fit(urm, list(tg_playlist), list(tg_tracks), ds) recs = fm.predict() ev.evaluate_fold(recs) map_at_five = ev.get_mean_map() print("MAP@5 Final", map_at_five)