OrdinalEncoder

概要

sklearn.preprocessingOrdinalEncoderは、2次元のデータ(行数×列数=データ数×特徴量数)を須知ラベルデータに変換する。

  • コンストラクターでencoderのインスタンスを生成
  • fit()メソッドに2次元の元データを与える(元データは2次元のリスト、ndarray、DataFrameは可)
  • 元データの特徴量ごと(列ごと)にデータが数値ラベル化される
  • 特徴量のカテゴリー数がn_classのとき、特徴量データが0~n_class−1の整数ラベルに変換される
  • 1次元のデータを変換する場合も2次元に変形する必要がある
  • 変換は全ての列が対象となり、定量的な数値データが含まれていてもそれらが数値ラベルに変換される

使い方

fit~ラベルの設定

以下の例では、3つの特徴量を持つ6つのデータを例題としている。特徴量は3つともクラスデータで、fit()メソッドで変換器の準備をする。

  • エンコーダーにおけるfit()は、特徴量ごとにクラスデータのラベルを設定し、変換器を準備する
  • フィッティングの後、categories_プロパティーにリストがセットされる
  • categories_ndarrayを要素とするリストで、各配列には特徴量ごとの重複を除いたクラス名が格納される
  • 各特徴量のクラスはcategories_各要素の配列の先頭から数値ラベル0, 1, 2, …に対応している。

transform~ラベルへの変換

この変換器のtransform()メソッドで元データを変換すると、元データと同じ次元・次数の2次元配列が得られ、各クラスデータが数値データに変換された結果が格納されている。

なお、OrdinalEncoderにもfit_transform()メソッドが準備されている。

1次元のデータを変換する場合でも、1×1の2次元とする必要があり、結果も2次元の配列で返される。

inverse_transform()で数値ラベルをクラスデータに逆変換可能。

categories_パラメーターについて

なおコンストラクターのcategories_パラメーターを指定できるが、これはあらかじめ特徴量のクラスデータがわかっている場合に、これらを全特徴量について指定する。この際、元データに含まれないクラスを含めてもよい。

数値データとクラスデータが混在する場合

クラスデータと数値データが混在する場合にOrdinalEncoderで変換すると、すべてのデータがクラスデータとみなされ、数値データもラベルに変換されてしまう。

以下の例では、最後の列の実数データも、1, 1.5, …, 5に対して0, 1, …, 5のラベルに変換されている。

このような場合は、クラスデータのみ取り出して変換させる。OrdinalEncoderpandas.DataFrameを扱うことができるので、列操作のために元データをDataFrameとする。

今回の例では、最初の3列がクラスデータなので、一時的なDataFrameにそれらを切出してOrdinalEncoderを適用する。transform()の結果はndarrayで戻るので、それを元のDataFrameの列に入れ替えている。

最後の列はそのままで、その前の3列がラベルデータに変換されている。

 

コメントを残す

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