Exemple #1
0
    def test_memory(self):
        # Set an environmental variable (local for this test)
        os.environ['LOLOPY_JVM_MEMORY'] = '4g'

        with self.assertLogs("py4j.java_gateway", level='DEBUG') as cm:
            # Get a gateway
            get_java_gateway(reuse=False)

            # Make sure the memory amount appears in the logs
            self.assertIn('Xmx4g', '\n'.join(cm.output))
Exemple #2
0
def _call_lolo_merit(metric_name, y_true, y_pred, rng, y_std=None, *args):
    """Call a metric from lolopy
    
    Args:
        metric_name (str): Name of a Merit class (e.g., UncertaintyCorrelation)
        y_true ([double]): True value
        y_pred ([double]): Predicted values
        y_uncert ([double]): Prediction uncertainties
        *args (list): Any parameters to the constructor of the Metric
    Returns:
        (double): Metric score
    """

    # If needed, set y_std to 1 for all entries
    if y_std is None:
        y_std = np.ones(len(y_true))

    gateway = get_java_gateway()
    # Get default rng
    rng = rng if rng else gateway.jvm.scala.util.Random()
    # Get the metric object
    metric = getattr(gateway.jvm.io.citrine.lolo.validation, metric_name)
    if len(args) > 0:
        metric = metric(*args)

    # Convert the data arrays to Java
    y_true_java = send_1D_array(gateway, y_true, True)
    y_pred_java = send_1D_array(gateway, y_pred, True)
    y_std_java = send_1D_array(gateway, y_std, True)

    # Make the prediction result
    pred_result = gateway.jvm.io.citrine.lolo.util.LoloPyDataLoader.makeRegressionPredictionResult(y_pred_java, y_std_java)

    # Run the prediction result through the metric
    return metric.evaluate(pred_result, y_true_java, rng)
Exemple #3
0
    def __init__(self):
        self.gateway = get_java_gateway()

        # Create a placeholder for the model
        self.model_ = None
        self._compress_level = 9
        self.feature_importances_ = None
Exemple #4
0
    def __setstate__(self, state):
        # Unpickle the object
        super(BaseLoloLearner, self).__setstate__(state)

        # Get a pointer to the gateway
        self.gateway = get_java_gateway()

        # If needed, load the model into memory
        if state['model_'] is not None:
            bytes = state.pop('model_')
            self.model_ = self.gateway.jvm.io.citrine.lolo.util.LoloPyDataLoader.deserializeObject(
                bytes)
Exemple #5
0
    def test_launch(self):
        # Launch the gateway
        gate = get_java_gateway()

        # Make sure it runs by making a random number
        rnd = gate.jvm.java.util.Random()
        self.assertIsInstance(rnd.nextInt(), int)

        # Make sure importing Lolo works
        java_import(gate.jvm, "io.citrine.lolo.learners.*")
        self.assertIsInstance(gate.jvm.RandomForest, JavaClass)

        # Make sure requsting a gateway againt returns the same gateway
        gate2 = get_java_gateway()
        self.assertIs(gate, gate2)

        # Test getting a new gateway if needed
        gate3 = get_java_gateway(reuse=False)
        self.assertIsNot(gate, gate3)

        # Make the server using the package version of lolo
        gate4 = get_java_gateway(reuse=False, skip_devel_version=True)
        java_import(gate4.jvm, "io.citrine.lolo.learners.*")
        self.assertIsInstance(gate4.jvm.RandomForest, JavaClass)
Exemple #6
0
    def test_uncertainty_correlation(self):
        seed(3893789455)
        sample_size = 2 ** 15
        gateway = get_java_gateway()
        rng = gateway.jvm.scala.util.Random(783245)
        for expected in [0, 0.75]:
            # Make the error distribution
            y_true = uniform(0, 1, sample_size)

            # Make the errors and uncertainties
            draw = multivariate_normal([0, 0], [[1, expected], [expected, 1]], sample_size)

            # Add the errors, and separate out the standard deviations
            y_pred = y_true + [d[0] * normal(0, 1) for d in draw]
            y_std = [abs(d[1]) for d in draw]

            # Test with a very large tolerance for now
            measured_corr = uncertainty_correlation(y_true, y_pred, y_std, rng = rng)
            corr_error = abs(measured_corr - expected)
            self.assertLess(corr_error, 0.25, 'Error for {:.2f}: {:.2f}'.format(expected, corr_error))
Exemple #7
0
 def test_standard_confidene(self):
     gateway = get_java_gateway()
     rng = gateway.jvm.scala.util.Random(367894)
     self.assertAlmostEqual(standard_confidence([1, 2], [2, 3], [1.5, 0.9]), 0.5, rng)
     self.assertAlmostEqual(standard_confidence([1, 2], [2, 3], [1.5, 1.1]), 1, rng)