独熱符号化(OneHotEncoder)とラベル符号化(LabelEncoder)


データ分類


モデルを構築してデータを訓練する前に,データを特徴工学する必要があり,我々のデータは連続型と離散型に分けることができる.連続型データについては、標準化または正規化を行うのが一般的です.前に標準化と正規化の紹介を書いたことがありますが、興味のある方は見てみてください.https://blog.csdn.net/weixin_43172660/article/details/83826051離散型データについては,one−hot(独熱)符号化に従い,この離散的特徴がどれだけ値をとるか,その特徴を何次元で表すかを基本とする.

ユニヒートコーディング(OneHotEncoder)


離散型データ、例えば色の特徴については、赤、青、緑の3つの値があり、通常の考えでは、赤=0、青=1、緑=2とデータを符号化していると考えられるかもしれませんが、距離を計算する必要があるモデルや他のモデルに置くと、モデルは緑>青>赤が重要だと考えられます.しかし、これは私たちが機械に勉強させる本意ではなく、機械にそれらを区別させたいだけで、大きさの比較の意味はありません.そのため、ラベル符号化が不十分であり、さらに変換する必要がある.私たちは設定することができて、この特徴は3つの値を取ることができて、私たちは3列を設定することができて、それぞれ赤、青、緑で、赤で、その値は1、0、0で、青で、その値は0、1、0で、緑で、その値は0、0、1です.このように、各ベクトル間の距離はルート番号2であり、ベクトル空間距離は等しいため、オフセット性は現れず、ベクトル空間メトリックアルゴリズムに基づく効果にはほとんど影響しない.次に、sklearnを用いてユニークな符号化を実現する例を挙げる.
from sklearn import preprocessing # 
ohe = preprocessing.OneHotEncoder()
ohe.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]])# fit
ohe.transform([[0, 1, 3]]).toarray()# transform

しゅつりょく
array([[1., 0., 0., 1., 0., 0., 0., 0., 1.]])

この例を挙げると、全部で3つの特徴があります.1番目のフィーチャーの値は0,1,2番目のフィーチャーの値は0,1,2,3番目のフィーチャーの値は0,1,2,3です.1つ目の特徴は、2つの列にすることができ、値が0であれば、この2つの列の値は1であり、0が1であれば0であり、1である.2番目の特徴は,3列となり,それぞれ1,0,0/0,1,0/0,0,1の3番目の特徴が4列となり,それぞれ1,0,0,0/0,1,0,0,0,1,0/0,0,1,0/0,0,1が独熱符号化され,3列の特徴が2+3+4=9列の特徴となった.0,1,3という数字に対して、私たちは1,0,0,1,0,0,0,0,1に変わります.

ユニヒートコーディングの利点


独熱符号化により,特徴間の距離計算がより合理的になり,特徴を0,1に変えることで計算速度の向上に寄与する.one hot encodingのカテゴリ数があまり多くない場合は、優先的に考慮することをお勧めします.カテゴリの数が多い場合、フィーチャースペースは非常に大きくなります.この場合、一般的にPCAを用いて次元を減らすことができる.またone hot encoding+PCAという組み合わせは実際にも非常に有用である.

ラベルコード(LabelEncoder)


さっきの例では、赤、青、緑を0、1、2に変換してラベル符号化し、連続した数値型変数に変換します.つまり、不連続な数字やテキストを番号付けします.簡単な例を挙げます.
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
le.fit([1,5,67,100])
print(le.classes_)
le.transform([1,1,100,67,5])

しゅつりょく
array([0,0,3,2,1])

まとめ


上記では,離散型データに遭遇した場合,モデル予測を行い,精度を向上させるのにどのように処理する必要があるかを基本的に紹介した.