有没有办法使用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):
答案 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_split
在0.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)))
根据此报告,您可以检查是否继续测试数据或更改超参数,以便在验证集上获得更高的分数。