2017-05-28 25 views
0

我有2個numpy的陣列如下:如何平衡numpy數組中的類?

images包含圖像的文件的名稱(images.shape是(N,3,128,128)): image_1.jpg image_2.jpg image_3.jpg image_4.jpg

labels包含相應的標籤(0-3)(labels.shape是(N)): 1 1 3 2

我面對的問題是,這些類是不平衡,用3類>> 1> 2> 0

我想,以平衡由最終的數據集:

  • 每班
  • 計數圖像(樣本)的數量獲取類的計數與最低的數字圖像
  • 使用該計數爲圖像/標籤的對於其他3個類別的最大數目
  • 隨機
  • 彈出過量圖像/在images從其他3類標籤和labels

到目前爲止,我使用Counter以確定每類圖像的數量:

from Collections import Counter 
import numpy as np 

count = Counter(labels) 
print(count) 

>>>Counter({'1': 2991, '0': 2953, '2': 2510, '3': 2488}) 

你會如何建議我隨機imageslabels所以它們包含的類0,1 2488個樣本流行元素相匹配,和2?

回答

1

你可以使用np.random.choice創建一個整數值面膜,你可以應用到你的標籤和圖片來平衡數據集:

n = 2488 

mask = np.hstack([np.random.choice(np.where(labels == l)[0], n, replace=False) 
         for l in np.unique(labels)]) 
+0

將'ix'是我同時適用於一個布爾向量數組? (圖片和標籤) – pepe

+0

對不起,我的回答是錯誤的,我修好了; 'ix'是一個整數向量,用於索引兩個數組 – maxymoo