次回より『ヒデログ』とご検索ください

【Python入門】scikit-learnのLabelEncoderの使い方

scikitlearn

文字列を離散数値に変える「LabelEncoder」の使い方を解説します。

LabelEncoderの必要性

文字列を分類器(ロジスティック回帰など)にかけるのには、学習の前に数値に変換しておく必要があります。特段、設定もする必要がないので非常に使い勝手がいいです。

LabelEncoderは0からn-1の数値(n:分類数)でエンコードします。

ライブラリとしてはsklearn.preprocessingに含まれている。

サンプルコード

# LabelEncoderをインポート
from sklearn.preprocessing import LabelEncoder
le=LabelEncoder()

cities=['kanagawa','tokyo','tokyo','saitama']

#ラベルをエンコード
le.fit(cities)

#エンコードされたラベルを表示
le.classes_
# array(['kanagawa', 'saitama', 'tokyo'])

# 離散数値に変更
cities_val=le.transform(cities)
# array([1, 2, 2, 0])

cities2=['chiba','tokyo','tokyo','saitama']

# エンコードしたターゲットに含まれていない文字列が含まれているとエラーになる
cities2_val=le.transform(cities2)
# y contains previously unseen labels: ['chiba']

cities3=['kanagawa','tokyo','tokyo','saitama']

# fitとtrans_formを同時に行う
cities3_val=le.fit_transform(cities3)

# エンコードした数値をデコードする
le.inverse_transform(cities3_val)
array(['kanagawa', 'tokyo', 'tokyo', 'saitama'])

解説

fitで変換したいデータを設定して、transformで変換を行います。また、fit_transformでは、fittransformを同時に行うことができます。

inverse_transformでは変換されたデータをデコードできます。

まとめ

LabelEncoderを使えば文字列で分類されているデータを数値に変換してくれるので、分類器に入れて最適化を行うことができます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です