Commit 339cf062 authored by Le Roux Erwan's avatar Le Roux Erwan
Browse files

[paper 1] add quantile regression

parent a9733091
No related merge requests found
Showing with 85 additions and 3 deletions
+85 -3
from cached_property import cached_property
from extreme_fit.estimator.abstract_estimator import AbstractEstimator
from extreme_fit.estimator.margin_estimator.abstract_margin_estimator import LinearMarginEstimator
from extreme_fit.estimator.quantile_estimator.abstract_quantile_function import AbstractQuantileFunction
from extreme_fit.model.margin_model.linear_margin_model.linear_margin_model import LinearMarginModel
from spatio_temporal_dataset.dataset.abstract_dataset import AbstractDataset
class AbstractQuantileEstimator(AbstractEstimator):
def __init__(self, quantile: float, **kwargs):
super().__init__(**kwargs)
assert 0 < quantile < 1
self.quantile = quantile
@cached_property
def quantile_function_from_fit(self) -> AbstractQuantileFunction:
pass
class QuantileEstimatorFromMargin(AbstractQuantileEstimator, LinearMarginEstimator):
def __init__(self, dataset: AbstractDataset, margin_model: LinearMarginModel, quantile):
super().__init__(dataset=dataset, quantile=quantile, margin_model=margin_model)
@cached_property
def quantile_function_from_fit(self) -> AbstractQuantileFunction:
linear_margin_function = super().margin_function_from_fit
return AbstractQuantileFunction(linear_margin_function, self.quantile)
import numpy as np
from extreme_fit.model.margin_model.margin_function.abstract_margin_function import AbstractMarginFunction
class AbstractQuantileFunction(object):
def __init__(self, margin_function: AbstractMarginFunction, quantile: float):
self.margin_function = margin_function
self.quantile = quantile
def get_quantile(self, coordinate: np.ndarray) -> float:
gev_params = self.margin_function.get_gev_params(coordinate)
return gev_params.quantile(self.quantile)
\ No newline at end of file
...@@ -40,6 +40,3 @@ class TestSmoothMarginEstimator(unittest.TestCase): ...@@ -40,6 +40,3 @@ class TestSmoothMarginEstimator(unittest.TestCase):
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()
# t = TestSmoothMarginEstimator()
# t.test_smooth_margin_estimator_spatio_temporal()
# t.tearDown()
import unittest
from extreme_fit.estimator.quantile_estimator.abstract_quantile_estimator import QuantileEstimatorFromMargin
from spatio_temporal_dataset.dataset.simulation_dataset import MarginDataset
from test.test_utils import load_test_1D_and_2D_spatial_coordinates, load_test_spatiotemporal_coordinates, \
load_smooth_margin_models
class TestSmoothMarginEstimator(unittest.TestCase):
DISPLAY = False
def test_smooth_margin_estimator_spatial(self):
self.nb_points = 2
self.nb_obs = 2
self.coordinates = load_test_1D_and_2D_spatial_coordinates(nb_points=self.nb_points)
def test_smooth_margin_estimator_spatio_temporal(self):
self.nb_points = 2
self.nb_steps = 2
self.nb_obs = 1
self.coordinates = load_test_spatiotemporal_coordinates(nb_steps=self.nb_steps, nb_points=self.nb_points)
def tearDown(self) -> None:
quantile = 0.98
for coordinates in self.coordinates:
constant_margin_model = load_smooth_margin_models(coordinates=coordinates)[0]
dataset = MarginDataset.from_sampling(nb_obs=self.nb_obs,
margin_model=constant_margin_model,
coordinates=coordinates)
quantile_estimators = [QuantileEstimatorFromMargin(dataset, constant_margin_model, quantile)]
help(QuantileEstimatorFromMargin)
for quantile_estimator in quantile_estimators:
quantile_estimator.fit()
print(quantile_estimator.margin_function_from_fit)
# self.assertTrue(True)
if __name__ == '__main__':
unittest.main()
\ No newline at end of file
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment