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

3 vues (au cours des 30 derniers jours)
sani ars
sani ars le 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???...

Réponse acceptée

Jan
Jan le 30 Nov 2012
Modifié(e) : Jan le 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 commentaires
sani ars
sani ars le 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) le 30 Nov 2012
if tr(i,1) == 5, tr(i,1) = 1 ; end

Connectez-vous pour commenter.

Plus de réponses (1)

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

Connectez-vous pour commenter.

Catégories

En savoir plus sur Creating and Concatenating Matrices dans Help Center et File Exchange

Tags

Aucun tag saisi pour le moment.

Community Treasure Hunt

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

Start Hunting!

Translated by