1

我有一個數據幀X它有兩個分類功能和41個數字功能。所以X共有43個功能。熊貓:如何一個熱門編碼分類功能

現在,我想將分類特徵轉換爲數字水平,以便它們可以在RandomForest分類器中使用。

我做了以下內容,其中01註明的類別特徵位置:

import pandas as pd 

X = pd.read_csv("train.csv") 

F1 = pd.get_dummies(X.iloc[:, 0]) 

F2 = pd.get_dummies(X.iloc[:, 1]) 

然後,我串連這兩個數據幀:

Xnew = pd.concat([F1, F2, X.ix[:, 2:]]) 

現在,Xnew有63個特徵( F1有18和F2有4個功能,其餘41從X

這是正確的嗎?有沒有更好的方法來做同樣的事情?我是否需要刪除F1F2中的第一列以避免共線?

+0

我看到問題,請在http://stats.stackexchange.com/上提問, – Merlin

+0

謝謝。這裏發佈http://stats.stackexchange.com/questions/232541/pandas-how-to-one-hot-encode-categorical-features –

回答

0

由於F1有18 級別(不是功能)和F2有4,你的結果看起來是正確的。

爲避免共線性,您最好放下其中一列(對於每個F1和F2)。不一定是第一列。通常,您會刪除最常見級別的列。

爲什麼最常見的人是誰?考慮功能的重要性。如果您刪除一列,則無法評估其重要性。這個級別(你放棄的級別)就像你的「基礎級別」。只有與基準水平的偏差可以被標記爲重要或不重要。

+0

謝謝你的回覆。所以,如果我理解正確,F1將是1s和0s的稀疏矩陣。在那種情況下,我需要用最大的總和來刪除列。例如,第3列與其他列相比有更多的1,那麼我需要刪除第3列。併爲F2做同樣的事情。那是對的嗎? –

+0

是的。這就是我的意思。 – lanenok

+0

好的。但是我用來創建F1和F2的方法是正確的?我的意思是,有沒有更容易/更好的方法來創建這些功能?例如,如果我有50個分類特徵,那麼理想的方式是什麼? –