【map】配列の要素で多数決を行う方法【Python】

スポンサーリンク

【map】配列の要素で多数決を行う方法【Python】

分類モデルを学習する時にクロスバリデーション、アンサンブルなどで予測結果の多数決を取りたい場合がある。

この時に便利な方法があるのでまとめておく。

以下のように3つの予測結果とそれをまとめた配列があるとする。

この場合だとpred1〜pred3の長さは4なので4つのデータを予測していることになる。

import numpy as np

pred1 = np.array([0, 0, 1, 0])
pred2 = np.array([1, 0, 0, 1])
pred3 = np.array([0, 1, 0, 1])
preds = np.array([pred1, pred2, pred3])
print(preds)

# 出力
# [[0 0 1 0]
#  [1 0 0 1]
#  [0 1 0 1]]

map()・np.bincount()を使う

多数決による最終的な予測結果predは以下のようにして求めることが出来る。

mapnp.bincountを使う。

pred = [*map(lambda x:np.argmax(np.bincount(x)), preds.T)]
print(pred)

# 出力
# [0, 0, 0, 1]

転置されたpreds(preds.T)の各行で値のカウントを行い、最も数が多い値を取得している。

print(preds.T)

# 出力
# [[0 1 0]
#  [0 0 1]
#  [1 0 0]
#  [0 1 1]]
print(np.bincount(preds.T[3]))
 
# 出力
# [1 2] 
# 1: 0の個数 2: 1の個数

人気記事

人気記事はこちら。

CUDA、cuDNNのバージョンをターミナルで調べるコマンド
【Pytorch】テンソルを連結する方法(cat・stack)
【Pytorch】テンソルの次元を追加・削除する方法【dim】
【Protobuf】"TypeError: Descriptors cannot not be created directly."を解決する【solved】
【Python】Tensorflowをダウングレード・アップグレードするコマンド
タイトルとURLをコピーしました