resample - 无法单独创建训练集和测试集
resample - can't create training and test sets separately
我正在使用自举技术来评估 MLPClassifier
并且我正在使用 scikit.utils.resample
来获取不同的随机样本,但是 x_test
和 y_test
正在返回空:
seeds = [50,51,52,53,54]
for i in range(5): # number of bootstrap samples
X_train, y_train = resample(X, y, n_samples=len(X), random_state=seeds[i], stratify=y)
X_test = [x for x in X if x not in X_train] # test = samples that weren't selected for train
y_test = [y for y in y if y not in y_train] # test = samples that weren't selected for train
X_test
# []
我做错了什么? / 有更好的方法吗?很难相信 sklearn
没有提供更好的方法。
你的第一个列表理解在这里不起作用,因为 in
运算符不适用于 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
# []
原因是 in
运算符不适用于 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_test
中得到 X
中唯一不存在于 X_train
中的元素,即 [[0.0, 0.0]]
.
相反,y
是一维 numpy 数组,列表理解中的 in
运算符将起作用:
y_test = [y for y in y if y not in y_train]
y_test
# [2]
我正在使用自举技术来评估 MLPClassifier
并且我正在使用 scikit.utils.resample
来获取不同的随机样本,但是 x_test
和 y_test
正在返回空:
seeds = [50,51,52,53,54]
for i in range(5): # number of bootstrap samples
X_train, y_train = resample(X, y, n_samples=len(X), random_state=seeds[i], stratify=y)
X_test = [x for x in X if x not in X_train] # test = samples that weren't selected for train
y_test = [y for y in y if y not in y_train] # test = samples that weren't selected for train
X_test
# []
我做错了什么? / 有更好的方法吗?很难相信 sklearn
没有提供更好的方法。
你的第一个列表理解在这里不起作用,因为 in
运算符不适用于 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
# []
原因是 in
运算符不适用于 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_test
中得到 X
中唯一不存在于 X_train
中的元素,即 [[0.0, 0.0]]
.
相反,y
是一维 numpy 数组,列表理解中的 in
运算符将起作用:
y_test = [y for y in y if y not in y_train]
y_test
# [2]