如何在 sklearn 中使用 OneHotEncoder 的输出?

Posted

技术标签:

【中文标题】如何在 sklearn 中使用 OneHotEncoder 的输出?【英文标题】:How to use the output from OneHotEncoder in sklearn? 【发布时间】:2016-11-25 15:54:46 【问题描述】:

我有一个 Pandas 数据框,其中包含 2 个分类变量、ID 变量和一个目标变量(用于分类)。我设法用OneHotEncoder 转换了分类值。这导致稀疏矩阵。

ohe = OneHotEncoder()
# First I remapped the string values in the categorical variables to integers as OneHotEncoder needs integers as input
... remapping code ...

ohe.fit(df[['col_a', 'col_b']])
ohe.transform(df[['col_a', 'col_b']])

但我不知道如何在 DecisionTreeClassifier 中使用这个稀疏矩阵?特别是当我想稍后在我的数据框中添加一些其他非分类变量时。谢谢!

编辑 回复miraculixx的评论:我也试过sklearn-pandas中的DataFrameMapper

mapper = DataFrameMapper([
    ('id_col', None),
    ('target_col', None),
    (['col_a'], OneHotEncoder()),
    (['col_b'], OneHotEncoder())
])

t = mapper.fit_transform(df)

然后我得到这个错误:

TypeError: 不支持类型转换: (dtype('O'), dtype('int64'), dtype('float64'), dtype('float64'))。

【问题讨论】:

sklearn-pandas 在处理数据框和 sklearn 时非常有用。 【参考方案1】:

我看到你已经在使用 Pandas,为什么不使用它的 get_dummies 函数呢?

import pandas as pd
df = pd.DataFrame([['rick','young'],['phil','old'],['john','teenager']],columns=['name','age-group'])

结果

   name age-group
0  rick     young
1  phil       old
2  john  teenager

现在您使用 get_dummies 进行编码

pd.get_dummies(df)

结果

name_john  name_phil  name_rick  age-group_old  age-group_teenager  \
0          0          0          1              0                   0   
1          0          1          0              1                   0   
2          1          0          0              0                   1   

   age-group_young  
0                1  
1                0  
2                0

您实际上可以在 Sklearn 的 DecisionTreeClassifier 中使用新的 Pandas DataFrame。

【讨论】:

感谢 Guiem Bosch,这很有效。但是,我必须指定仅在两列上使用 get_dummies。如果我将 ID 变量留在 Dataframe 中,我会收到内核死亡的消息。所以下面的代码起作用了: pd.get_dummies(df[['col_a', 'col_b']]) 此外,不需要将字符串值重新映射为整数。否则 get_dummies 似乎什么也没做。【参考方案2】:

看看这个来自 scikit-learn 的例子: http://scikit-learn.org/stable/auto_examples/ensemble/plot_feature_transformation.html#example-ensemble-plot-feature-transformation-py

问题是您没有使用xx.fit() 的稀疏矩阵。您正在使用原始数据。

【讨论】:

以上是关于如何在 sklearn 中使用 OneHotEncoder 的输出?的主要内容,如果未能解决你的问题,请参考以下文章

在 sklearn 中使用 DictVectorizer 后如何获得分类特征的重要性

如何在 Python 中使用 sklearn 对模型进行单一预测?

如何在 sklearn 中使用 OneHotEncoder 的输出?

python:如何在sklearn中使用逻辑回归系数构建决策边界

如何在 sklearn 中编写自定义估算器并对其使用交叉验证?

如何在 tf.data.Dataset.map 中使用 sklearn.preprocessing?