首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >get_dummies (熊猫)和OneHotEncoding (滑稽)的区别

get_dummies (熊猫)和OneHotEncoding (滑稽)的区别
EN

Stack Overflow用户
提问于 2021-01-07 00:11:27
回答 1查看 105关注 0票数 0

我想知道与sklearn的OneHotEncoder()相比,熊猫对分类特征的get_dummies()编码有什么不同。

我看到的答案提到,get_dummies()不能为训练数据集(answers here)中看不到的类别生成编码。然而,这是在测试和训练数据集上分别执行get_dummies()的结果(这可能会产生不一致的形状)。另一方面,如果我们将get_dummies()应用于原始数据集,在拆分它之前,我认为这两种方法应该会产生相同的结果。我说错了吗?这会造成问题吗?

我的代码目前的工作方式如下:

代码语言:javascript
复制
def one_hot_encode(ds,feature):
    #get DF of dummy variables
    dummies = pd.get_dummies(ds[feature])
    #One dummy variable to drop (Dummy Trap)
    dummyDrop = dummies.columns[0]
    #Create a DF from the original and the dummies' DF
    #Drop the original categorical variable and the one dummy
    final =  pd.concat([ds,dummies], axis='columns').drop([feature,dummyDrop], axis='columns')
    return final

#Get data DF
dataset = pd.read_csv("census_income_dataset.csv")
columns = dataset.columns

#Perform one-hot-encoding on the DF (See function above) on categorical features
features = ["workclass","marital_status","occupation","relationship","race","sex","native_country"]
for f in features:
    dataset = one_hot_encode(dataset,f)
#Re-order to get ouput feature in last column
dataset = dataset[[c for c in dataset.columns if c!="income_level"]+["income_level"]]
dataset.head()
EN

回答 1

Stack Overflow用户

发布于 2021-01-07 16:08:25

如果在常规数据集中应用get_dummies()OneHotEncoder(),则应获得相同的结果。

如果您在一般数据集中应用get_dummies(),在训练数据集中应用OneHotEncoder(),如果在测试数据中有一个“新”类别,您可能会获得一些(非常小的)差异。如果不是,它们应该有相同的结果。

get_dummies()OneHotEncoder()之间的主要区别在于,当您在现实生活中(或在生产中)使用此模型时,和OneHotEncoder()之间的主要区别在于,当您在之前从未遇到过分类列的“新”类时,它们是如何工作的

例如:假设你的“性别”类别只能是:男性或女性,然后你把你的模型卖给了一家公司。如果现在,类别“性”收到值:"NA“(不适用),会发生什么?(此外,您可以将"NA“想象为一个选项,但它只显示0.001%,并且您的数据集中没有任何此值)

使用get_dummies(),你会遇到一个问题,因为你的模型只针对两种不同的性别类别进行了训练,而现在,你有了一个模型无法处理的不同的新类别。

使用OneHotEncoder(),将允许您“忽略”模型无法面对的新类别,允许您在模型输入和新样本输入之间保持相同的形状。

这就是为什么人们在训练集中而不是在一般数据集中使用OneHotEncoder()的原因,他们正在“模拟”这种类型的成功(在分类专栏中有你以前从未遇到过的“新”类)

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65599297

复制
相关文章

相似问题

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