Использование randi в MATLAB для получения случайных значений: значения не распределены равномерно - PullRequest
3 голосов
/ 11 октября 2011

Я генерирую случайную совокупность строк, состоящих из 0 и 1. Я использую randi(2)-1, чтобы получить случайно сгенерированное одиночное значение 0 или 1. Я ожидаю получить 1 с почти так же часто, как 0. Вместо этого, когда я смотрю на всех людей в популяции, они в основном состоят из 1. Ниже код - что не так?

for iInd=1:individualsCount
    individual(attrCount) = 0;

    for i=1:attrCount
         individual(i) = randi(2)-1;
    end

    population{iInd} = individual;
end

1 Ответ

8 голосов
/ 11 октября 2011

Во-первых, вам не нужен цикл для генерации случайной строки из 0 и 1.Попробуйте вместо этого:

individual = randi([0 1],[attrCount,1]);

Во-вторых, опять же, вам не нужен цикл для создания вашей population ячейки.Попробуйте вместо этого:

population=arrayfun(@(x)randi([0 1],[attrCount,1]),1:individualsCount,'UniformOutput',false)

Возможно, вам придется изменить порядок строк и столбцов в зависимости от того, как вы хотите его настроить.


Теперь перейдем к вашему вопросу,Вы должны понимать, что эти распределения являются стохастическими и приближаются к действительно равномерному распределению 50% 1 и 50% 0 только тогда, когда размер выборки приближается к бесконечности.Если ваш attrCount достаточно мал, не удивляйтесь, если вы не найдете чисел, близких к 50% для каждого.Это не значит, что это неправильно.Это то, что есть.

Вот как выглядит распределение 1 для случайного двоичного вектора различных размеров выборки.Вы можете видеть, что для малых размеров выборки существует высокая изменчивость (и это ни в коем случае не является точной ... она будет отличаться каждый раз), тогда как, когда вы начнете приближаться к большим размерам выборки от 1000 и выше, ваше распределение 1 с получаетвсе ближе и ближе к 50%, в конечном итоге равным 50% на бесконечности.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...