예제 #1
0
def test_lgbm_classifier(tmp_dir):
    x_train = np.random.rand(11, 32)
    y_train = np.array([[1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                        [1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                        [0, 1, 0, 0, 0, 0, 0, 0, 0, 0],
                        [0, 0, 0, 0, 1, 0, 0, 0, 0, 0],
                        [0, 0, 0, 0, 0, 0, 0, 1, 0, 0],
                        [0, 0, 0, 0, 0, 1, 0, 0, 0, 0],
                        [0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
                        [0, 0, 0, 0, 0, 0, 0, 1, 0, 0],
                        [1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                        [0, 0, 0, 1, 0, 0, 0, 0, 0, 0],
                        [0, 0, 0, 1, 0, 0, 0, 0, 0, 0]])

    input_node = ak.Input()
    output_node = input_node
    output_node = preprocessor.LightGBMClassifier()(output_node)
    output_node = block.IdentityBlock()(output_node)
    output_node = head.EmptyHead(loss='categorical_crossentropy',
                                 metrics=['accuracy'])(output_node)

    auto_model = ak.GraphAutoModel(input_node,
                                   output_node,
                                   directory=tmp_dir,
                                   max_trials=1)
    auto_model.fit(x_train,
                   y_train,
                   epochs=1,
                   validation_data=(x_train, y_train))
    result = auto_model.predict(x_train)
    auto_model.tuner.get_best_models()[0].summary()
    assert result.shape == (11, 10)
예제 #2
0
 def build(self, hp, inputs=None):
     input_node = nest.flatten(inputs)[0]
     output_node = input_node
     output_node = preprocessor.LightGBMClassifier()(output_node)
     output_node = block.IdentityBlock()(output_node)
     output_node = head.EmptyHead(loss=self.loss,
                                  metrics=[self.metrics])(output_node)
     return output_node
예제 #3
0
def test_lgbm_classifier():
    dataset = common.generate_data(11, (32,), dtype='dataset')
    y = common.generate_one_hot_labels(11, dtype='dataset')
    instance = preprocessor.LightGBMBlock(seed=common.SEED)
    instance.lightgbm_block = preprocessor.LightGBMClassifier(seed=common.SEED)
    new_dataset = run_preprocessor(instance,
                                   dataset,
                                   y,
                                   tf.float32)
    assert isinstance(new_dataset, tf.data.Dataset)
예제 #4
0
def test_lgbm_classifier():
    dataset = common.generate_data(100, (32, ), dtype='dataset')
    y = common.generate_one_hot_labels(100, num_classes=3, dtype='dataset')
    instance = preprocessor_module.LightGBMBlock(seed=common.SEED)
    instance.lightgbm_block = preprocessor_module.LightGBMClassifier(
        seed=common.SEED)
    instance.lightgbm_block.num_classes = 3
    new_dataset = run_preprocessor(instance, dataset, y, tf.float32)
    for (x, ) in new_dataset:
        assert x.shape == (3, )
        break
    assert isinstance(new_dataset, tf.data.Dataset)
예제 #5
0
def test_lgbm_classifier_two_classes():
    dataset = common.generate_data(11, (32, ), dtype='dataset')
    y = tf.data.Dataset.from_tensor_slices(
        np.random.randint(0, 2, 11).reshape(-1, 1))
    instance = preprocessor_module.LightGBMBlock(seed=common.SEED)
    instance.lightgbm_block = preprocessor_module.LightGBMClassifier(
        seed=common.SEED)
    instance.lightgbm_block.num_classes = 11
    new_dataset = run_preprocessor(instance, dataset, y, tf.float32)
    for (x, ) in new_dataset:
        assert x.shape == (1, )
        break
    assert isinstance(new_dataset, tf.data.Dataset)
예제 #6
0
def lightgbm_head(lightgbm_block):
    lightgbm_block.heads = fetch_heads(lightgbm_block)
    if len(lightgbm_block.heads) > 1:
        raise ValueError('LightGBMBlock can only be connected to one head.')
    head = lightgbm_block.heads[0]
    if isinstance(head, head_module.ClassificationHead):
        classifier = preprocessor_module.LightGBMClassifier(seed=lightgbm_block.seed)
        classifier.num_classes = head.num_classes
        lightgbm_block.lightgbm_block = classifier
    if isinstance(head, head_module.RegressionHead):
        lightgbm_block.lightgbm_block = preprocessor_module.LightGBMRegressor(
            seed=lightgbm_block.seed)

    in_block = head
    # Check if the head has no other input but only LightGBMBlock.
    while in_block is not lightgbm_block:
        # The head has other inputs.
        if len(in_block.inputs) > 1:
            return
        in_block = in_block.inputs[0].in_blocks[0]
    head.identity = True