如何在两个不同的数据集中将字符串变量转换为分类变量,并保持相同的转换?

2024-10-01 17:30:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在建立一个模型,我有两个熊猫数据帧。一个是训练数据,另一个是测试数据。其中一个变量是国家。我正在考虑使用OrdinalCoder()将country列转换为分类列。例如:“美国”在新栏中为1,“巴西”为2,依此类推。但是,我希望对这两个数据帧进行相同的转换。如果训练数据中的“USA”作为分类列变为1,我希望测试数据中的“USA”也变为1

可能吗?怎么会这样

提前谢谢


Tags: 数据模型分类国家country测试数据usaordinalcoder
2条回答

通常,当您确定或知道类别之间存在“有序”关系时,建议使用OrdinalCoder。例如,等级F、B-、B、A-和A:对于每一个等级,编码为1、2、3、4、5是有意义的,其中等级越高,权重越高(以编码类别的形式)

在您当前的情况下,最好在拆分为训练/测试数据集之前为国家/地区列使用OneHot编码器

import numpy as np                                                                   
from sklearn.preprocessing import OrdinalEncoder                                     

X_train = np.array(["USA", "Sweden", "USA"], dtype=object).reshape(-1, 1)            
X_test = np.array(["Sweden", "USA"], dtype=object).reshape(-1, 1)                    

encoder = OrdinalEncoder()                                                           
encoder.fit(X_train)                                                                 

encoder.transform(X_train)                                                    
encoder.transform(X_test)

如果您认为测试中可能存在未知类别,您可以在进行培训/测试拆分之前记录所有类别:

categories = [np.unique(np.vstack([X_train[:, [i]], X_test[:, [i]]]))                
              for i in range(X_train.shape[1])]                                      

encoder = OrdinalEncoder(categories=categories)

相关问题 更多 >

    热门问题