Clear Filters
Clear Filters

Is it possible to train a gaussian process regression (GPR) using input and output multidimensional arrays?

4 views (last 30 days)
I want to use a GPR to reproduce the perfomance of a mechanistic model. I have already conduct simulations and gather input and output data. I have 100 time series each with 10k data and 20 characteristics, resulting in a multidimensional array of 10k x 20 x 100.
Thanks for your help, Rafael

Answers (1)

Aditya on 27 Feb 2024
Given that you have 100 time series each with 10k data points and 20 characteristics, it seems that you may want to predict one or more outputs based on these 20 characteristics. You will need to decide how to treat the time series aspect in your GPR model. One common approach is to include time as one of the features if the time series nature is important for the prediction.
Here's a step-by-step guide to prepare your data and train a GPR model:
  • Reshape the Data: Flatten your multidimensional array into a 2D matrix where each row is an observation (time point) and each column is a feature. This might mean you have 1 million rows (100 series * 10k data points) and 20 columns for features, plus potentially one additional column for time if you include it as a feature.
% Original data dimensions: 10k (time) x 20 (features) x 100 (series)
data = rand(10000, 20, 100); % Replace this with your actual data
% Reshape the data
numTimePoints = size(data, 1);
numFeatures = size(data, 2);
numSeries = size(data, 3);
% Option 1: Include time as a feature
time = repmat((1:numTimePoints)', [1, numSeries]);
features = reshape(permute(data, [1, 3, 2]), [], numFeatures);
inputs = [time(:), features]; % Now inputs is (numTimePoints * numSeries) x (numFeatures + 1)
% Option 2: Exclude time as a feature
inputs = reshape(permute(data, [1, 3, 2]), [], numFeatures); % Now inputs is (numTimePoints * numSeries) x numFeatures
  • Prepare the Output Data: If you have corresponding output data for each time point, you will need to reshape it similarly to a vector or matrix where each row corresponds to one observation.
% Assuming outputData is a matrix of 10k x 100
outputData = rand(10000, 100); % Replace this with your actual output data
% Reshape the output data
outputs = reshape(outputData, [], 1); % Now outputs is (numTimePoints * numSeries) x 1
  • Train the GPR Model: Once your data is in the correct format, you can train the GPR model using the fitrgp function in MATLAB.
% Train the GPR model
gprMdl = fitrgp(inputs, outputs);
  • Evaluate the Model: After training, you can make predictions and evaluate the model's performance using various metrics like mean squared error (MSE), mean absolute error (MAE), etc.
% Make predictions
predictedOutputs = predict(gprMdl, inputs);
% Calculate performance metrics
mse = mean((predictedOutputs - outputs).^2);
Keep in mind that GPR can be computationally intensive, particularly with large datasets. If you run into performance issues, you may need to consider using a subset of the data for training or applying dimensionality reduction techniques. Additionally, you might need to customize the GPR model by specifying a kernel function that matches the characteristics of your data.




Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!