如何在 sklearn 中使用 OneHotEncoder 的输出?
How to use the output from OneHotEncoder in sklearn?
我有一个 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: no supported conversion for types : (dtype('O'),
dtype('int64'), dtype('float64'), dtype('float64')).
我看到你已经在使用 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。
看看这个来自 scikit-learn 的例子:
http://scikit-learn.org/stable/auto_examples/ensemble/plot_feature_transformation.html#example-ensemble-plot-feature-transformation-py
问题是您没有使用稀疏矩阵 xx.fit()
。您正在使用原始数据。
我有一个 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
中尝试了DataFrameMappermapper = DataFrameMapper([
('id_col', None),
('target_col', None),
(['col_a'], OneHotEncoder()),
(['col_b'], OneHotEncoder())
])
t = mapper.fit_transform(df)
但是我得到这个错误:
TypeError: no supported conversion for types : (dtype('O'), dtype('int64'), dtype('float64'), dtype('float64')).
我看到你已经在使用 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。
看看这个来自 scikit-learn 的例子: http://scikit-learn.org/stable/auto_examples/ensemble/plot_feature_transformation.html#example-ensemble-plot-feature-transformation-py
问题是您没有使用稀疏矩阵 xx.fit()
。您正在使用原始数据。