🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

データマイニング

データマイニングは、購買履歴やクレジットカードの利用履歴、電話の通話履歴など企業にある大量のデータを解析して、その中に隠れたパターンやルールを探し出す技術です。DMと略されることもあります。

Q&A

解決済

1回答

5950閲覧

【scikit-learn】Label EncoderとOne Hot Encoderの使い分けについて

dal

総合スコア38

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

データマイニング

データマイニングは、購買履歴やクレジットカードの利用履歴、電話の通話履歴など企業にある大量のデータを解析して、その中に隠れたパターンやルールを探し出す技術です。DMと略されることもあります。

0グッド

0クリップ

投稿2019/10/09 10:15

編集2019/10/09 16:32

最近機械学習(データ解析)の勉強をしているのですが、疑問に感じる点があったので質問させていただきます。

scikit-learnには、カテゴリ変数を数値化するためのメソッドとして

・Label Encoder
・One Hot Encoder

が存在しています。

これらの使い分け方に関して詳しい方にお聞きしたいのですが、
分類の場合はLabel Encoderを、回帰の場合はOne Hot Encoderを使うのが適切であるという解釈でよろしいのでしょうか?

以上のように考えた理由としては、
Label Encoderはカテゴリ変数をそのまま数値に置き換える
→数値の大小が順序的意味を持ってしまう
→数値を予測する回帰には思わしくない影響を与えてしまう(分類であれば問題なさそう?)
という思考に陥ったからです。
逆に、One Hot Encoderは、カテゴリ変数をダミー変数化(0・1のみに)してくれるため、順序的意味を持たずに済み、回帰にも使用できるのではないかと考えました。

詳しい方がいましたら、以上の内容についてご教授いただきたいです。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hayataka2049

2019/10/09 16:25

git_dummiesはget_dummiesです。ついでにいうと、これはpandasの関数の名前ですが、関係ないのであれば質問から消した方が良いと思います。
dal

2019/10/09 16:33

ご指摘ありがとうございます。 打ち間違えをコピペしてしまってました... scikit-learnとは無関係なので、指摘通り削除いたしました。
guest

回答1

0

ベストアンサー

まずLabelEncoderは目的変数側に、OneHotEncoderは説明変数側に使うという大きな違いがあり、使う場所が違うので使い分けを考える必要はありません。

fit(self, y)
Fit label encoder

Parameters:
y : array-like of shape (n_samples,)
Target values.

sklearn.preprocessing.LabelEncoder — scikit-learn 0.21.3 documentation

scikit-learnのモデルの多くは実はターゲットはラベルのまま(たとえば文字列で["hoge", "hoge", "fuga", ...]のような)入れても動いてくれます。LabelEncoderを使う必然性はあまりないのかもしれません(それでもなんとなく気持ち悪いから使っておく、程度の存在)。

では説明変数側でLabelEncoderと同様のことをするものはないのかというと、OrdinalEncoderというモデルがあります。OneHotEncoderと比較するならこちらになります。

sklearn.preprocessing.OrdinalEncoder — scikit-learn 0.21.3 documentation

で、あるにはあるのですが、説明変数を0,1,2,...にすることは回帰でも分類でも基本的にはありません。ユーザーガイドにも思いっきりそう書いてあります。そういう目的ならOneHotEncoderを使え、と。

To convert categorical features to such integer codes, we can use the OrdinalEncoder. This estimator transforms each categorical feature to one new feature of integers (0 to n_categories - 1):

python

1>>> enc = preprocessing.OrdinalEncoder() 2>>> X = [['male', 'from US', 'uses Safari'], ['female', 'from Europe', 'uses Firefox']] 3>>> enc.fit(X) 4OrdinalEncoder(categories='auto', dtype=<... 'numpy.float64'>) 5>>> enc.transform([['female', 'from US', 'uses Safari']]) 6array([[0., 1., 1.]])

Such integer representation can, however, not be used directly with all scikit-learn estimators, as these expect continuous input, and would interpret the categories as being ordered, which is often not desired (i.e. the set of browsers was ordered arbitrarily).

5.3. Preprocessing data — scikit-learn 0.21.3 documentation

一応用意されているけど、実用的ではないよ、くらいの位置づけです。

投稿2019/10/09 16:44

hayataka2049

総合スコア30935

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dal

2019/10/10 05:37 編集

ご回答ありがとうございます。 色々と勉強になります... 要するに、回帰にしろ分類にしろ、説明変数におけるカテゴリ変数を扱う場合は`OneHotEncoder`の使用が適切であるということになりますよね?
hayataka2049

2019/10/10 05:20

基本的にはその考え方でいいと思います。たとえばテキストなど特殊なデータに対しては他の表現方法もあったり、統計的な分析を意図するなら単なるone-hotはあまりよくなかったりということはありますが(調べてみてください)。
dal

2019/10/10 05:37

ありがとうございます。 自分でも、もう少し調べてみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問