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个分类特征,那么理想的方式是什么? –