SKLearn:标签编码分类值的虚拟变量

Posted

技术标签:

【中文标题】SKLearn:标签编码分类值的虚拟变量【英文标题】:SKLearn: Dummy Variables for Label Encoded Categorical Values 【发布时间】:2020-02-29 23:11:37 【问题描述】:

我首先从 excel 数据集中设置我的 X 并将其转换为矩阵值:

X = dataset.iloc[:, 3:13].values

所以我有两列 X 我需要标记编码(国家和性别)。共有三个国家,西班牙、法国和德国,而且只有两种性别。我对它们进行标记编码:

from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder_X_1 = LabelEncoder()
X[:, 1] = labelencoder_X_1.fit_transform(X[:, 1]) # the three countries
labelencoder_X_2 = LabelEncoder()
X[:, 2] = labelencoder_X_2.fit_transform(X[:, 2])

好的,现在我需要为这三个国家创建虚拟变量,因为它们不存在一个值高于另一个值的等级关系。但是,新代码不起作用:

onehotencoder = OneHotEncoder(categorical_features = [1])
X = onehotencoder.fit_transform(X).toarray()
X = X[:, 1:]

此代码不起作用。我读到现在使用带有 Onehotencoding 的 ColumnTransformer 来创建虚拟变量,但我很难弄清楚。我确实导入了必要的包。这个我试过了,还是不行:

columnTransformer = ColumnTransformer([('encoder', OneHotEncoder(), [1])], remainder='passthrough')
X = columnTransformer.fit_transform(X)

有人可以帮忙吗?谢谢。我只想在标签编码后对三个国家进行热编码。

【问题讨论】:

能否请您发布一些您正在处理的数据框示例? 【参考方案1】:

获得假人的最简单方法是使用 pandas get_dummies 函数。在这里,您甚至不需要对数据进行 Label 编码。

df_country = pd.get_dummies(X[:, 1])
df_gender = pd.get_dummies(X[:, 2]

现在,您获得了两个数据框,其中一个根据国家和性别列进行了热编码。您现在可以将其附加到数据框 X 并删除原始的性别和国家列。 X = pd.concat([X, df_country, df_gender], 轴 = 1)

【讨论】:

以上是关于SKLearn:标签编码分类值的虚拟变量的主要内容,如果未能解决你的问题,请参考以下文章

sklearn 将标签编码器序列化到磁盘以用于多个分类列

使用单热编码处理sklearn中的分类变量

将分类变量转换为伪变量后,如何从sklearn api中找到功能的重要性?

标称变量(Categorical Features)或者分类变量(Categorical Features​​​​​​​)编码为数值变量(Continuous Features​​​​​​​)

为分类变量 sklearn 创建我的自定义 Imputer

使用 sklearn 或 pandas 进行一次热编码后,如何在混合数据集(数值 + 分类)上应用 KNN