交叉验证加过采样?
数据挖掘
机器学习
Python
交叉验证
采样
2021-09-18 17:32:42
3个回答
分层 K 折不是这里的答案。
为此目的创建过采样 k-fold 类的代码示例:
class oversampled_Kfold():
def __init__(self, n_splits, n_repeats=1):
self.n_splits = n_splits
self.n_repeats = n_repeats
def get_n_splits(self, X, y, groups=None):
return self.n_splits*self.n_repeats
def split(self, X, y, groups=None):
splits = np.split(np.random.choice(len(X), len(X),replace=False), 5)
train, test = [], []
for repeat in range(self.n_repeats):
for idx in range(len(splits)):
trainingIdx = np.delete(splits, idx)
Xidx_r, y_r = ros.fit_resample(trainingIdx.reshape((-1,1)),
y[trainingIdx])
train.append(Xidx_r.flatten())
test.append(splits[idx])
return list(zip(train, test))
...
...
rkf_search = oversampled_Kfold(n_splits=5, n_repeats=2)
...
output = cross_validate(clf,x,y, scoring=metrics,cv=rkf)
ros 是 imblearn 的随机过采样器。
添加到Himanshu Rai所说的内容中,您应该注意不要在 StratifiedKFold 之前进行过度采样,一旦您冒险将相同的样本放入训练和测试折叠中,请检查此,(您从中获取图像的位置)并且这并不是真的评估您的模型对从未见过的数据的能力。我所做的是使用 StratifiedKFold,然后只查看该折叠的训练数据,然后分别对所有训练折叠进行过采样或 SMOTE(或任何你想要的)。然后使用所有这些折叠来验证您的模型。
其它你可能感兴趣的问题