MATLAB: How to change a number randomly???…

I have a column matrix that contains class labels in it. It has 35 rows… There are 4 class labels ( 1 2 3 4 )…
labels = [1 1 3 2 4 1 2 4 3 3 2 1 4 2 3 4 4 2 2 1 3 2 4 4 2 3 1 1 2 4 3 1 2 1 3] '
now I randomly select 5% of data from it as
N_of_labels= size(labels,1)
prcnt_labels = ceil(N_of_labels*5/100);
rng(1,'twister');
rand_class_index = randsample(N_of_labels,prcnt_labels);
labels(rand_class_index) = rem(labels(rand_class_index),4)+1;
the purpose of it to make the class labels noisy (changing the actual label)…. Now here, rem() will always change the label 1 into 2 and 2 into 3 and so on… I need to change the labels randomly i.e. I want that 2 should be change to any number from 1 3 4 but not always to 3…. how can I do that???…

Best Answer

What about adding random values between 0 and 3 before REM:
rem(labels(rand_class_index) + randi([0, 3], prcnt_labels, 1), 4) + 1
If the label must be changed, use the range [1,3].
[EDITED after your comment]
randi([0,3]) replies number from 0 to 3. Then a value can be unchanged. If a change is obligatory, use the range [1,3] as mentioned already:
rem(labels(rand_class_index) + randi([1, 3], prcnt_labels, 1), 4) + 1