首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只使用范畴变量的SMOTE-NC

只使用范畴变量的SMOTE-NC
EN

Stack Overflow用户
提问于 2020-11-18 09:31:50
回答 1查看 4.8K关注 0票数 1

我正在处理一个只包含绝对特性的数据文件。为了重现我所面临的问题,我将举下面的例子:

代码语言:javascript
复制
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作为我的目标特性。

代码语言:javascript
复制
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作为:

代码语言:javascript
复制
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)

对此,我得到以下错误:

代码语言:javascript
复制
ValueError: SMOTE-NC is not designed to work only with categorical features. It requires some numerical features.

我想知道如何处理这个问题,考虑到SMOTE是用来处理分类变量的?还要注意,我的目标变量是多类的,而不是二进制的,我不认为这在这个级别上会造成任何问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-19 03:05:36

请注意,算法名称中的非常首字母NC表示名义连续;正如错误消息明确指出的那样,该算法并不仅用于处理分类(名词)特征。

要了解为什么会这样,您必须深入了解原始的打浆纸;引用相关的部分 (部分):

虽然我们的平滑方法目前使用而不是来处理带有所有标称特征的数据集,但是它被推广到处理连续和名义特征混合数据集。我们称这种方法为合成少数数过采样技术-标称连续平滑-NC.我们在UCI存储库的成人数据集上测试了这种方法。下面描述了SMOTE-NC算法。

  1. 中值计算:计算少数类的所有连续特征的标准差中值。如果一个样本和它的潜在近邻之间的标称特征不同,那么这个中值就包含在欧几里德距离计算中。我们用中值来惩罚与连续特征值的典型差异相关的标称特征的差异。
  2. 最近邻计算:利用连续特征空间计算k近邻特征向量(少数类样本)与其它特征向量(少数类样本)之间的欧氏距离。对于所考虑的特征向量与其潜在最近邻之间的每一个不同的标称特征,在欧氏距离计算中包括先前计算的标准差的中值。

因此,显然,为了使算法工作,它需要至少一个连续特征。这里的情况并非如此,因此在第1步(中值计算)中,该算法相当意外地失败了,因为中值计算不需要使用任何连续的特性。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64890362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档