簡體   English   中英

如何在機器學習中處理分類數據以進行預處理

[英]How to handle categorical data for preprocessing in Machine Learning

這可能是一個基本問題,我有一個分類數據,我想將其輸入到我的機器學習模型中。 我的ML模型僅接受數值數據。 將此分類數據轉換為數值數據的正確方法是什么?

我的樣本DF:

  T-size Gender  Label
0      L      M      1
1      L      M      1
2      M      F      1
3      S      F      0
4      M      M      1
5      L      M      0
6      S      F      1
7      S      F      0
8      M      M      1

我知道以下代碼將我的分類數據轉換為數值

類型1:

df['T-size'] = df['T-size'].cat.codes

上面的行僅將類別從0轉換為N-1。 它們之間沒有任何關系。

對於此示例,我知道S <M <L。當我想像上面那樣轉換數據時應該怎么做。

類型2:

在這種類型中,M和F之間沒有關系。但是我可以說出M概率大於F概率。 樣品為1 /樣品總數

對於男性

(4/5)

對於女性

(2/4)

WKT,

(4/5)>(2/4)

我應該如何代替這種色譜柱?

我可以針對此問題將M替換為(4/5),將F替換為(2/4)嗎?

處理專欄的正確方法是什么?

幫助我更好地理解這一點。

對於第一個問題,如果類別數量較少,則可以使用字典map該列。 這樣,您可以設置訂單:

d = {'L':2, 'M':1, 'S':0}
df['T-size'] = df['T-size'].map(d)

輸出:

   T-size Gender  Label
0       2      M      1
1       2      M      1
2       1      F      1
3       0      F      0 
4       1      M      1
5       2      M      0
6       0      F      1
7       0      F      0
8       1      M      1

對於第二個問題,您可以使用相同的方法,但我將保留男性和女性的2個值01 如果只需要類別,而不必使用值進行運算,則一個值等於另一個。

編碼分類數據的方法有很多種,其中有些取決於您打算如何處理。 例如,獨熱編碼,這是最容易流行的選擇是一個非常糟糕的選擇 ,如果你打算使用決策樹/隨機森林/ GBM。

關於上面的T恤,您可以給熊貓分類輸入以下命令:

df['T-size'].astype(pd.api.types.CategoricalDtype(['S','M','L'],ordered=True)).

如果您按這樣分類設置了.cat.codes ,則.cat.codes方法將可以完美地工作。 這也意味着您可以輕松使用scikit-learn的LabelEconder ,它可以完美地適合管道。

關於性別編碼,在使用目標變量( Label )時需要非常小心。 您不希望在火車測試拆分之前進行這種編碼,否則您將使用對看不見的數據的了解,從而使它不是真正看不見的。 如果您使用交叉驗證,這將變得更加復雜,因為您需要在每次CV迭代中進行編碼(即每折新編碼)。 如果要執行此操作,建議您從skcontribs類別編碼器中檢出TargetEncoder ,但再次確保在sklearn Pipeline使用它,否則您會弄亂火車測試拆分並將測試集中的信息泄漏到訓練集中。

如果要在size參數中具有層次結構,則可以考慮對其使用線性映射。 這將是:

size_mapping = {"S": 1, "M":2 , "L":3}

#mapping to the DataFrame
df['T-size_num'] = df['T-size'].map(size_mapping)

這使您可以在保留層次結構的同時將輸入視為數字數據

至於性別,您會誤以為分區和程序。 如果已經將重新分區作為輸入,則會在數據中引入偏差。 您必須將“男性”和“女性”視為兩個不同的類別,而不管其現有分區如何。 您應該用兩個不同的數字來映射它,但不要引入比例。

df['Gender_num'] = df['Gender'].map({'M':0 , 'F':1})

要獲得比您的問題更詳細的解釋和更多的特殊性,我建議閱讀這篇有關機器學習中分類數據的文章

對於M / F示例,由於它是二進制文件,因此可能有點過時了-但是如果您一直擔心將類別映射到數字形式,則可以考慮使用一種熱門編碼 categories, into binary columns. 它基本上將包含類別的單個列擴展為二進制列。

所以一個數據集:

Gender
M
F
M
M
F

會成為

Gender_M    Gender_F
1           0
0           1
1           0
1           0
0           1

這消除了任何事物比另一事物更“積極”的概念-具有超過2個選項的分類數據的絕對必須,其中沒有傳遞A> B> C關系,並且您不想通過強制塗抹結果一個進入您的編碼方案。

暫無
暫無

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

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