如何解决ValueError:使用序列设置数组元素 - Imblearn
我正在尝试从 imblearn 中进行 SMOTE 过采样。这是我的代码:
X = data[['a','b','c']]
y = data['targets']
oversampler = SMOTE(random_state=42)
X_over,y_over = oversampler.fit_resample(X,y)
而且,最后一行 X_over,y)
引发错误 setting an array elemenet with a sequence
我确定原因是因为我的“X”的形状。
X 是一个数据框,其中列 'a' 的每一行是一个长度为 118 的列表,列 'b' 的每一行都是一个长度为 15 的列表,列 'c' 是一个整数列。
即
例如
a(length - 118) b(length -15) c
[1,2,3,4,.....0] [4,7,8,9...0] 3
现在,我如何将此数据帧 X 转换为形状数组 (n_samples,n_features),根据 documentation
有人可以帮我转换输入数据框以消除此错误吗?
解决方法
您可以展开列,首先检查长度是否相同:
import pandas as pd
import numpy as np
from imblearn.over_sampling import SMOTE
data = pd.DataFrame({'targets':np.random.binomial(1,0.15,100),'a':np.random.randint(0,10,(100,2)).tolist(),'b':np.random.randint(11,20,3)).tolist(),'c':np.random.randint(0,100,100)
})
data['a'].apply(len).value_counts()
2 100
扩展列的功能,新列将被命名为例如 a0..aN,并且之前的列表列将被删除:
def expand_cols(da,col_list):
for C in col_list:
ix = [C+str(i) for i in range(len(da[C][0]))]
da[ix] = pd.DataFrame(data[C].tolist(),columns = ix)
da = da.drop(col_list,axis=1)
return da
您的代码,我们会在合适时对其进行扩展:
X = data[['a','b','c']]
y = data['targets']
oversampler = SMOTE(random_state=42)
X_over,y_over = oversampler.fit_resample(expand_cols(X,['a','b']),y)
看起来像这样:
X_over.head()
c a0 a1 b0 b1 b2
0 67 4 0 19 15 16
1 12 3 7 12 17 19
2 41 8 9 15 18 18
3 35 8 0 11 13 11
4 46 0 5 12 12 12
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。