问题描述
#培训数据位于一个名为train.csv的CSV文件中 df = pd.read_csv(“ train.csv”)
#we create a new column called kfold and fill it with -1
df[“kfold”]=-1
#the next step is to randomize the rows of the data
df = df.sample(frac=1).reset_index(drop=True)
#initiate the kfold class from model_selection module
kf = model_selection.KFold(n_splits=5)
#fill the new kfold column
for fold,(trn_,val_) in enumerate(kf.split(X=df)):
df.loc[val_,‘kfold’] = fold
解决方法
对于给定的代码,kf。split(X = df)方法将'df'数据帧作为输入,并将df数据帧的索引拆分为训练集和测试集。 split()方法以元组(trn_,val_)的形式返回索引列表,一个索引用于训练集,另一个用于测试集。此外,split()方法被包装在enumerate()方法中,该方法充当可迭代split()的计数器,并返回枚举对象。由于split()方法将返回5折,因此枚举索引的范围为0-4,表示第i折。因此,“ enumerate(kf.split(X = df))”语句返回“ fold,(trn_,val _)”。
对于split()方法中返回的每个枚举对象,该对象均包含计数器索引(fold)以及训练索引和测试索引(trn_,val_)的元组,索引(fold)被指定为' kfold”列,其中行位于“ val_”索引列表中。
这意味着“ kfold”列的值是相应行/样本被指定为验证样本的第i折。例如,如果df.loc [0,'kfold'] = 2,则意味着当fold = 2时,将df数据帧的第0行样本分配为验证集的一部分。