首页 文章

在Kfold sklearn中训练子集

提问于
浏览
0

有没有办法在sklearn实施的10个Kfolds中的8个中使用列车子集来训练模型?

我想将我的数据分成三个子集:训练,验证和测试(这可以通过使用 train_test_split 两次来完成,我认为......) .

训练集用于拟合模型,验证集用于调整参数,测试集用于评估最终模型的泛化误差 .

但是我想知道是否有一种方法只需要训练10次折叠中的8次并得到错误/准确度,在1倍上验证它并最终在最后一次测试中测试它也会得到错误/准确性 .

请参阅下面的我的想法:

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1)
X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.2, random_state=1)
clf = tree.DecisionTreeClassifier(criterion = "entropy", max_depth = 3)
kf = KFold(n_splits=10, shuffle = False, random_state = 0) #define number of splits
kf.get_n_splits(X) #to check how many splits will be done.
for train, test in kf.split(X_train, y_train):

2 回答

  • 0

    从您的问题来看,我理解的是您想要省略一个或多个子集 . 在这种情况下,您可以使用Leave One Out (LOO)Leave P Out (LPO)保留一个或多个数据子集 .

  • 0

    你应该改变这一行

    X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.2, random_state=1)
    

    X_test, X_val, y_test, y_val = train_test_split(X_test, y_test, test_size=0.5, random_state=1)
    

    准确地得到你想要的东西 . 第一个 train_test_split0.8,0.2 分裂为火车,测试 . 接下来是在 0.1,0.1 test中分割 0.2 ,val .

    然后:

    model.fit(X_train, y_train)
    print(sklearn.metrics.classification_report(model.predict(X_val, y_val)))
    

    根据此报告,您可以检查是否继续测试数据或更改超参数,以便在验证集上获得更高的分数 .

相关问题