pd.get_dummies 和 sklearn 是 python 中的一个热门编码器有啥区别? [复制]

Posted

技术标签:

【中文标题】pd.get_dummies 和 sklearn 是 python 中的一个热门编码器有啥区别? [复制]【英文标题】:What is difference between pd.get_dummies and sklearn one hot encoder in python? [duplicate]pd.get_dummies 和 sklearn 是 python 中的一个热门编码器有什么区别? [复制] 【发布时间】:2019-08-01 15:23:05 【问题描述】:

pd.get_dummies 和 sklearn 是 python 中的一个热门编码器有什么区别?据我所知,两者都做同样的工作,谁能告诉 pd.get_dummies 和 sklearn 一个热编码器之间的主要区别是什么,目前哪个更有效。

【问题讨论】:

感谢您的及时回复,但与两种方式相比,哪种方式更有效,区别仅在于我在那篇文章中确定,pandas get_duimmies 可以直接将字符串列数据转换为整数列,其中在一个热编码器的情况下,我们明确定义了我们的映射,之后它将转换除此之外的差异。 【参考方案1】:

1.输出差异

pd.get_dummies 生成 Pandas DataFrame,而OneHotEncoder 生成 SciPy CSR 矩阵。

示例 -

s = pd.Series([1, 2, 3, 4, 5])
0    1
1    2
2    3
3    4
4    5
dtype: int64

type(pd.get_dummies(s))
pandas.core.frame.DataFrame

from sklearn.preprocessing import OneHotEncoder
enc = OneHotEncoder()
enc.fit_transform(s.values.reshape(-1, 1))#.toarray() # Can be converted to NumPy ndarray using .toarray
scipy.sparse.csr.csr_matrix

2。时间复杂度

pd.get_dummiesOneHotEncoder 快得多

Example -
s = pd.Series([1, 2, 3, 4, 5]*50000)
len(s)
250000

%timeit pd.get_dummies(s)
15.2 ms ± 227 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

%timeit enc.fit_transform(s.values.reshape(-1, 1))
34.1 ms ± 5.26 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

%timeit enc.fit_transform(s.values.reshape(-1, 1)).toarray() # more reusable
45.3 ms ± 5.63 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

3。输入数据依赖

如旧 post 中所述

【讨论】:

感谢您对我的查询进行了清晰的解释。现在它很干净。【参考方案2】:

我觉得一个关键的区别之一是.transform 在一个热编码器中。

如果您计划在测试数据和 让我们假设我们有以下情况:

enc.transform(pd.Series([1,3,2]).values.reshape(-1,1)).toarray()

#it will create consistent columns as that of the training data (all 5 features)
array([[1., 0., 0., 0., 0.],
       [0., 0., 1., 0., 0.],
       [0., 1., 0., 0., 0.]])

但是 pd.get_dummies 在测试数据上独立工作

pd.get_dummies(pd.Series([1,3,2]))

#
    1   2   3
0   1   0   0
1   0   0   1
2   0   1   0

【讨论】:

以上是关于pd.get_dummies 和 sklearn 是 python 中的一个热门编码器有啥区别? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

pd.get_dummies 和 sklearn 是 python 中的一个热门编码器有啥区别? [复制]

keras.utils.to_categorical 和 pd.get_dummies 之间有啥区别吗?

pytorch和sklearn哪个运行快

pd.get_dummies 是单热编码吗?

特征提取pd.get_dummies() 详解(One-Hot Encoding)

如何做 pd.get_dummies 或其他方式?