BaseNEncodersのbase=って何を表しているのだろうと考えたらとてもシンプルだった件について
はじめに
Category Encodingに関して代表的なものを学習していたのですが、どうもライブラリの使い方がわからず調べるのに時間を費やしたのでまとめたいと思います。
ここからのコードはすべて以下の記事の内容を利用していますので、そちらを簡単に読んでから読み進めていただくと分かりやすいかもしれません。
Category Encodingについてとてもまとまっていますのでお勧めです。
BaseNEncodersについて
こちらの記事のコードを引用しています。
BaseNはbaseオプションに指定する値によって、One-Hot / Binary / Ordinal Encodingを使い分けることができます。
とあるがどのように指定すればどのエンコーディングが使えるのかよくわからず、今回の記事を書くことになりました。
ちなみに公式ドキュメントにはこのようにあります。
base: int
when the downstream model copes well with nonlinearities (like decision tree), use higher base.
# 翻訳
ダウンストリームモデルが非線形性(デシジョンツリーなど)にうまく対応する場合は、より高いベースを使用します。
うーんわからない。
すこし調べるのに時間がかかったので、わからない方のために指定の仕方をまとめます。
問題
base=1
だとOne-Hotエンコーディング
# base=1
bne = ce.BaseNEncoder(cols=cate_col, base=1, drop_invariant=True)
bne_df = bne.fit_transform(df[cate_col])
pd.concat([df[cate_col], bne_df], axis=1)
base=5
だとラベルエンコーディング
# base=5
bne = ce.BaseNEncoder(cols=cate_col, base=5, drop_invariant=True)
bne_df = bne.fit_transform(df[cate_col])
pd.concat([df[cate_col], bne_df], axis=1)
なぜ1でOne-Hotなのでしょうか。なぜ5でlabel-encodingなのでしょうか。
これにはしっかりと理由があります。
この数値はエンコーディングの対象にしているカテゴリ数によって変化します。
base=の指定の仕方
このbase
という引数が表しているものはズバリ〇進数
のことでした。
(たしかに言われてみればと思いました)
というわけで、base=1
を指定すると1進数
でカテゴリ変数を表すことになるのでOne-Hotエンコーディング
となります。
今回はカテゴリが4つ
あります。
ですので、base=5 (5進数)
を選択するとラベルエンコーディング
になります。(1-4で表現するため)
base=2
を選択したところ、Binary
になることが確かめられました。
# base=2
bne = ce.BaseNEncoder(cols=cate_col, base=2, drop_invariant=True)
bne_df = bne.fit_transform(df[cate_col])
pd.concat([df[cate_col], bne_df], axis=1)
おわりに
Category Encoderはとても便利なライブラリだと感じました。
これから導入していきたいと思います。カテゴリ変数はどの方法を用いるかとても大切なので、どういうときに利用できるのかまで理解する必要がありそうです。
参考記事
Author And Source
この問題について(BaseNEncodersのbase=って何を表しているのだろうと考えたらとてもシンプルだった件について), 我々は、より多くの情報をここで見つけました https://qiita.com/Sicut_study/items/ffd87627feee7e7e2b72著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .