行列を閾値で0/1化したい(sklearnのBinarizerを使う)

画像データを扱う時など、行列の中の数値をいっぺんに0or1に変換したい時があります。
そんなときはsklearnのBinarizerを用いると便利です。

コード

from sklearn.preprocessing import Binarizer
import numpy as np

#3✖️3のサンプルデータ
X = np.random.randint(low=0,high=100,size=(3,3))


# 他のpreprocessingと同じ
biner = Binarizer(threshold=50).fit(X)
res = biner.transform(X)

引数

  • threshold閾値を設定できます
  • 閾値以下なら0、異なれば1を返します
  • デフォルトでは0.0が閾値です。

pandasとの使い分け

pandasでも、applymaplambdaで同様の処理はかけます。
返るのがデータフレームなので、特にその必要がないなら(それこそ画像など)、Binarizerで良いと思います。

import pandas as pd
pd.DataFrame(X).applymap(lambda x : 0 if x<= 50 else 1)

その他の使い分けとして、Binarizerは使い方が他のpreprocessと同じなので、
処理を可変にしつつ、後ろは.transformしたい、などと言ったときに使うかもしれません。