...
The prediction service represents a web interface which allows to request, insert and modify prediction data from the database. Operations are performed by sending URL requests, whereas each operation is well defined as a so called route. The property prediction service comes along with a graphical user interface at http://localhost:8004/ui/ which provides visual access to all available routes. Hereby, all routes involving the request of data are enlisted under the View section.
For this tutorial we are using only two routes. One to verify wherever an algorithm configuration exists and one to request all available predictions within from our database.
- /algoconfig/list
- /prediction/list
...
In our example we run a machine learning algorithm which produces a set of flare prediction predictions to store within our database. Hereby, the algorithm consists of a training phase and a test testing or prediction phase. Within the training phase the algorithm learns and tunes its parameters which then can be stored within the database as a configuration for later use. Afterwards, within the test testing phase, we use this configuration to compute flare predictions which are also stored within the database.
For the following example we assume, as the two functions 'train_model' and 'test_model' are already defined within the python script. Otherwise, we refer to the following HowtoHow-to: Ingest prediction data in database (REST API).
Given the two above two functions we could define our algorithm's workflow as follows:
Code Block | ||
---|---|---|
| ||
import json import requests # Setupsetup environment environment = {} with open("params.json") as params_file: environment = json.loads(params_file.read()) # Downloaddownload required regions and properties response = requests.get( 'http://localhost:8002/region/%s/list?cadence=%s&time_start=between(%s,%s)' % ( environment['algorithm']['dataset'], environment['algorithm']['cadence'], environment['algorithm']['time_start'], environment['algorithm']['time_end'] ) ).json() if response['has_error'] == True or response['result-count'] == 0: raise ValueError('No data found!') else: # FIXME: Bad Implementation # if we already have an algorithm configuration stored within the database, # we do not need to extract any traintraining notnor validation data. (train_data, validation_data, test_data) = createDataPartitionscreate_data_partitions(response['data']) # Setupsetup model model = MyMLAlgorithmDemoMLAlgorithm(envirnomentenvironment['algorithm']['params']) # Checkcheck wherever we have to train our algorithm or if we can download an already existing configuration response = requests.get( 'http://localhost:8004/algoconfig/list?algorithm_config_name=%s&algorithm_config_version=%s' % (environment['algorithm']['cfg_name'], 'latest') ).json() if response['has_error'] == False and response['result-count'] > 0: # as we requested the latest configuration we expect only one result within 'data' algo_cfg = response['data'][0]['config_data'] model.set_parameters(algo_cfg) else: train_model( model, train_data, validation_data, envirnomentenvironment['algorithm']['max_epoches'], envirnomentenvironment['algorithm']['batch_size'], environment ) # run algorithm prediction = test_model(model, test_data, environment) prediction_ids = [get_fc_id(row) for row in prediction] # check wherever the new prediction was successfully stored within the database response = requests.get( 'http://localhost:8004/prediction/list?prediction_fc_id=eq(%s)' % (','.join(prediction_ids)) ).json() if response['has_error'] == True or response['result-count'] == 0: raise AssertionError('No predictions found!') else: for prediction in response['data']: print(prediction) |
Source Code
Here you can download the full python source code.
request_ property prediction_data.py
For a more detailed implementation with dummy data you can download the python following demo script (recommended).
request_prediction_data_demo.py
Info |
---|
This page was adopted from Request property data from database (REST API). |