SklearnでのOneHotEncoder解析
離散型フィーチャーをone-hot符号化すると,フィーチャー間の距離計算がより合理的になる.離散的特徴をone-hot符号化した後,符号化後の特徴は,実は各次元の特徴が連続的な特徴と見なすことができる.連続型の特徴の正規化方法と同様に,各次元の特徴を正規化することができる.
パラメータ:
handle_unknownは比較的有用なパラメータであり、デフォルトは「error」であり、「ignore」と指定したほうがよい.このパラメータの目的は、one-hot符号化に変換する際に、属性値が事前に指定されていない場合、プログラムはどうすればいいのか.errorであれば、プログラムはエラーを報告して停止し、データの処理が不便であり、逆にignoreがよりよく、プログラムは一例を実行し続けることができる.
まずデータセットを訓練し、各列の属性の種類を抽出します.
例:
出力結果の意味を説明します.入力配列の場合、これは依然として各行をサンプルとし、各列を特徴としています.最初の特徴、すなわち、最初の列[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 であることを示す.訓練サンプルの数値はカテゴリのみを表すが、文字列フォーマットのデータを使用するとエラーが報告される数値フォーマットのデータも使用する必要がある.
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の値をとる2つの値がある場合、one-hotはこの特徴を表すために2つのビットを使用し、[1,0]は0を表し、[0,1]は1を表し、前例の出力結果の上位2つのビット[1,0...]
n_values=’auto’
は、各特徴が数次元を使用することを示す数値がデータセットによって自動的に推定され、すなわち、いくつかのカテゴリが数ビットを使用して表されることを示す.