def test_unweighted_all_correct(self): s_obj = metrics.SensitivityAtSpecificity(0.7, num_thresholds=1) inputs = np.random.randint(0, 2, size=(100, 1)) y_pred = K.constant(inputs, dtype='float32') y_true = K.constant(inputs) result = s_obj(y_true, y_pred) assert np.isclose(1, K.eval(result))
def test_SensitivityAtSpecificity(self, distribution): label_prediction = ([0, 0, 0, 1, 1], [0, 0.3, 0.8, 0.3, 0.8]) with distribution.scope(): metric = metrics.SensitivityAtSpecificity(0.5) self.evaluate([v.initializer for v in metric.variables]) updates = distribution.run(metric, args=label_prediction) self.evaluate(updates) self.assertAllClose(metric.result(), 0.5)
def test_unweighted_low_specificity(self): s_obj = metrics.SensitivityAtSpecificity(0.4) pred_values = [0.0, 0.1, 0.2, 0.3, 0.4, 0.01, 0.02, 0.25, 0.26, 0.26] label_values = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1] y_pred = K.constant(pred_values, dtype='float32') y_true = K.constant(label_values) result = s_obj(y_true, y_pred) assert np.isclose(0.6, K.eval(result))
def test_weighted(self): s_obj = metrics.SensitivityAtSpecificity(0.4) pred_values = [0.0, 0.1, 0.2, 0.3, 0.4, 0.01, 0.02, 0.25, 0.26, 0.26] label_values = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1] weight_values = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] y_pred = K.constant(pred_values, dtype='float32') y_true = K.constant(label_values, dtype='float32') weights = K.constant(weight_values) result = s_obj(y_true, y_pred, sample_weight=weights) assert np.isclose(0.675, K.eval(result))
def test_sensitivity_metrics(): metrics_list = [ metrics.SensitivityAtSpecificity(0.5), metrics.SpecificityAtSensitivity(0.5), ] model = Sequential([Dense(2, input_shape=(3, ))]) model.compile('rmsprop', 'mse', metrics=metrics_list) x = np.random.random((10, 3)) y = np.random.random((10, 2)) model.fit(x, y) model.evaluate(x, y)
def test_config(self): s_obj = metrics.SensitivityAtSpecificity( 0.4, num_thresholds=100, name='sensitivity_at_specificity_1') assert s_obj.name == 'sensitivity_at_specificity_1' assert len(s_obj.weights) == 4 assert s_obj.specificity == 0.4 assert s_obj.num_thresholds == 100 # Check save and restore config s_obj2 = metrics.SensitivityAtSpecificity.from_config( s_obj.get_config()) assert s_obj2.name == 'sensitivity_at_specificity_1' assert len(s_obj2.weights) == 4 assert s_obj2.specificity == 0.4 assert s_obj2.num_thresholds == 100
def test_invalid_num_thresholds(self): with pytest.raises(Exception): metrics.SensitivityAtSpecificity(0.4, num_thresholds=-1)
def test_invalid_specificity(self): with pytest.raises(Exception): metrics.SensitivityAtSpecificity(-1)