如何设置相同的分类代码来训练和测试数据?Python-熊猫

数据挖掘 机器学习 scikit-学习 熊猫 随机森林 分类数据
2021-09-30 05:24:50

注意:如果其他人想知道这个话题,我知道你在数据分析领域越来越深入,所以我之前做了这个问题来了解这一点:

仅当您处理序数类(即大学学位、客户满意度调查)时,才将分类值编码为整数。否则,如果您正在处理诸如性别、颜色或名称之类的名义类,则必须使用其他方法转换它们,因为它们不指定任何数字顺序,最知名的是 One-hot Encoding 或 Dummy 变量。我鼓励您阅读有关它们的更多信息,并希望这对您有所帮助。

检查下面的链接以查看一个很好的解释: https ://www.youtube.com/watch?v=9yl6-HEY7_s

这可能是一个简单的问题,但我认为它对初学者很有用。

我需要在测试数据集上运行预测模型,因此要将分类变量转换为可以由随机森林模型处理的分类代码,我将这些行与所有这些行一起使用:

Train:

data_['Col1_CAT'] = data_['Col1'].astype('category')
data_['Col1_CAT'] = data_['Col1_CAT'].cat.codes

因此,在运行模型之前,我必须对训练和测试数据都应用相同的过程。

而且由于两个数据集具有相同的分类变量/列,我认为将相同的分类代码分别应用于每一列会很有用。

但是,尽管我在每个数据集上处理相同的变量,但每次使用这两行时都会得到不同的代码。

所以,我的问题是,每次在每个数据集上转换相同的分类时,如何才能获得相同的代码?

感谢您的见解和反馈。

2个回答

@BeamsAdept 的回答是使用sklearn.

这是我只使用熊猫所做的,可能对其他用例有用。

training_data[1] = pd.Categorical(training_data[1])
categories = training_data[1].cat.categories
testing_data[1] = pd.Categorical(testing_data[1], categories)

training_data[1] = training_data[1].cat.codes
testing_data[1] = testing_data[1].cat.codes

首先,请注意随机森林可以处理分类变量(此外,如果您的类别太多,减少这个数字是一个好习惯)。如果您想对您的数据应用过滤器,我建议您使用sklearn转换器(如 OneHot 编码器、标签编码......根据您想要做的选择您需要的)。

在这种情况下,您必须将编码器安装到您的训练数据集中,然后将其应用到您的测试中。如果您想在实际案例中应用这一点,您必须将经过训练的编码器与经过训练的模型一起保存,这样您就可以在预测之前将编码器直接应用于新数据,因此它具有相同的模式。

这是标签编码器的示例

from sklearn import preprocessing
train, test = ... # SEPARATE YOUR DATA AS YOU WANT
le = preprocessing.LabelEncoder()
trained_le = le.fit(train)
train = trained_le.transform(train)
test = trained_le.transform(test)