Filter löschen
Filter löschen

how to change a number randomly???...

1 Ansicht (letzte 30 Tage)
sani ars
sani ars am 30 Nov. 2012
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???...

Akzeptierte Antwort

Jan
Jan am 30 Nov. 2012
Bearbeitet: Jan am 30 Nov. 2012
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
  2 Kommentare
sani ars
sani ars am 30 Nov. 2012
I have tried it... just change it as:
rem(labels(rand_class_index) + randi([1,4], prcnt_labels, 1),4)+1
its working fine..... But at some places it is not changing the label e.g. if the label is 4 it still remain 4 as the randi () is randomly giving the number..
For this, I tried to match the actual labels (of selected indices) with the changed one as:
tr = zeros(size(rand_class_index,1),2);
tr = rem(labels(rand_class_index) + randi([1,4], prcnt_labels, 1),4)+1
labl_val = labels(rand_class_index)
for i = 1:size(rand_class_index,1)
if tr(i,1)== labl_val(i,1)
tr(i,1) = labl_val(i,1)+1;
end
end
labels(rand_class_index) = tr(:,1)
// I need to rewrite following line of code
tr(i,1) = labl_val(i,1)+1;
because using this line, if the label (labl_val) is 4 it will become 5 and I don't want 5.. I want that it should be change to any number from 1 2 3..
Just need to correct this line... Can someone plz tell about it??..
Jos (10584)
Jos (10584) am 30 Nov. 2012
if tr(i,1) == 5, tr(i,1) = 1 ; end

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Matt Fig
Matt Fig am 30 Nov. 2012
labels(randperm(numel(labels)))
  1 Kommentar
sani ars
sani ars am 30 Nov. 2012
I just want to change the values of selected indexes, not the whole labels

Melden Sie sich an, um zu kommentieren.

Tags

Noch keine Tags eingegeben.

Community Treasure Hunt

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

Start Hunting!

Translated by