2016-03-04 3 views
0

У меня есть следующий код:Как исправить возникновение случайных чисел

Accuracy=off(data,z) 
for i=1:100 
    n = size(data,1); 
    data_rand = data(randperm(n),:); 
    m = ceil(n/20); 
    k = 1:m:n-m; 
    test = data_rand(k:k+m-1,:); 
    train = [data_rand(1:k-1,:); data_rand(k+m:end,:)]; 
    %/ code to calculate auc 
end 
accuracy=mean(auc) 

каждой итерации значения train и test изменяются, поэтому значение auc изменяется каждый раз.

Скажем, конечный результат: accuracy=0.7654 и в другой раз accuracy=0.6543 или accuracy=0.4657. Я хочу зафиксировать определенный результат, скажем 0.6543, т.е. если я запустил предыдущий код больше раз, я хочу получить тот же результат (0.6543).

ответ

1

Ваша проблема - генератор случайных чисел (RNG). Исправьте это, установив rng('default') в первую строку после объявления цикла for. Это заставляет RNG всегда начинать с одной и той же точки.

seed можно выбрать просто:

seed = 4; %// starts the seed at 4 
rng(seed); 

Вы можете играть с количеством семян, чтобы найти число которых приводит удовлетворяющие перестановки для вас.

+0

, но в некоторых наборах данных это дает плохие результаты. –

+0

@AsmaaDaoud. Вы можете играть с «семенем» rng (см. Связанную документацию) для создания начальной точки, но в противном случае вы не можете исправить это через RNG. Однако вы можете использовать 'randperm' свои данные, пока не получите удовлетворительный набор, сохраните его до цикла и продолжайте использовать его. – Adriaan

+0

Большое спасибо, но как использовать семя –

Смежные вопросы