问题描述
我正在学习将机器学习分类器将分类变量转换为数字的不同方法.我遇到了pd.get_dummies
方法和sklearn.preprocessing.OneHotEncoder()
,我想看看它们在性能和用法上有何不同.
I'm learning different methods to convert categorical variables to numeric for machine-learning classifiers. I came across the pd.get_dummies
method and sklearn.preprocessing.OneHotEncoder()
and I wanted to see how they differed in terms of performance and usage.
我在 https://xgdgsc.wordpress.com/2015/03/20/note-on-using-onehotencoder-in-scikit-learn-to-work -on-categorical-features/,因为sklearn
文档对该功能的帮助不是很大.我有一种感觉,我做得不正确...但是
I found a tutorial on how to use OneHotEncoder()
on https://xgdgsc.wordpress.com/2015/03/20/note-on-using-onehotencoder-in-scikit-learn-to-work-on-categorical-features/ since the sklearn
documentation wasn't too helpful on this feature. I have a feeling I'm not doing it correctly...but
有人可以解释在sklearn.preprocessing.OneHotEncoder()
上使用pd.dummies
的利弊吗??我知道OneHotEncoder()
给您提供了一个稀疏矩阵,但我不确定它的用法以及与pandas
方法相比有什么好处.我使用效率低下吗?
Can some explain the pros and cons of using pd.dummies
over sklearn.preprocessing.OneHotEncoder()
and vice versa? I know that OneHotEncoder()
gives you a sparse matrix but other than that I'm not sure how it is used and what the benefits are over the pandas
method. Am I using it inefficiently?
import pandas as pd
import numpy as np
from sklearn.datasets import load_iris
sns.set()
%matplotlib inline
#Iris Plot
iris = load_iris()
n_samples, m_features = iris.data.shape
#Load Data
X, y = iris.data, iris.target
D_target_dummy = dict(zip(np.arange(iris.target_names.shape[0]), iris.target_names))
DF_data = pd.DataFrame(X,columns=iris.feature_names)
DF_data["target"] = pd.Series(y).map(D_target_dummy)
#sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) \
#0 5.1 3.5 1.4 0.2
#1 4.9 3.0 1.4 0.2
#2 4.7 3.2 1.3 0.2
#3 4.6 3.1 1.5 0.2
#4 5.0 3.6 1.4 0.2
#5 5.4 3.9 1.7 0.4
DF_dummies = pd.get_dummies(DF_data["target"])
#setosa versicolor virginica
#0 1 0 0
#1 1 0 0
#2 1 0 0
#3 1 0 0
#4 1 0 0
#5 1 0 0
from sklearn.preprocessing import OneHotEncoder, LabelEncoder
def f1(DF_data):
Enc_ohe, Enc_label = OneHotEncoder(), LabelEncoder()
DF_data["Dummies"] = Enc_label.fit_transform(DF_data["target"])
DF_dummies2 = pd.DataFrame(Enc_ohe.fit_transform(DF_data[["Dummies"]]).todense(), columns = Enc_label.classes_)
return(DF_dummies2)
%timeit pd.get_dummies(DF_data["target"])
#1000 loops, best of 3: 777 µs per loop
%timeit f1(DF_data)
#100 loops, best of 3: 2.91 ms per loop
推荐答案
OneHotEncoder
无法直接处理字符串值.如果您的名义特征是字符串,则需要首先将它们映射为整数.
OneHotEncoder
cannot process string values directly. If your nominal features are strings, then you need to first map them into integers.
pandas.get_dummies
则相反.默认情况下,除非指定了列,否则它仅将字符串列转换为一键表示.
pandas.get_dummies
is kind of the opposite. By default, it only converts string columns into one-hot representation, unless columns are specified.
这篇关于get_dummies(Pandas)和OneHotEncoder(Scikit-learn)之间的优缺点是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!