機械学習

カテゴリ特徴量の変換方法

投稿日:

こちらを読むと

  • カテゴリ特徴量の代表的な変換方法を知ることができます。
  • それぞれの変換方法の長所・短所が分かります。
  • 記事の所要時間は10分です。

前回の記事で、カテゴリ特徴量が何かを紹介しました。
カテゴリ特徴量は、数値でない選択肢の値で、そのままでは機械学習モデルで扱えません。

そのため、数値データに変換してあげる必要があります。

今回は、カテゴリ特徴量の代表的な変換方法を紹介します。

データ例

ここでは、kaggleのTitanicコンペティションから、

Embarked – 出港地(タイタニックへ乗った港)

を例に挙げます。

Embarkedは、以下の3種類のカテゴリをもつ特徴量です。

内容
CCherbourg
QQueenstown
SSouthampton

データセットの一部を抜粋すると、以下のようになっています。

PassengerIdEmbarked
27C
28Q
29S

One-Hotエンコーディング

One-Hotエンコーディングは前回の記事でも紹介しました。

データ例を変換すると、以下のようになります。

PassengerIdEmbarked_CEmbarked_QEmbarked_S
27100
28010
29001

ダミーコーディング

ダミーコーディングは、One-Hotエンコーディングの冗長性を減らした変換方法です。

PassengerIdEmbarked_CEmbarked_Q
2710
2801
2900

違いは見てもらえばわかると思いますが、変換後の列が1つ少ないです。

Embarked_Sの列がないですが、Embarked_CにもEmbarked_Qにもビットが立っていない(値が1でない)行は、Embarked_Sであると言えます。

このような、列を設けないが、他の列が0であることで表現するカテゴリを、
参照カテゴリと呼びます。

こうやってみるとダミーコーディングは優れているように見えますが、欠損データに弱いという欠点があります。

仮に、カテゴリが記録されていないレコードがある場合、One-Hotエンコーディングでは全列を0にすることで表現できますが、ダミーコーディングではそれができません。

すでに、全列が0という値を、参照カテゴリに使ってしまっているからです。

Effectコーディング

ダミーコーディングの欠点を補ったのが、最後に紹介するEffectコーディングです。

PassengerIdEmbarked_CEmbarked_Q
2710
2801
29-1-1

ダミーコーディングと同様、変換後は2列で表現していますが、値が違います。

ダミーコーディングでは参照カテゴリを0で表現していましたが、Effectコーディングでは-1で表現しています。

一見して、ダミーコーディングよりも分かりやすいですね。
そして欠損データにも対応できています。

ただし、Effectコーディングは表現方法としては万能に見えますが、’-1’のベクトルが密なベクトルであり、記憶容量や計算コストがかかってしまうようです。

変換方法のまとめ

変換方法長所短所
One-Hotエンコーディング欠損データの対応が容易1列分が冗長になっている
ダミーコーディング冗長でない欠損データの対応が難
Effectコーディング冗長でない上に、解釈が容易記憶容量や計算コストがかかる

まとめ

  • カテゴリ特徴量の代表的な変換方法を知ることができました。
  • それぞれの変換方法の長所・短所が分かりました。

この記事で紹介した変換方法は理解が容易で使いやすいです。ただし、膨大なカテゴリ数に対してはうまく機能しなくなります。

カテゴリ数がそこまで大きくない場合は有用なので、ぜひマスターしておきましょう!

Reference

機械学習のための特徴量エンジニアリング ―その原理とPythonによる実践



-機械学習

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

多クラスロジスティック回帰⑥ モデル出力を確率で

Table of Contents こちらを読むと確率の表し方まとめReference こちらを読むと 多クラスロジスティック回帰について、モデル出力を確率で表す方法が分かります 確率の表し方 前回ま …

BERT 論文 日本語訳

Table of Contents 要約1 序論2 関連業務2.1 教師なし特徴量ベースのアプローチ 2.2 教師なしファイン・チューニングアプローチ2.3 教師ありデータからの転移学習3 BERTモ …

scikit-learn load_iris datasetのまとめ

Table of Contents こちらを読むと何がしたいかload_iris datasetまとめ こちらを読むと scikit-learnのload_iris datasetについて、詳細が分か …

kaggleのKernelでGPUを使うには

Table of Contents こちらを読むとはじめにKernelの設定まとめ こちらを読むと kaggleのKernelでGPUを使う方法が分かります。記事の所要時間は5分です。 はじめに ka …

scikit-learn load_iris datasetのデータ観察

Table of Contents こちらを読むとデータ観察のソースコード散布図マトリクスの解説散布図の解説まとめReference こちらを読むと scikit-learnのload_iris da …

Twitterフォロー

Twitterタイムライン