8

我有一个带有 2 个分类变量、ID 变量和一个目标变量(用于分类)的 Pandas 数据框。我设法用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'))。

4

2 回答 2

14

我看到您已经在使用 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。

于 2016-07-22T06:16:37.080 回答
1

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

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

于 2016-07-22T06:46:55.177 回答