マルチカテゴリ変数のワンホットエンコーディングを実行する方法

ソースノード: 841101

この記事では、特徴量エンジニアリング手法である One Hot Encoding を使用して複数のカテゴリ変数を処理できる方法について学びます。

先に進む前に、特徴量エンジニアリングとワン ホット エンコーディングについて簡単に説明しましょう。

フィーチャ工学

したがって、特徴エンジニアリングは、問題のドメイン知識を使用して生データから特徴を抽出するプロセスです。 これらの機能を使用すると、機械学習アルゴリズムのパフォーマンスを向上させることができ、パフォーマンスが向上すると最高の精度が得られます。 特徴量エンジニアリングは応用機械学習と同じであるとも言えます。 特徴量エンジニアリングは、良いモデルと悪いモデルの間に大きな差を生み出す機械学習の最も重要な技術です。 これは、データ サイエンス プロジェクトのライフ サイクルの XNUMX 番目のステップです。

機械学習モデルの透明性の概念は、モデルが異なればデータの種類ごとに異なるアプローチが必要になることが多いため、複雑です。 のような:-

  • 連続データ
  • カテゴリー特徴
  • 欠損値
  • 正規化
  • 日付と時刻

ただし、ここではカテゴリ特徴量についてのみ説明します。カテゴリ特徴量とは、データ型がオブジェクト型である特徴です。 カテゴリ特徴量のデータ ポイントの値は数値形式ではなく、オブジェクト形式です。

カテゴリ変数を処理するための手法は数多くありますが、その一部を以下に示します。

  • ラベルエンコーディングまたは順序エンコーディング
  • ワンホットエンコーディング
  • ダミーエンコーディング
  • エフェクトエンコーディング
  • バイナリエンコーディング
  • バーゼルエンコーディング
  • ハッシュエンコーディング
  • ターゲットエンコーディング

そこで、ここでは One Hot Encoding によるカテゴリ特徴量の処理を行うため、まず One Hot Encoding について説明します。

ワンホットエンコーディング

カテゴリ変数には数値ではなくラベル値が含まれることがわかっています。 多くの場合、可能な値の数は固定セットに制限されます。 カテゴリ変数は、名目変数と呼ばれることがよくあります。 多くの機械学習アルゴリズムは、ラベル データを直接操作できません。 すべての入力変数と出力変数が数値である必要があります。

これは、カテゴリデータを数値形式に変換する必要があることを意味します。 カテゴリ変数が出力変数の場合、モデルによる予測をカテゴリ形式に変換して表示したり、アプリケーションで使用したりすることもできます。

例えば 性別に関するデータは次の形式です。 '男' & '女性'。

ただし、ワンホット エンコーディングを使用する場合、エンコーディングしてモデルがカテゴリ間の自然な順序を想定できるようにすると、パフォーマンスが低下したり、予期しない結果が発生したりする可能性があります。

ワンホット エンコーディングは整数表現に適用できます。 ここでは、整数でエンコードされた変数が削除され、一意の整数値ごとに新しいバイナリ変数が追加されます。

たとえば、色の変数をエンコードします。

赤色  青色
0 1
1 0
0 1

さあ、旅を始めます。 最初のステップでは、住宅価格予測のデータセットを取得します。

データセット

ここでは、エリアのサイズに応じて住宅価格を予測するために使用される house_price のデータセットを使用します。

住宅価格予測データセットをダウンロードしたい場合は、 をクリックします。 こちら.

モジュールのインポート

次に、ワンホット エンコーディングに使用する重要なモジュールを Python からインポートする必要があります。

# pandas をインポート import pandas as pd # numpy をインポート import numpy as np # sklearn.preprocessing から OneHotEncoder をインポート import OneHotEncoder()

ここでは、データ分析に使用される pandas を使用し、n 次元配列には NumPyused を使用します。また、sklearn から、カテゴリカル エンコードには XNUMX つの重要なクラス One Hot Encoder を使用します。

次に、Python を使用してこのデータを読み取る必要があります。

データセットの読み取り

通常、データセットは CSV 形式であり、私たちが使用するデータセットも CSV 形式です。 CSV ファイルを読み取るには、pandas read_csv() 関数を使用します。 以下を参照してください:

# データセットの読み取り df = pd.read_csv('house_price.csv') df.head()

出力:-

ただし、カテゴリ変数は XNUMX つのホット エンコーダに対してのみ使用する必要があるため、理解を容易にするためにカテゴリ変数のみを使用して説明します。

データからカテゴリ変数を分割するには、カテゴリ値を持つ特徴の数を確認する必要があります。

カテゴリ値の確認

値を確認するには、変数のデータ型を選択するために使用される pandas select_dtypes 関数を使用します。

# 機能をチェックする cat = df.select_dtypes(include='O').keys() # 変数を表示する cat

出力:-

 

ここで、これらの数値列をデータセットから削除する必要があり、このカテゴリ変数を使用します。 ワンホット エンコーディングを適用するために、データセットから 3 ~ 4 つのカテゴリ列のみを使用します。

新しいデータフレームの作成

ここで、カテゴリ変数を使用するために、選択したカテゴリ列の新しいデータフレームを作成します。

# 新しい df を作成 # 使用する列を設定 new_df = pd.read_csv('house_price.csv',usecols=['近所'、'外装1st'、外装2nd']) new_df.head()

出力:-

ここで、すべてのカテゴリ列に一意のカテゴリがいくつ存在するかを調べる必要があります。

固有の値を見つける

一意の値を見つけるには、pandas unique() 関数を使用します。

# new_df.columns の x の各列の一意の値: #一意の値を出力 print(x ,':', len(new_df[x].unique()))

出力:-

近所 : 25
外装1st:15
外装2次:16

ここで、複数のカテゴリ変数にワンホット エンコーディングを適用する手法に進みます。

複数カテゴリ変数の手法

この手法では、ワンホット エンコーディングを変数の最も頻繁に使用される 10 個のラベルに制限します。 これは、最も頻繁に使用される 10 個のラベルのそれぞれに対して 10 つのバイナリ変数を作成することを意味します。これは、他のすべてのラベルを新しいカテゴリの下にグループ化するのと同じであり、この場合は削除されます。 したがって、10 個の新しいダミー変数は、最も頻繁に使用される XNUMX 個のラベルのいずれかが存在するかどうかを示します。 1 それともそうではないのか 0 特定の観察のために。

最も頻度の高い変数

ここでは、最も頻度の高い 20 個の変数を選択します。

XNUMX つのカテゴリ変数を取るとします。 近所.

# 上位 20 カテゴリを検索 new_df.Neighborhood.value_counts().sort_values(ascending=False).head(20)

出力:

この出力イメージを見ると、 名前 ラベルは近隣列で 225 回繰り返されており、下に進むとこの数は減少しています。

そこで、上位 10 件の結果を上から取り出し、この上位 10 件の結果をワンホット エンコーディングに変換すると、左側のラベルがゼロになります。

出力:-

 

最も頻繁に使用されるカテゴリ変数のリスト

# 上位 10 個の変数を含むリストを作成します。 top_10 = [x for x in new_df.Neighborhood.value_counts().sort_values(ascending=False).head(10).index] top_10

出力:-

[「名前」、
'CollgCr',
'旧市街'、
「エドワーズ」、
「サマースト」、
「ギルバート」、
「ニリッジ」、
「ソーヤー」、
「NWAmes」、
「ソーヤーW」]

「Neighborhood」列には上位 10 個のカテゴリラベルがあります。

バイナリの作成

ここで、top_10 ラベルの 10 個のバイナリ変数を作成する必要があります。

# ラベルのバイナリを作成する

top_10 のラベル:

新しい_df = np.where(new_df['Neighborhood']==ラベル,1,0)

new_df[['近所']+top_10]


出力:-

名前 CollgCr 旧市街 エドワーズ サマスト ギルバート ニリッジ ソーヤー NWAmes ソーヤーW
0 CollgCr 0 1 0 0 0 0 0 0 0 0
1 ヴィーンカー 0 0 0 0 0 0 0 0 0 0
2 CollgCr 0 1 0 0 0 0 0 0 0 0
3 クロフォー 0 0 0 0 0 0 0 0 0 0
4 リッジなし 0 0 0 0 0 0 0 0 0 0
5 ミッチェル 0 0 0 0 0 0 0 0 0 0
6 サマスト 0 0 0 0 1 0 0 0 0 0
7 NWAmes 0 0 0 0 0 0 0 0 1 0
8 旧市街 0 0 1 0 0 0 0 0 0 0
9 ブレーキサイド 0 0 0 0 0 0 0 0 0 0
10 ソーヤー 0 0 0 0 0 0 0 1 0 0
11 ニリッジ 0 0 0 0 0 0 1 0 0 0

top_10 ラベルがバイナリ形式にどのように変換されるかを確認できます。

例を挙げてみましょう。表を参照してください。 1 index ヴィーンカー これは、top_10 カテゴリ ラベルに属していないため、次のようになります。 0 すべての列。

次に、上で選択したすべてのカテゴリ変数に対してこれを実行します。

OneHotEncoding で選択されたすべての変数

# 選択したすべてのカテゴリ変数に対して def top_x(df2,variable,top_x_labels): top_x_labels のラベルに対して: df2[variable+'_'+label] = np.where(data[variable]==label,1,0) # readデータを再度データします。 data = pd.read_csv('D://xdatasets/train.csv',usecols = ['Neighborhood','Exterior1st','Exterior2nd']) #近隣を最も頻繁に使用される 10 カテゴリにエンコードします。 top_x(data, 'Neighborhood',top_10) # データを表示 data.head()

出力:-

ここで、すべてのマルチ カテゴリ変数にワンホット エンコーディングを適用します。

次に、複数の変数に対する One Hot Encoding の長所と短所を見ていきます。

Advantages

  • 実装が簡単
  • 変数の探索に多くの時間を必要としません
  • 機能空間を大幅に拡張しません。

デメリット

  • 変数の予測性を高める可能性のある情報は追加しません
  • 無視された変数の情報は保持しないでください。

エンドノート

したがって、これを要約すると、複数のカテゴリ変数を処理する方法について学習することになります。この問題に遭遇した場合、これは非常に難しい作業になります。 それでは、この記事を読んでいただきありがとうございます。

Linkedinで私とつながる: プロフィール

私の他の記事も読んでください: https://www.analyticsvidhya.com/blog/author/mayurbadole2407/

ありがとうございます😎

この記事に示されているメディアは、Analytics Vidhyaが所有しておらず、作成者の裁量で使用されています。

この記事は、モバイルアプリでも読むことができます。 Googleのプレイでそれを取得する

関連記事

出典:https://www.analyticsvidhya.com/blog/2021/05/how-to-perform-one-hot-encoding-for-multi-categorical-variables/

タイムスタンプ:

より多くの 分析Vidhya