在Kfold sklearn中训练子集

时间:2018-03-06 13:05:18

标签: python scikit-learn

有没有办法使用sklearn已实施的kf = KFold(n_splits=10)中的8个Kfolds中的8个来训练模型?

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

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

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

请参阅下面的我的想法:

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 :(得分:0)

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

答案 1 :(得分: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.2测试中分割0.1,0.1,val。

然后:

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

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

相关问题