One-Hot Encoding
CoddyのMachine Learningジャーニー「機械学習のための統計」セクションの一部。レッスン 53/64。
楽器には順序がありません。1、2、3のように番号を付けると、ピアノがドラムより大きい値として扱われてしまいます。ワンホットエンコーディングでは、代わりに各カテゴリに専用の0/1列を割り当てます。
pd.get_dummiesが処理し、dtype=intはTrueとFalseではなく1と0を指定します:
pupils = pd.DataFrame({"instrument": ["piano", "drums", "piano", "cello"],
"weeks": [4, 3, 6, 10]})
encoded = pd.get_dummies(pupils, columns=["instrument"], dtype=int)
print(encoded)次のように出力されます:
weeks instrument_cello instrument_drums instrument_piano
0 4 0 0 1
1 3 0 1 0
2 6 0 0 1
3 10 1 0 0新しい列は末尾に、値ごとにアルファベット順で追加されます。代償となるのは幅です。値が500種類あると、500列が追加されます。
チャレンジ
中級あるホリデーサイトには、cabins.csvに掲載されているキャビンがあります。プログラムは、areaまたはheatという列名を読み取ります。スターターコードでは価格との相関を見るために数値を割り当てますが、どちらの列にも順序はありません。そのr値は作り物です。
- 該当する行を置き換えて、その列をワンホットエンコードします(0と1)。
- 列がいくつになったかを出力し、続けて新しい各列と、その列にある1の個数を出力します。
キャビンが5軒あり、入力がheatの場合:
heat became 2 columns:
heat_gas: 3 cabins
heat_wood: 2 cabins自分で試してみよう
import pandas as pd
cabins = pd.read_csv("cabins.csv")
column = input()
# 以下にコードを書いてください
# これらの行は、順序のない地域と暖房の種類に番号を割り当てています。これらの行を置き換えてください
numbers = {"coast": 1, "hills": 2, "lake": 3, "woods": 4, "gas": 1, "solar": 2, "wood": 3}
cabins[column] = cabins[column].map(numbers)
print(f"{column} against price: r = {round(cabins[column].corr(cabins['price']), 2)}")
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
機械学習のための統計のすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ