Пример #1
0
TEST(lru_unlearner, max_size_must_be_positive) {
  lru_unlearner::config config;
  config.max_size = -1;
  EXPECT_THROW(lru_unlearner unlearner(config), common::config_exception);
  config.max_size = 0;
  EXPECT_THROW(lru_unlearner unlearner(config), common::config_exception);
}
Пример #2
0
TEST(lru_unlearner, trivial) {
  lru_unlearner::config config;
  config.max_size = 3;
  lru_unlearner unlearner(config);

  mock_callback callback;
  unlearner.set_callback(callback);

  std::vector<std::string> touch_sequence;
  touch_sequence.push_back("id1");
  touch_sequence.push_back("id2");
  touch_sequence.push_back("id3");
  touch_sequence.push_back("id2");
  touch_sequence.push_back("id1");

  for (size_t i = 0; i < touch_sequence.size(); ++i) {
    unlearner.touch(touch_sequence[i]);
    EXPECT_EQ("", callback.unlearned_id());
    EXPECT_TRUE(unlearner.exists_in_memory(touch_sequence[i]));
  }

  unlearner.touch("id4");
  EXPECT_EQ("id3", callback.unlearned_id());
  EXPECT_FALSE(unlearner.exists_in_memory(callback.unlearned_id()));
}
TEST(random_unlearner, remove) {
  random_unlearner::config config;
  config.max_size = 3;
  random_unlearner unlearner(config);

  // add 3 IDs
  unlearner.touch("id1");
  unlearner.touch("id2");
  unlearner.touch("id3");

  // remove the middle ID
  EXPECT_TRUE(unlearner.remove("id2"));
  EXPECT_TRUE(unlearner.exists_in_memory("id1"));
  EXPECT_FALSE(unlearner.exists_in_memory("id2"));
  EXPECT_TRUE(unlearner.exists_in_memory("id3"));

  // add 1 ID
  EXPECT_TRUE(unlearner.touch("id4"));
  EXPECT_TRUE(unlearner.exists_in_memory("id1"));
  EXPECT_FALSE(unlearner.exists_in_memory("id2"));
  EXPECT_TRUE(unlearner.exists_in_memory("id3"));
  EXPECT_TRUE(unlearner.exists_in_memory("id4"));

  // remove the last ID
  EXPECT_TRUE(unlearner.remove("id4"));
  EXPECT_TRUE(unlearner.exists_in_memory("id1"));
  EXPECT_FALSE(unlearner.exists_in_memory("id2"));
  EXPECT_TRUE(unlearner.exists_in_memory("id3"));
  EXPECT_FALSE(unlearner.exists_in_memory("id4"));

  // remove non-existent ID
  EXPECT_FALSE(unlearner.remove("foo"));
  EXPECT_FALSE(unlearner.remove("id4"));
}
Пример #4
0
shared_ptr<anomaly_base> anomaly_factory::create_anomaly(
    const string& name,
    const config& param,
    const string& id) {
  if (name == "lof") {
    lof_config conf = config_cast_check<lof_config>(param);

    return shared_ptr<anomaly_base>(new lof(
        conf,
        recommender::recommender_factory::create_recommender(
            conf.method,
            conf.parameter, id)));
  } else if (name == "light_lof") {
    light_lof_config conf = config_cast_check<light_lof_config>(param);

    jubatus::util::lang::shared_ptr<table::column_table> nearest_neighbor_table(
        new table::column_table);
    jubatus::util::lang::shared_ptr<nearest_neighbor::nearest_neighbor_base>
        nearest_neighbor_engine(nearest_neighbor::create_nearest_neighbor(
            conf.method, conf.parameter, nearest_neighbor_table, id));

    if (conf.unlearner) {
      if (!conf.unlearner_parameter) {
        throw JUBATUS_EXCEPTION(
            common::config_exception()
            << common::exception::error_message(
              "unlearner is set but unlearner_parameter is not found"));
      }
      jubatus::util::lang::shared_ptr<unlearner::unlearner_base> unlearner(
          unlearner::create_unlearner(
              *conf.unlearner,
              *conf.unlearner_parameter));
      return shared_ptr<anomaly_base>(
          new light_lof(conf, id, nearest_neighbor_engine, unlearner));
    }

    return jubatus::util::lang::shared_ptr<anomaly_base>(
        new light_lof(conf, id, nearest_neighbor_engine));
  } else {
    throw JUBATUS_EXCEPTION(common::unsupported_method(name));
  }
};
Пример #5
0
  void SetUp() {
    core::anomaly::light_lof::config lof_config;
    lof_config.nearest_neighbor_num = 3;
    lof_config.reverse_nearest_neighbor_num = 3;

    shared_ptr<table::column_table> lsh_table(
        new table::column_table);
    core::nearest_neighbor::euclid_lsh::config lsh_config;
    shared_ptr<core::nearest_neighbor::nearest_neighbor_base> lsh(
        new core::nearest_neighbor::euclid_lsh(lsh_config, lsh_table, "id"));

    unlearner::lru_unlearner::config unlearner_config;
    unlearner_config.max_size = 5;
    jubatus::util::lang::shared_ptr<unlearner::unlearner_base> unlearner(
        new unlearner::lru_unlearner(unlearner_config));

    anomaly_.reset(new anomaly(
                       shared_ptr<anomaly_base>(
                           new core::anomaly::light_lof(
                               lof_config, "id", lsh, unlearner)),
                           make_fv_converter()));
  }
TEST(random_unlearner, trivial) {
  unordered_set<std::string> keys;
  keys.insert("id1");
  keys.insert("id2");
  keys.insert("id3");

  random_unlearner::config config;
  config.max_size = 3;
  random_unlearner unlearner(config);

  mock_callback callback;
  unlearner.set_callback(callback);

  for (unordered_set<std::string>::iterator it = keys.begin();
       it != keys.end(); ++it) {
    unlearner.touch(*it);
    EXPECT_EQ("", callback.unlearned_id());
    EXPECT_TRUE(unlearner.exists_in_memory(*it));
  }

  unlearner.touch("last");
  EXPECT_EQ(1ul, keys.count(callback.unlearned_id()));
  EXPECT_FALSE(unlearner.exists_in_memory(callback.unlearned_id()));
}
TEST(random_unlearner, seed_must_be_within_32bit) {
  random_unlearner::config config;
  config.max_size = 1;
  config.seed = 0xffffffffLLU + 1;
  EXPECT_THROW(random_unlearner unlearner(config), common::config_exception);
}
TEST(random_unlearner, seed_must_positive) {
  random_unlearner::config config;
  config.max_size = 1;
  config.seed = -1;
  EXPECT_THROW(random_unlearner unlearner(config), common::config_exception);
}