2017-05-28 14 views
0

次のようにI 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)である): 私が直面してる問題は、クラスがクラス3 >> 1> 2> 0で、不均衡であるということです 1 1 3 2

私は、最終的なデータセットを両立したいと思います:各クラスの(サンプル)

  • は画像
  • 使用の最低数のクラスのカウントを取得

    画像の数をカウント
    • 他の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

    関連する問題