カテゴリデータの処理
Coding
code: Python
import pandas as pd
# サンプルデータを生成(Tシャツの色・サイズ・価格・クラスラベル)
df = pd.DataFrame([
# 列名を設定
df
----------------------------------------------------------------------
color size price classlabel
0 green M 10.1 class1
1 red L 13.5 class2
2 blue XL 15.3 class1
----------------------------------------------------------------------
順序特徴量のマッピング
code: Python
# Tシャツのサイズと整数を対応させるディクショナリを生成
size_mapping = {'XL': 3, 'L': 2, 'M': 1}
# Tシャツのサイズを整数に変換
df
----------------------------------------------------------------------
color size price classlabel
0 green 1 10.1 class1
1 red 2 13.5 class2
2 blue 3 15.3 class1
----------------------------------------------------------------------
code: Python
# 元に戻す
inv_size_mapping = {v: k for k, v in size_mapping.items()}
df
----------------------------------------------------------------------
color size price classlabel
0 green M 10.1 class1
1 red L 13.5 class2
2 blue XL 15.3 class1
----------------------------------------------------------------------
クラスラベルのエンコーディング
code: Python
import numpy as np
# クラスラベル(順序関係ない)と整数を対応させるディクショナリを生成
class_mapping = {label: idx for idx, label in enumerate(np.unique(df'classlabel'))} class_mapping
# クラスラベルを整数に変換
df
----------------------------------------------------------------------
{'class1': 0, 'class2': 1}
color size price classlabel
0 green M 10.1 0
1 red L 13.5 1
2 blue XL 15.3 0
----------------------------------------------------------------------
code: Python
# 元に戻す
inv_class_mapping = {v: k for k, v in class_mapping.items()}
df
----------------------------------------------------------------------
color size price classlabel
0 green M 10.1 class1
1 red L 13.5 class2
2 blue XL 15.3 class1
----------------------------------------------------------------------
code: Python
# 以下のようにもできる
from sklearn.preprocessing import LabelEncoder
# ラベルエンコーダのインスタンスを生成
class_le = LabelEncoder()
# クラスラベルから整数に変換
y
# クラスラベルを文字列に直す
class_le.inverse_transform(y)
----------------------------------------------------------------------
----------------------------------------------------------------------
カテゴリ特徴量での One-Hot エンコーディング
色の値には順序はありませんが、例えば、blueが0でredが1のようにしてしまうと、学習アルゴリズムはredがblueより大きいと判断してしまします。この問題を解決する一般的な方法がOne-Hotエンコーディングです。
code: Python
pd.get_dummies(df'price', 'color', 'size')
----------------------------------------------------------------------------------------------------
price_13.5 price_15.3 price_10.1 color_blue color_green color_red size_L size_M size_XL
0 0 0 1 0 1 0 0 1 0
1 1 0 0 0 0 1 1 0 0
2 0 1 0 1 0 0 0 0 1
----------------------------------------------------------------------------------------------------