Regression in iota^2
Iota^2 is actually used to perform classification. However, all the ingredients needed to perform regression/parameter estimation are available within the otbapp.
The different steps are similar to classification (sampling, training, predict and validation). However, the predicted values are continuous hence the accuracy measure should be adapted. Also, contrary to classification, it is usual to normalise (center the data and divide by the std: zero mean and unit variance).
The steps to conduct regression could be:
-
Learning:
-
using the otbapp TrainRegression, a csv file should be provided. This file could be converted from an sqlite generate using the sampling tools used for classification. Otherwise, it should be possible to provide directly the csv file without performing the sampling from an image (for instance in the situation where the data are generated from physical model).
-
Normalization of the data: the value to be predict y should be normalized per default before the training: yn = (y-\bar{y})/std(y). Also, y could be multi-dimensional.
-
Usually cross-validation is performed to select the best hyperparameters of the regression methods. At least, we should be able to get from the learning step a cross-validated estimation of the regression error from the app. (I don't know what is included for cross validation, but N. Karasiak has build some python tools that link otb and scikit-learn cross validation generator).
-
-
Predict: can be done with otb app. If the normalization was performed in the training set, the method should convert the predicted value back to the original dynamic (yp*std(y)+\bar[y]).
-
Validation: Usually, the normalised/relative root mean square error is used to provide a qualitative value of the error/precision of the regression. If the normalization is applied, the root mean square error is already normalized. Otherwise, it should be.