【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は以下のようにして求めることが出来る。
mapとnp.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の個数
人気記事
人気記事はこちら。