在 MATLAB 中從帶有資料集的矩陣或陣列中選擇隨機樣本的方法
-
使用 MATLAB 中的
randsample
函式提取隨機樣本 -
使用 MATLAB 中的
datasample
函式提取隨機樣本 -
在 MATLAB 中使用
datasample
從資料集矩陣中提取列的隨機樣本子集
我們將研究使用 MATLAB 的不同命令從任何資料集、陣列或矩陣中選擇隨機樣本的不同方法。
為了清除你的概念並讓你全面瞭解如何獲取隨機樣本,我們將通過提供程式碼示例來解釋諸如 Randn
、randsample
、datasample
之類的函式,以從你的資料集中提取隨機樣本並進行替換。因為沒有替換/替換以及顯示你的輸出外觀的片段。
讓我們假設我們有一個包含 50,000 行資料集的矩陣。我們想從我們的矩陣中選擇一個包含 50 個實體的隨機樣本。我們可以使用不止一種隨機抽樣方法來執行此任務。在開始列出這些方法之前,請記住,隨機樣本/資料/資料集是從資料集的矩陣中隨機選擇的一些資料。為了消除偏見和其他不希望的可能影響,我們使用隨機抽樣。但我們必須記住,它並不像我們看起來那麼簡單。從資料集中選擇隨機樣本比從包含 500 個實體的資料集中選擇 10 個實體更復雜。另外,我們必須確保隨機樣本是否確實是隨機的!
繼續我們的假設,我們可以使用 MATLAB 從我們的資料集中提取隨機樣本。MATLAB 為我們提供了幾個函式來從給定的資料集中選擇隨機樣本/資料。例如,我們可以使用 MATLAB 中的函式 randsample
從任何包含資料的陣列或矩陣中隨機選擇樣本,無論是否有替換/替換。
使用 MATLAB 中的 randsample
函式提取隨機樣本
假設 N_obs
觀察是隨機選擇的,並從資料集中的條目中替換,我們使用以下函式:
O_put = randsample(ourdata,N_obs)
其中 N_obs
表示觀察次數。如果 ourdata
是一個向量,我們的輸出 O_put
也將是一個包含資料集中 N_obs
個隨機樣本的向量。
讓我們使用這個函式來解決我們假設的問題。
程式碼:
%Let's assume we have 50,000 entries in a dataset "ourdata".
ourdata=50000;
%We want to obtain 5 random samples from this dataset
N_obs=5;
%Let's follow the above-explained concept and write our code
O_put = randsample(ourdata,N_obs);
輸出:
O_put =
46700
33937
42457
32788
1786
使用 MATLAB 中的 datasample
函式提取隨機樣本
如果我們想在提取隨機樣本時牢記尺寸,那麼我們使用下面的函式。
y = datasample(ourdata,N_obs,'Replace',false)
如果 Replace
是 true
,我們選擇有替換的樣本;否則,我們選擇不替換的樣本。如果 Replace
設定為 false
,我們限制 N_obs
,使其不超過我們在資料集中設定的元素數量。
Replace
預設為 true
。
true
= 替換樣本。
false
= 沒有替換的樣本。
我們可以通過編寫單行程式碼來實現這一點。牢記上述假設,我們將程式碼制定如下。
%Let's assume we have 50,000 entries in a dataset "ourdata".
%We want to obtain 5 random samples from this dataset
%Let's follow the above-explained concept and write our code using function
%datasample
%Let's Draw five unique values from the integers 1:50000 using 1 line code.
O_put = datasample(1:50000,5,'Replace',false);
輸出:
O_put =
24489 22279 32315 35467 37732
在 MATLAB 中使用 datasample
從資料集矩陣中提取列的隨機樣本子集
為此,我們將使用 MATLAB 中的 randn
函式。它建立具有正態分佈的隨機值陣列。
I_put=randn(A)
生成一個 A-by-A 矩陣,其中包含隨機生成的元素。
如果 A 不是標量(向量),則 MATLAB 將顯示錯誤訊息。
現在,為了獲得我們的隨機樣本,我們將使用 datasample
函式,給出給定資料矩陣的隨機列的子集。
程式碼:
I_put = randn(10,100000);
O_put = datasample(I_put,5,2,'Replace',false)
輸出:
O_put =
-0.5995 -0.7377 -1.1902 -0.6021 -1.0812
-0.0572 -0.7831 0.4746 0.7105 -0.8038
0.8401 1.0824 -0.3507 0.4069 -2.0817
-1.1358 -0.9041 -0.1702 0.5950 0.3954
-1.0887 -0.7766 -1.6901 -0.5047 1.1286
-0.0187 -0.3354 -0.7458 1.8554 0.8492
0.3251 -0.4219 0.2440 -0.4750 0.7628
1.4713 -1.9788 -1.6672 0.0035 -0.4316
0.6880 1.4387 -1.3525 -0.6950 0.6411
-0.2777 -0.4776 -0.9841 1.2752 0.2645
Mehak is an electrical engineer, a technical content writer, a team collaborator and a digital marketing enthusiast. She loves sketching and playing table tennis. Nature is what attracts her the most.
LinkedIn