使用sklearn使用列转换器创建虚拟变量

时间:2019-12-08 07:12:43

标签: python scikit-learn deep-learning

我一直在尝试使用ANN为实践目的创建DL模型。我有一个假银行的客户数据,其中有两个类别变量,即性别和国家。

我使用LabelEncoder对两列进行编码,但无法为国家/地区列创建虚拟变量。顺带一提,有三个国家,即法国,德国和西班牙。

我得到的错误:

  

ValueError:没有足够的值可解压缩(预期3,得到2)

我的代码:

# Encodeing categorical data
# for country column
labelencoder_X_1 = LabelEncoder()
X[:, 1] = labelencoder_X_1.fit_transform(X[:, 1])

# for gender column
labelencoder_X_2 = LabelEncoder()
X[:, 2] = labelencoder_X_2.fit_transform(X[:, 2])

ct = ColumnTransformer(
transformers=[
    ("dummy_var",        # Just a name
     OneHotEncoder( # The transformer class
     categories=[[1]])            # The column(s) to be applied on.
     )
], remainder='passthrough')
X = ct.fit_transform(X).toarray()
X = X[:, 1:]
# print(X)

PS:我在深度学习中使用Pycharm和新手。

预先感谢!

1 个答案:

答案 0 :(得分:1)

我认为您的错误是在OneHotEncoder中指定了列名。必须为ColumnTransformer指定。

尝试一下!

ct = ColumnTransformer(
transformers=[
    ("dummy_var",        # Just a name
     OneHotEncoder(), # The transformer class
     [1]       # The column(s) to be applied on.     
     )
], remainder='passthrough')

注意:您不必在labelEncoder之前申请OneHotEncoder。您直接应用OneHotEncoder