2013-11-25 141 views
-4

我是Matlab中的新手,我试图根据高斯(正态)分布和均匀分布生成二维随机数。假设我想要创建一个将用于数据挖掘任务/算法(二维数据过拟合)的2个不同数据集(高斯(1800对)和均匀(1200对))。在Matlab中生成随机二维点

其他重要问题是数据点应该在0-20的范围内。

我已经试过这对于高斯分布

SIGMA = [.5 .05; .05 .5 ]; 
temp = mvnrnd([-3 0], SIGMA,1800); 

这些代码生成-5之间的数值为5,我想生成0-20所以我试图

SIGMA = [0 20]; 

,但我得到的范围-20至20

我怎样才能得到范围0-20?

+2

到目前为止你累了什么?你有没有看过'rand'和'randn'?给我们展示一些代码... – Shai

+1

高斯随机变量没有硬性界限。极端值不太可能。你能做的最好的就是抵消平均值,这是由mvnrnd的第一个参数控制的。试试[10 10]。 – Peter

+0

'mvnrnd'不是正态分布(除非你可能选择合适的参数来适应特殊情况)。使用'randn'代替。 – Daniel

回答

3
Gaussian_r=10+(10/3)*randn(1800,1) 

在这里,我使用的3西格玛规则,其中随机变量的99.7%将落在平均值之间 - 西格玛意味着+ 3西格玛,这意味着仍有可能下跌,如果这是你所指定的区域外0.3%不是配不上你,你可以让西格玛小

Uniform_r = 20*rand(1200,1) 

,如果你想这些是整数使用兰迪代替

检查randnrandirand

1

统一: R =兰迪(20,2,1200)

高斯: 的函数randn是高斯分布的标准偏差(SIGMA)= 1和平均(MU)= 0。真实正态分布不受限于一个区间,随着距离平均值越远,事件的概率越小。随着您的样本量变大,获得极值的可能性会增加。假设你希望你的分布集中在10左右(平均值)左右,你可以选择一个合适的小西格玛来使1800个样本中的异常值不太可能发生,然后确保它不会发生在有条件的情况下。

如果你在6sigma范围内有3600个样本,样本在外面的概率很小(7.1e-4%,你可以在MATLAB中用1-erf(6/sqrt(2))^ 3600)看到。所以一个合理的西格玛可能是10/6(1.6667)。这给了我们:

r = 10 + 1.6667 * randn(2,1800) %以防万一 r(r> 20)= 20; r(r < 0)= 0;

http://en.wikipedia.org/wiki/Normal_distribution