首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >get_dummies (Pandas)和OneHotEncoder (Scikit-learn)之间的优缺点是什么?

get_dummies (Pandas)和OneHotEncoder (Scikit-learn)之间的优缺点是什么?
EN

Stack Overflow用户
提问于 2016-04-15 02:28:37
回答 4查看 58.7K关注 0票数 116

我正在学习不同的方法来将分类变量转换为机器学习分类器的数值。我遇到了pd.get_dummies方法和sklearn.preprocessing.OneHotEncoder(),我想看看它们在性能和用法方面有何不同。

我找到了一个关于如何在https://xgdgsc.wordpress.com/2015/03/20/note-on-using-onehotencoder-in-scikit-learn-to-work-on-categorical-features/上使用OneHotEncoder()的教程,因为sklearn文档对此功能帮助不大。我有一种感觉,我没有这样做,correctly...but

能否解释一下在pd.dummies sklearn.preprocessing.OneHotEncoder() 上使用 OneHotEncoder() 的优缺点,反之亦然?我知道OneHotEncoder()提供了一个稀疏矩阵,但除此之外,我不确定它是如何使用的,以及与pandas方法相比有什么好处。我是否在低效地使用它?

代码语言:javascript
运行
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36631163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档