Python 重采样-can';t分别创建培训集和测试集

Python 重采样-can';t分别创建培训集和测试集,python,arrays,numpy,scikit-learn,resampling,Python,Arrays,Numpy,Scikit Learn,Resampling,我正在使用自举技术评估MLP分类器,我正在使用scikit.utils.resample获取不同的随机样本,但是x\u测试和y\u测试返回空: seeds=[50,51,52,53,54] 对于范围(5)内的i:#引导样本数 X_序列,y_序列=重采样(X,y,n_样本=len(X),随机状态=种子[i],分层=y) X#u测试=[如果X不在X#列中,则X代表X在X中]#测试=未为X列选择的样本 y#u测试=[y不在y列时y代表y]#测试=未为y列选择的样本 X_检验 # [] 我做错了什么有

我正在使用自举技术评估
MLP分类器
,我正在使用
scikit.utils.resample
获取不同的随机样本,但是
x\u测试
y\u测试
返回空:

seeds=[50,51,52,53,54]
对于范围(5)内的i:#引导样本数
X_序列,y_序列=重采样(X,y,n_样本=len(X),随机状态=种子[i],分层=y)
X#u测试=[如果X不在X#列中,则X代表X在X中]#测试=未为X列选择的样本
y#u测试=[y不在y列时y代表y]#测试=未为y列选择的样本
X_检验
# []

我做错了什么有更好的方法吗?很难相信
sklearn
没有提供更好的方法

由于中的
操作符不适用于2D numpy数组,因此您的第一个列表理解在这里不起作用

让我们首先用虚拟数据重现您的问题:

from sklearn.utils import resample
import numpy as np

X = np.array([[1., 0.], [2., 1.], [0., 0.]])
y = np.array([0, 1, 2])

X_train, y_train = resample(X, y, random_state=0)
X_train
# result
array([[ 1.,  0.],
       [ 2.,  1.],
       [ 1.,  0.]])
到目前为止还不错;但是,正如我所说,清单理解将不起作用,因为你已经发现自己:

X_test = [x for x in X if x not in X_train]
X_test
# []
原因是
中的
操作符不适用于2D numpy数组

将初始
X
转换为列表可以解决以下问题:

X = X.tolist()

X_train, y_train = resample(X, y, random_state=0)
X_train
# [[1.0, 0.0], [2.0, 1.0], [1.0, 0.0]] # as previous result
X_test = [x for x in X if x not in X_train]
X_test
# [[0.0, 0.0]]
其中,正如预期的那样,我们在
X\u测试中得到了
X
初始
X
序列中不存在的唯一元素,即
[[0.0,0.0]

相反,
y
作为1D numpy数组,列表理解中的
in
操作符将起作用:

y_test = [y for y in y if y not in y_train]
y_test
# [2]

您的初始
X
y
列表,还是numpy数组?
X
y
是numpy数组回答没有帮助吗?我会测试,可能是因为
y\u test
是空的,所以我的回答有点错误。我在下面做了一些轻微的更正-
y\u test
不需要转换为列表,这听起来不错,但在我的实际数据中,它抛出了这个错误:
TypeError:Expected sequence或array like,get
@joann2555导入了numpy吗?如果是的话,请编辑你的帖子,包括你最初的
X
数据样本。不过,我知道了。但另一个问题出现了:在引导之前,我应该拆分
x
y
吗?如果我之前拆分,
y_test
将始终为空。@joann2555抱歉,我不明白您的意思;使用
重采样
的方式,您的
y\u测试
将永远不会为空。在任何情况下,评论都不是此类后续问题的正确位置,与OP无关;如果答案解决了您所面临的特定编码问题,请接受它,并随时欢迎您以可能的新问题提出新问题。