我正在处理一个只包含绝对特性的数据文件。为了重现我所面临的问题,我将举下面的例子:
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作为:
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是用来处理分类变量的?还要注意,我的目标变量是多类的,而不是二进制的,我不认为这在这个级别上会造成任何问题。
发布于 2020-11-19 03:05:36
请注意,算法名称中的非常首字母NC表示名义连续;正如错误消息明确指出的那样,该算法并不仅用于处理分类(名词)特征。
要了解为什么会这样,您必须深入了解原始的打浆纸;引用相关的部分 (部分):
虽然我们的平滑方法目前使用而不是来处理带有所有标称特征的数据集,但是它被推广到处理连续和名义特征的混合数据集。我们称这种方法为合成少数数过采样技术-标称连续平滑-NC.我们在UCI存储库的成人数据集上测试了这种方法。下面描述了SMOTE-NC算法。
因此,显然,为了使算法工作,它需要至少一个连续特征。这里的情况并非如此,因此在第1步(中值计算)中,该算法相当意外地失败了,因为中值计算不需要使用任何连续的特性。
https://stackoverflow.com/questions/64890362
复制相似问题