SklearnでのOneHotEncoder解析


離散型フィーチャーをone-hot符号化すると,フィーチャー間の距離計算がより合理的になる.離散的特徴をone-hot符号化した後,符号化後の特徴は,実は各次元の特徴が連続的な特徴と見なすことができる.連続型の特徴の正規化方法と同様に,各次元の特徴を正規化することができる. 

from sklearn.preprocessing import OneHotEncode


パラメータ:
OneHotEncoder(n_values=’auto’,  categorical_features=’all’,  dtype=,  sparse=True,  handle_unknown=’error’)

handle_unknownは比較的有用なパラメータであり、デフォルトは「error」であり、「ignore」と指定したほうがよい.このパラメータの目的は、one-hot符号化に変換する際に、属性値が事前に指定されていない場合、プログラムはどうすればいいのか.errorであれば、プログラムはエラーを報告して停止し、データの処理が不便であり、逆にignoreがよりよく、プログラムは一例を実行し続けることができる.
enc = OneHotEncoder()

enc.fit([[" ", 0, 3], [" ", 1, 0], [" ", 2, 1], [" ", 0, 2]])

まずデータセットを訓練し、各列の属性の種類を抽出します.
print(enc.categories_)
[array([' ', ' '], dtype=object), array([0, 1, 2], dtype=object), array([0, 1, 2, 3], dtype=object)]

例:
from sklearn.preprocessing import  OneHotEncoder

enc = OneHotEncoder()
enc.fit([[0, 0, 3],
         [1, 1, 0],
         [0, 2, 1],
         [1, 0, 2]])

#   toarray()  , , ,  sparse = False  
ans = enc.transform([[0, 1, 3]]).toarray()  
print(ans) #   [[ 1.  0.  0.  1.  0.  0.  0.  0.  1.]]

出力結果の意味を説明します.入力配列の場合、これは依然として各行をサンプルとし、各列を特徴としています.
  • 最初の特徴、すなわち、最初の列[0,1,0,1]
  • を見てみましょう.
    すなわち、0または1の値をとる2つの値がある場合、one-hotはこの特徴を表すために2つのビットを使用し、[1,0]は0を表し、[0,1]は1を表し、前例の出力結果の上位2つのビット[1,0...]
  • すなわち、この特徴が0
  • であることを示す.
  • 第2の特徴、第2の列[0,1,2,0]
  • 、3つの値がある場合、one-hotはこの特徴を3ビットで表し、[1,0,0]は0を表し、[0,1,0]は1を表し、[0,0,1]は2を表し、前例の出力結果の3位から6位まで[...0,1,0...]
  • すなわち、この特徴が1
  • であることを示す.
  • 第2の特徴、第3列[3,0,1,2]
  • 、4つの値がある場合、one-hotはこの特徴を4ビットで表し、[1,0,0]は0を表し、[0,1,0,0]は1を表し、[0,0,1,0]は2を表し、[0,0,0,1]は3を表し、前例の出力結果における最後の4ビット[...0,0,1]はこの特徴が3
  • であることを示す.
  • 訓練サンプルの数値はカテゴリのみを表すが、文字列フォーマットのデータを使用するとエラーが報告される数値フォーマットのデータも使用する必要がある.
  • n_values=’auto’は、各特徴が数次元を使用することを示す数値がデータセットによって自動的に推定され、すなわち、いくつかのカテゴリが数ビットを使用して表されることを示す.