quick start

Build a Model by providing all the arguments to initiate it. For building deep learning mdoels, we can use higher level functions such as ai4water.models.LSTM.

>>> from ai4water import Model
>>> from ai4water.models import LSTM
>>> from ai4water.datasets import busan_beach
>>> data = busan_beach()
>>> model = Model(
...         model = LSTM(64),
...         input_features=['tide_cm', 'wat_temp_c', 'sal_psu', 'air_temp_c', 'pcp_mm'],   # columns in csv file to be used as input
...         output_features = ['tetx_coppml'],     # columns in csv file to be used as output
...         ts_args={'lookback': 12}  # how much historical data we want to feed to model
>>> )

Train the model by calling the fit() method

>>> history = model.fit(data=data)

Make predictions from it

>>> predicted = model.predict()

The model object returned from initiating AI4Wwater’s Model is same as that of Keras’ Model We can verify it by checking its type

>>> import tensorflow as tf
>>> isinstance(model, tf.keras.Model)  # True

Defining layers of neural networks

Above we had used LSTM model. Other available deep learning models are MLP (ai4water.models.MLP), CNN (ai4water.models.CNN) CNNLSTM (ai4water.models.CNNLSTM), TCN (ai4water.models.TCN) and TFT (ai4water.models.TFT). On the other hand if we wish to define the layers of neural networks ourselves, we can also do so using declarative model definition for tensorflow

>>> from ai4water import Model
>>> from ai4water.datasets import busan_beach
>>> data = busan_beach()
>>> model = Model(
...         model = {'layers': {"LSTM": 64,
...                             'Dense': 1}},
...         input_features=['tide_cm', 'wat_temp_c', 'sal_psu', 'air_temp_c', 'pcp_mm'],
...         output_features = ['tetx_coppml'],
...         ts_args={'lookback': 12}
>>> )

Using your own pre-processed data

You can use your own pre-processed data without using any of pre-processing tools of AI4Water. You will need to provide input output paris to data argument to fit and/or predict methods.

>>> import numpy as np
>>> from ai4water import Model  # import any of the above model
...
>>> batch_size = 16
>>> lookback = 15
>>> inputs = ['dummy1', 'dummy2', 'dummy3', 'dumm4', 'dummy5']  # just dummy names for plotting and saving results.
>>> outputs=['DummyTarget']
...
>>> model = Model(
...             model = {'layers': {"LSTM": 64,
...                                 'Dense': 1}},
...             batch_size=batch_size,
...             ts_args={'lookback':lookback},
...             input_features=inputs,
...             output_features=outputs,
...             lr=0.001
...               )
>>> x = np.random.random((batch_size*10, lookback, len(inputs)))
>>> y = np.random.random((batch_size*10, len(outputs)))
...
>>> history = model.fit(x=x,y=y)

using scikit-learn/xgboost/lgbm/catboost based models

The repository can also be used for machine learning based models such as scikit-learn/xgboost based models for both classification and regression problems by making use of model keyword arguments in Model function. However, integration of ML based models is not complete yet.

>>> from ai4water import Model
>>> from ai4water.datasets import busan_beach
...
>>> data = busan_beach()  # path for data file
...
>>> model = Model(
...         input_features=['tide_cm', 'wat_temp_c', 'sal_psu', 'air_temp_c', 'pcp_mm'],   # columns in csv file to be used as input
...         output_features = ['tetx_coppml'],
...         val_fraction=0.0,
...         #  any regressor from https://scikit-learn.org/stable/modules/classes.html
...         model={"RandomForestRegressor": {"n_estimators":1000}},  # set any of regressor's parameters. e.g. for RandomForestRegressor above used,
...     # some of the paramters are https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestRegressor.html#sklearn.ensemble.RandomForestRegressor
...               )
...
>>> history = model.fit(data=data)
...
>>> preds = model.predict()

Using your own (custom) model

If you don’t want to use sklearn/xgboost/catboost/lgbm’s Models and you have your own model. You can use this model seamlessley as far as this model has .fit, .evaluate and .predict methods.

>>> from ai4water import Model
>>> from ai4water.datasets import busan_beach
>>> from sklearn.ensemble import RandomForestRegressor
>>> class MyRF(RandomForestRegressor):
>>>     pass  # your own customized random forest model
>>> data = busan_beach()
>>> model = Model(model=MyRF, mode="regression")
>>> model.fit(data=data)

you can initialize your Model with arguments as well
>>> model = Model(model={MyRF: {"n_estimators": 10}},
>>>               mode="regression")
>>> model.fit(data=data)

Hyperparameter optimization

For hyperparameter optimization, replace the actual values of hyperparameters with the space.

>>> from ai4water import Model
>>> from ai4water.datasets import busan_beach
>>> from ai4water.hyperopt import Integer, Real
>>> data = busan_beach()
>>> model = Model(
...         model = {'layers': {"LSTM": Integer(low=30, high=100,name="units"),
...                             'Dense': 1}},
...         input_features=['tide_cm', 'wat_temp_c', 'sal_psu', 'air_temp_c', 'pcp_mm'],   # columns in csv file to be used as input
...         output_features = ['tetx_coppml'],     # columns in csv file to be used as output
...         ts_args={'lookback': Integer(low=5, high=15, name="lookback")},
...         lr=Real(low=0.00001, high=0.001, name="lr")
>>> )
>>> model.optimize_hyperparameters(data=data,
...                                algorithm="bayes",  # choose between 'random', 'grid' or 'atpe'
...                                num_iterations=30
...                                )

Experiments

The experiments module can be used to compare a large range of regression and classification algorithms. For example, to compare performance of regression algorithms on your data

>>> from ai4water.datasets import busan_beach
>>> from ai4water.experiments import MLRegressionExperiments
# first compare the performance of all available models without optimizing their parameters
>>> data = busan_beach()  # read data file, in this case load the default data
>>> inputs = list(data.columns)[0:-1]  # define input and output columns in data
>>> outputs = list(data.columns)[-1]
>>> comparisons = MLRegressionExperiments(
>>>       input_features=inputs, output_features=outputs)
>>> comparisons.fit(data=data,run_type="dry_run")
>>> comparisons.compare_errors('r2')