2013-11-25 172 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