使用Sklearn 进行K折交叉验证,代码咋写呢
开始正文
- 先导入需要的库
import pandas as pd
import numpy as np
from sklearn.model_selection import KFold
- 读入数据,可以用 pd.read_csv(‘路径名’)。这里就假设数据。假设有5个训练样本x,各对应着一个标签y.
下面代码的y_train是numpy.ndarray 类型,为了使用列表进行索引方便。
y_train = np.array([1,0,1,1,0])
X_train = pd.DataFrame([[1,2],[3,4],[5,6],[7,8],[9,10]])
- K折交叉验证,设置 K = 5 假设5折吧,所以例子中每次有4个样本用于训练,1个样本用于验证。
K = 5
folds = KFold(n_splits= K, shuffle = True, random_state= 0)
for trn_idx, val_idx in folds.split(X_train,y_train):
train_df, train_label = X_train.iloc[trn_idx,:],y_train[trn_idx]
valid_df, valid_label = X_train.iloc[val_idx,:],y_train[val_idx]
接着在这个for循环里就可以将训练集和验证集分别用于训练和验证了
上边的trn_idx是存放四个训练样本的索引的列表,val_idx是作为验证集的那一个样本的索引。
我觉得易错点在于 train_df, train_label = X_train.iloc[trn_idx,:],y_train[trn_idx] 这句。X_train是DataFrame类型,所以可以使用iloc索引,行数传入了 trn_idx 这样一个列表索引没有问题。(菜到没脾气)
y_train注意要给它转化为numpy.ndarray 类型类型,这样才能使用列表进行索引!!
下面插播废话
工位周围其他组的人在讨论发论文… 写个记录来自娱自乐一下,嘿嘿 不管现在处于哪个阶段,一点一点地总能走到开悟之坡上去…
|