我正在处理一个只包含分类特征的数据框。为了重现我面临的问题,我将制作以下示例:
d = {'col1':['a','b','c','a','c','c','c','c','c','c'],
'col2':['a1','b1','c1','a1','c1','c1','c1','c1','c1','c1'],
'col3':[1,2,3,2,3,3,3,3,3,3]}
data = pd.DataFrame(d)
我要将数据拆分为测试和训练,并将 col3 作为我的目标特征。
train_data, test_data = train_test_split(data, test_size=0.2)
train_data = train_data.reset_index(drop=True)
test_data = test_data.reset_index(drop=True)
X_train = train_data.drop(['col3'], axis = 1)
X_test = test_data.drop(['col3'], axis = 1)
y_train = train_data["col3"]
y_test = test_data["col3"]
在 X_train 中,col1 和 col2 是我的分类特征,因此索引 0 和 1,因此我将 SMOTE-NC 执行为:
from imblearn.over_sampling import SMOTENC
cat_indx =[0,1]
sm = SMOTENC(categorical_features= cat_indx, random_state=0)
X_train_res, y_train_res = sm.fit_resample(X_train, y_train)
为此我收到以下错误:
ValueError: SMOTE-NC is not designed to work only with categorical features. It requires some numerical features.
鉴于 SMOTE-NC 旨在处理分类变量这一事实,我想知道如何解决这个问题?另请注意,我的目标变量是多类的,而不是二进制的,我认为这不会在这个级别引起任何问题。