应用 OneHotEncoder 时遇到的问题

数据挖掘 Python 分类 数据挖掘 分类数据 编码
2022-02-25 09:29:42

对于分类,我试图通过应用 OneHotEncoder 将分类数据转换为数字。但它显示错误could not convert string to float

这是我的分类数据集的示例和 One Hot Encoding 的代码。

在此处输入图像描述

# TODO: create a OneHotEncoder object, and fit it to all of X from sklearn.preprocessing import OneHotEncoder

# 1. INSTANTIATE enc = OneHotEncoder()

# 2. FIT enc.fit(train_obj)

# 3. Transform train_ = enc.transform(train_obj) train_.head()

和错误信息: 在此处输入图像描述

我不明白是什么问题以及我该如何解决。

如果我应用get_dummies()方法,它是否类似于 OneHotEncoder ?

2个回答

考虑以下演示:

来源 DF:

In [53]: df
Out[53]:
   A          B                   C
0  1  Bachelors  Married-civ-spouse
1  2    HS-grad            Divorsed
2  3       11th  Married-civ-spouse

选项1:

In [54]: for c in df.columns[df.dtypes.eq('object')]:
    ...:     df = df.join(df[c].str.get_dummies())
    ...:

结果:

In [55]: df
Out[55]:
   A          B                   C  11th  Bachelors  HS-grad  Divorsed  Married-civ-spouse
0  1  Bachelors  Married-civ-spouse     0          1        0         0                   1
1  2    HS-grad            Divorsed     0          0        1         1                   0
2  3       11th  Married-civ-spouse     1          0        0         0                   1

选项 2:

In [58]: df = df.join(pd.get_dummies(df.select_dtypes(['object'])))

In [59]: df
Out[59]:
   A          B                   C  B_11th  B_Bachelors  B_HS-grad  C_Divorsed  C_Married-civ-spouse
0  1  Bachelors  Married-civ-spouse       0            1          0           0                     1
1  2    HS-grad            Divorsed       0            0          1           1                     0
2  3       11th  Married-civ-spouse       1            0          0           0                     1

从一个string一个热编码基本上是一个两步过程。

sklearnOneHotEncoder作用:

使用 one-hot aka one-of-K 方案对分类整数特征进行编码。(见这里

因此,首先必须转换stringsintegers,这可以使用sklearn's轻松完成LabelEncoder

使用 0 和 n_classes-1 之间的值对标签进行编码。(见这里

有几个这样的例子StackOverflow,例如这里