Python 在应用分层k-折叠交叉验证后,如何将数据分为测试和训练?
我已经使用以下代码将列指定给其特定的k折叠:Python 在应用分层k-折叠交叉验证后,如何将数据分为测试和训练?,python,pandas,scikit-learn,k-fold,Python,Pandas,Scikit Learn,K Fold,我已经使用以下代码将列指定给其特定的k折叠: from sklearn.model_selection import StratifiedKFold, train_test_split # Stratified K-fold cross-validation df['kfold'] = -1 df = df.sample(frac=1).reset_index(drop=True) y = df.quality kf = StratifiedKFold(n_splits=5) for f,
from sklearn.model_selection import StratifiedKFold, train_test_split
# Stratified K-fold cross-validation
df['kfold'] = -1
df = df.sample(frac=1).reset_index(drop=True)
y = df.quality
kf = StratifiedKFold(n_splits=5)
for f, (t_,v_) in enumerate(kf.split(X=df, y=y)):
df.loc[v_, 'kfold'] = f
现在,数据帧如预期的那样:
alcohol volatile acidity sulphates citric acid quality kfold
1499 10.9 0.36 0.73 0.39 6 4
1500 9.5 0.65 0.55 0.10 5 4
1501 13.4 0.44 0.66 0.68 6 4
1502 9.6 0.59 0.67 0.24 5 4
1503 13.0 0.53 0.77 0.79 5 4
但是如何将其拆分为训练和测试拆分?将数据帧拆分为多个折叠,并返回训练/测试索引。
每个折叠将有一部分用于测试(尺寸len(数据)/n),其余部分用于培训
在for循环中,您可以访问列车和测试集,如下所示:
for f, (t_,v_) in enumerate(kf.split(X=df, y=y)):
df_train = df.loc[t_]
df_test = df.loc[v_]
正如您可以看到的那样,您添加的kfold
列标记了测试数据。其余数据应用于此折叠的培训。即,对于kfold==1
,训练数据是所有其他数据(kfold!=1
)