Example #1
0
def testScoreWithMemorizedModel():
  orig_cols = ['gender', 'height']
  memorized_cols = ['gender']
  model_config = model_cfg.ModelConfig(
  'v1', 'tmp/learned_model_v1.csv', 'tmp/memorized_model_v1.csv', 
  model_cfg.ColsCfg(orig_cols, memorized_cols),
  'tmp/feature_map_v1.csv', 'tmp/feature_map2_v1.csv')
  s0 = seti.create_seti(5.0, bfs=[('gender', 'm')], cfs=[('height', 6.0)])
  s1 = seti.create_seti(7.0, bfs=[('gender', 'f')], cfs=[('height', 6.0)])
  setis = [s0, s1]

  # Empty learned model.
  lm = model_exporter.LearnedModel()
  lm.write_model({}, 'tmp/learned_model_v1.csv')

  # Set up memorized model.
  fs, _ = training_data.write_feature_maps_from_seti(model_config, setis)
  mem = model_exporter.Memorizer(fs, model_config)
  memorized_model = mem.create_model(setis)
  mm = model_exporter.MemorizedModel()
  mm.write_features(memorized_model, model_config.memorized_model_loc)

  ss = seti_server.make_from_config([model_config])
  ss.model_map['v1'].learned_model = {}
  s2 = seti.create_seti(7.0, bfs=[('gender', 'f')])
  assertFloatEquals(7.0, ss.score(s2))
Example #2
0
def testScoreWithLearnedModel():
  model = { 
    'gender_MISSING': 0.0, 
    'gender_f': -0.099999999999999992, 
    ':': -0.7999999999999996, 
    'height': 0.29999999999999993
  }
  lm = model_exporter.LearnedModel()
  lm.write_model(model, 'tmp/learned_model.csv')
  mm = model_exporter.MemorizedModel()
  mm.write_features([], 'tmp/memorized_model.csv')

  # Setup feature selector and such.
  orig_cols = ['gender', 'height']

  s0 = seti.create_seti(5.0, bfs=[('gender', 'm')], cfs=[('height', 6.0)])
  s1 = seti.create_seti(3.0, bfs=[('gender', 'f')], cfs=[('height', 3.0)])
  setis = [s0, s1]

  model_types = [model_cfg.LINEAR_REGRESSION, model_cfg.LOGISTIC_REGRESSION]
  transforms = [lambda x: x, lambda x: 1 / (1 + math.exp(-x))]

  # Test the actual model.
  for mIndex in xrange(len(model_types)):
    model_config = model_cfg.ModelConfig(
      'v0', 'tmp/learned_model.csv', 'tmp/memorized_model.csv', 
      model_cfg.ColsCfg(orig_cols, orig_cols),
      'tmp/feature_map_v0.csv', 'tmp/feature_map2_v0.csv', 
      model_type=model_types[mIndex])
    training_data.write_feature_maps_from_seti(model_config, setis)

    ss = seti_server.make_from_config([model_config])

    w0 = model[':'] + model['gender_MISSING'] * 0 + model['gender_f'] * 0 + model['height'] * 6.0
    w1 = model[':'] + model['gender_MISSING'] * 0 + model['gender_f'] * 1 + model['height'] * 3.0
    wants = [w0, w1]
    for i in xrange(len(setis)):
      setie = setis[i]
      want_after_transform = transforms[mIndex](wants[i])
      assertEquals(want_after_transform, ss.score(setie))
def testRun():
  # Setup feature selector and such.
  orig_cols = ['gender', 'height']

  s0 = seti.create_seti(1.0, bfs=[('gender', 'm')], cfs=[('height', 6.0)])
  s1 = seti.create_seti(0.0, bfs=[('gender', 'f')], cfs=[('height', 3.0)])
  setis = [s0, s1]

  model_config = model_cfg.ModelConfig(
    'v0', 'tmp/learned_model.csv', 'tmp/memorized_model.csv', 
    model_cfg.ColsCfg(
      orig_cols, orig_cols),
    'tmp/feature_map_v0.csv', 'tmp/feature_map2_v0.csv')
  run_pipeline.run([model_config], setis)
  model = { 
    'gender_MISSING': 0.0, 
    'gender_f': -0.099999999999999992, 
    ':': -0.7999999999999996, 
    'height': 0.29999999999999993
  }
  # Test model gets created and loaded.
  # Test that we can score one example.

  ss = seti_server.make_from_config([model_config])

  # Test the learned model works.
  #print 'Learned model: '
  #print ss.model_map['v0'].learned_model
  s2 = seti.create_seti(5.0, bfs=[('gender', 'm')], cfs=[('height', 2.0)])
  val0 = model[':'] + model['gender_MISSING'] * 0 + model['gender_f'] * 0 + model['height'] * 2.0
  assertFloatEquals(val0, ss.score(s2))

  # Test the memorized model works. Destroy the learned model.
  ss.model_map['v0'].learned_model = {}
  val1 = model[':'] + model['gender_MISSING'] * 0 + model['gender_f'] * 1 + model['height'] * 3.0
  assertFloatEquals(val1, ss.score(s1))