iterate over a vector in a for loop

653 visualizaciones (últimos 30 días)
Catherine Branter
Catherine Branter el 21 de Nov. de 2018
Comentada: Umar el 30 de Jun. de 2024
I am trying to loop through a matrix - my model has no problem looping through the bandwidths "bw" but i get an error when looping through the priors, because prior has vectors of values
the input of prior works in the format when not using a for loop...
prior = [0.427,0.226,0.347];
but i want the model to run through 3 different types of prior probabilities, as below
the error i get is: Error using classreg.learning.classif.FullClassificationModel.processPrior (line 264)
Prior probabilities must be a vector of length 3.
when i print prior i get
priors =
0.3300 0.3300 0.3300
0.4270 0.2260 0.3470
0.2000 0.2000 0.6000
bandwidths = [0.2, 0.5, 1];
priors = [0.33 0.33 0.33; 0.427 0.226 0.347; 0.2 0.2 0.6];
global mymatrix
for f=1:length(bandwidths);
for l=1:length(priors);
bw= bandwidths(f);
p = priors(l)
Mdl = fitcnb(x_train_crossval,y_labels_train_crossval,'ClassNames', class_names,'PredictorNames',predictor_names,'Prior',p,'Width',bw);

Respuestas (2)

Jan
Jan el 21 de Nov. de 2018
Avoid length, but use size with a specified dimension.
for f = 1:size(bandwidths, 2)
for l = 1:size(priors, 1)
bw = bandwidths(f);
p = priors(l, :);
priors(l) is a scalar, but the error message explains, that a [1 x 3] vector is required.

Umar
Umar el 30 de Jun. de 2024
Hi Catherine,
To resolve the error and correctly loop through different sets of prior probabilities, you need to adjust how the priors variable is accessed within the loop. Instead of iterating over rows of the priors matrix, you should extract a single row vector for each iteration.
Here is the corrected code snippet:
global mymatrix
for f = 1:length(bandwidths) for l = 1:size(priors, 1) % Iterate over rows of priors bw = bandwidths(f); p = priors(l, :); % Extract a single row of priors Mdl = fitcnb(x_train_crossval, y_labels_train_crossval, 'ClassNames', class_names, 'PredictorNames', predictor_names, 'Prior', p, 'Width', bw); end end
By using p = priors(l, :), you can access each row of the priors matrix as a single row vector, satisfying the requirements of the fitcnb function.
Hope this will help resolve your issue.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by