当前位置:  开发笔记 > 编程语言 > 正文

在scikit-learn中进行一次热编码的可能方法?

如何解决《在scikit-learn中进行一次热编码的可能方法?》经验,为你挑选了2个好方法。

我有一个带有一些分类列的pandas数据框.其中一些包含非整数值.

我目前想要对这些数据应用几种机器学习模型.对于某些模型,有必要进行标准化以获得更好的结果.例如,将分类变量转换为虚拟/指示变量.实际上,为此目的,熊猫有一个名为get_dummies的函数.但是,此函数根据数据返回结果.因此,如果我在训练数据上调用get_dummies,然后在测试数据上再次调用它,则在两种情况下实现的列可能会有所不同,因为测试数据中的分类列只能包含一个子集/不同的可能值集与可能的值相比较培训数据.

因此,我正在寻找其他方法来进行单热编码.

有什么方法可以在python(pandas/sklearn)中进行一次热编码?



1> David Maust..:

Scikit-learn提供编码器sklearn.preprocessing.LabelBinarizer.

对于编码训练数据,您可以使用fit_transform,它将发现类别标签并创建适当的虚拟变量.

label_binarizer = sklearn.preprocessing.LabelBinarizer()
training_mat = label_binarizer.fit_transform(df.Label)

对于测试数据,您可以使用transform使用相同的类别集.

test_mat = label_binarizer.transform(test_df.Label)



2> hume..:

在过去,我发现处理这个问题最简单的方法是使用get_dummies然后强制列在测试和训练之间匹配.例如,您可能会执行以下操作:

import pandas as pd

train = pd.get_dummies(train_df)
test = pd.get_dummies(test_df)

# get the columns in train that are not in test
col_to_add = np.setdiff1d(train.columns, test.columns)

# add these columns to test, setting them equal to zero
for c in col_to_add:
    test[c] = 0

# select and reorder the test columns using the train columns
test = test[train.columns]

这将丢弃您在训练集中未见过的标签信息,但会强制执行一致性.如果您使用这些拆分进行交叉验证,我建议两件事.首先,get_dummies对整个数据集进行操作以获取所有列(而不是像上面代码中那样仅在训练集上).其次,使用StratifiedKFold进行交叉验证,以便您的拆分包含相关标签.

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有