One Hot Encodingとは何か、それを行う方法

機械学習に興味があるなら、必然的に”One Hot Encoding”と呼ばれるこのことに出くわすでしょう。 しかし、それを理解するためには機械学習についていくつかのことを知る必要があるので、機械学習の初心者として把握するのは難しいことの一 助けるために、私は初心者の説明を提供しようとしたと思いました。

どんな種類の機械学習プログラムを作っているときに最初に行うことは、通常、前処理です。 それによって、私はあなたのプログラムによって分析されるデータを準備することを意味します。 結局のところ、あなたはあなたのプログラムにスプレッドシートやいくつかの写真を投げて、それが何をすべきかを知ることを期待することはでき 私たちはまだそのレベルのAIではありません。

前処理の大きな部分は何かのエンコーディングです。 これは、コンピュータが理解できる方法でデータの各部分を表すことを意味し、したがって、文字通り”コードに変換”を意味するencodeという名前です。 ラベルエンコーディングなど、エンコードにはさまざまな方法があります。 ラベルエンコーディングは直感的でわかりやすいので、まずそれを説明します。 うまくいけば、そこからあなたは完全に一つのホットエンコーディングを理解することができるでしょう。

猫や犬のようなカテゴリデータで作業していると仮定しましょう。 Labelエンコードの名前を見ると、labelは単なるカテゴリ(つまりcatまたはdog)であり、encodeはそのカテゴリを表す番号を与えることを意味します(catは1、dogは2)。 各カテゴリに番号を与えることで、コンピュータは数字を扱う方法を知っているので、コンピュータはそれらを表現する方法を知っています。 ラベルエンコーディングの説明はもう終わりました。 しかし、カテゴリデータではうまくいかないことが多いという問題があります。

問題は、ラベルエンコーディングでは、カテゴリが自然な順序関係を持つようになったことです。 それはより高い数字として高い数字を扱うようにプログラムされていますので、コンピュータはこれを行います。 これの問題は例で見ることができます:

  • りんご、鶏肉、ブロッコリー:あなたは食品の3つのカテゴリを持っていた場合を想像してみてください。 ラベルエンコーディングを使用して、これらのそれぞれに番号を割り当てて分類します。apples=1、chicken=2、broccoli=3。 しかし、モデルが内部的にカテゴリ全体の平均を計算する必要がある場合は、1+3=4/2=2を実行する可能性があります。 これは、あなたのモデルによると、リンゴと鶏肉の平均が一緒にブロッコリーであることを意味します。

明らかに、あなたのモデルによるその考え方は、相関が完全に間違っていることにつながるので、one-hot encodingを導入する必要があります。

物事を1から始まり、各カテゴリごとに増加する数値としてラベル付けするのではなく、より多くのバイナリスタイルの分類に行きます。 あなたはone-hotが何であるかを知っていれば(それはバイナリコーディングに関連していますが、それについて心配しないでください)と考えていた ラベルとワンホットエンコーディングの違いを視覚化してみましょう。 あなたが違いを解決できるかどうかを確認してくださ:

違いは何ですか? さて、私たちのカテゴリは以前は行でしたが、今は列です。 しかし、私たちの数値変数、カロリーは同じままでした。 特定の列の1は、その行のデータの正しいカテゴリをコンピュータに伝えます。 つまり、カテゴリごとに追加のバイナリ列を作成しました。

なぜこれが優れているのかはすぐには明らかではありません(前述の問題を除いて)、それは明確な理由がないためです。 機械学習の多くのことと同様に、私たちはすべての状況でこれを使用するわけではありません。 カテゴリデータ

コード内の1つのホットエンコーディングを使用するときに、ラベルエンコーディングで発生する問題を修正するだけです(取得しますか? それはしゃれです)

これがコードでどのように行われているかを見ることは常に役に立ちますので、例を見てみましょう。 通常、私はそれを学ぶためにライブラリなしで何かをするべきだと確信していますが、この退屈な前処理のためには本当に必要はありません。 ライブラリはこれをとても簡単にすることができます。 あなたのプロジェクトの多くでこれらの3つのライブラリを使用していることがわかりますので、numpy、sklearn、pandasを使用します

from sklearn.preprocessing import LabelEncoder, OneHotEncoder
import numpy as np
import pandas as pd

ツールができたので、始めましょう。 私たちは、構成されたデータセットで動作します。 データセットをpandas’sで入力します。read_csv機能:

dataset = pd.read_csv('made_up_thing.csv')

うまくいけば、それは自明です。 次は少しトリッキーです。 スプレッドシートについての事は、あなたがまたは列の一部を気にしないかもしれないということです。 簡単にするために、最後の列以外のすべてを気にしているとしましょう。 私たちはpandasの機能を使用するつもりです。ilocは、あなたがそれを伝えるどんな列でもデータを取得します:

X = dataset.iloc.values

.実際に入っているので、入力してみました。 :は、これらの列のすべての行が必要なためであり、:はあなたがそれを行う方法です。 私たちは、追加します.値は、よく、我々が選択したセグメントで値を取得します。 言い換えれば、最初の部分は値を選択し、2番目の部分は値を取得します。

さて、実際のエンコードを行いましょう。 Sklearnはそれを信じられないほど簡単にしますが、キャッチがあります。 Labelencoderとone hot encoderの両方をインポートしたことに気づいたかもしれません。 Sklearnのone hot encoderは、カテゴリを数値に変換する方法を実際には知らず、数値をバイナリに変換する方法だけを知っています。 最初にlabelencoderを使用する必要があります。

まず、通常のオブジェクトと同じようにlabelencoderを設定します:

le = LabelEncoder()

次に、sklearnを使用する必要があります。fit_transform関数。 最初の列だけをエンコードする必要があるとしましょう。 私たちはやるだろう:

X = le.fit_transform(X)

この機能は、単にの組み合わせです.フィットと。変換コマンド。 .fitはX(この場合、XのためにXの最初の列)を取り、すべてを数値データに変換します。 .transformは、その変換を適用します。

残っているのは、one hot encoderを使用することだけです。 ありがたいことに、それは私たちが今やったこととほぼ同じです:

ohe = OneHotEncoder(categorical_features = )
X = ohe.fit_transform(X).toarray()

Categorical_Fearturesは、ホットエンコードしたい列を指定するパラメータであり、最初の列をエンコードしたいので、入れます。 最後に、fit_transformをバイナリに変換し、それを配列に変換して、今後簡単に作業できるようにします。

そしてそれはそれです! それは非常に簡単です。 最後に、最初の列以上のことをする必要がある場合は、私たちがやったことを行いますが、0の代わりに必要な列を入れます。 多くの列については、forループに入れることができます:

le = LabelEncoder()#for 10 columns
for i in range(10):
X = le.fit_transform(X)

あなたの機械学習の冒険に幸運!