簡體   English   中英

使用編碼器在 Python 中編碼分類特征

[英]Encoding categorical features in Python with Encoders

有人可以告訴我下面這 3 個編碼器之間的區別,在哪些情況下我們使用它們,以及如何編寫代碼以簡單的方式使用它們(如果可能,使用 Python sklearn 進行編碼)

我很難在 sklearn 中了解它們背​​后的邏輯,因此我決定在這里提問。

  • One-Hot 編碼
  • 序數編碼
  • 標簽編碼

感謝您的回復和幫助

快樂編碼

簡短的回答是——

  • OrdinalEncoder - 將為分類 X 變量分配一個數字
  • LabelEncoder - 將為分類 Y 變量分配一個數字
  • OneHotEncoder - 將為每個 X 變量的每個類別創建一個單獨的“列”

例如 - 讓我們以sklearn文檔中的例子為例 -

import numpy as np
import random
browser_choice = ["uses Firefox", "uses Chrome", "uses Safari", "uses Internet Explorer"]
x_values_train = np.array([[_] for _ in browser_choice])
x_values_test = np.array([["uses Chrome"], ["uses Safari"]])

因此,您的訓練數據集包含 4 個browser_choice值,而您的測試數據集僅包含其中 2 個

序數編碼

ord_enc = OrdinalEncoder()
ord_enc.fit(x_values_train)
ord_enc.transform(x_values_test)

輸出

array([[0.],
       [3.]])

您會注意到它已將值0分配給"uses Chrome"並將3分配給"uses Safari"

一種熱編碼

ohe_enc = OneHotEncoder()
ohe_enc.fit(x_values_train)
pd.DataFrame(ohe_enc.transform(x_values_test).toarray(), columns=ohe_enc.categories_)

輸出

  uses Chrome uses Firefox uses Internet Explorer uses Safari
0         1.0          0.0                    0.0         0.0
1         0.0          0.0                    0.0         1.0

pandas.DataFrame並不是真正需要的,但它向您展示的是我們現在有 4 列 - “使用 Chrome”現在對應於"uses Chrome"列中的1 ,“使用 Safari”對應於1 "uses Safari"列 - 這 4 列中只有一列的每一行都有1

Label Encoding可以被認為是 y 變量的 Ordinal Encoding,我在這里不做解釋。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM