pd.get_dummies 和 python 中的 sklearn one 热编码器有什么区别?
What is difference between pd.get_dummies and sklearn one hot encoder in python?
pd.get_dummies 和 python 中的 sklearn one 热编码器有什么区别?据我所知,两者都做同样的工作,任何人都可以说出 pd.get_dummies 和 sklearn 一个热编码器之间的主要区别是什么,目前哪个更有效。
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_dummies
比 OneHotEncoder
快得多
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。输入数据依赖性
如旧
中所述
我觉得关键区别之一是 .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 和 python 中的 sklearn one 热编码器有什么区别?据我所知,两者都做同样的工作,任何人都可以说出 pd.get_dummies 和 sklearn 一个热编码器之间的主要区别是什么,目前哪个更有效。
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_dummies
比 OneHotEncoder
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。输入数据依赖性
如旧
我觉得关键区别之一是 .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