嵌套交叉验证与整体模型验证

Wil*_*S89 2 python

我想在我的数据集上使用决策树模型来预测二元目标变量。

我已经清理了数据并将数据分为特征和目标。

然后我将这些数据分为测试和训练:

X_train, X_test, y_train, y_test = train_test_split( feature, target, test_size = 0.2, random_state = 100)
Run Code Online (Sandbox Code Playgroud)

我已将训练数据分为训练和验证:

X_train, X_test, y_train, y_val = train_test_split( feature, target, test_size = 0.2, random_state = 100)
Run Code Online (Sandbox Code Playgroud)

我已经将决策树模型拟合到训练数据中:

clft = tree.DecisionTreeClassifier()
Run Code Online (Sandbox Code Playgroud)

clft.fit(X_train, y_train)

我用这个模型来预测看不见的数据,即测试数据。这产生了模型的准确性。

predictTree=clft.predict(X_test)
print (metrics.accuracy_score(predictTree, y_test))
Run Code Online (Sandbox Code Playgroud)

然后,我想使用嵌套交叉验证来提高准确性并优化模型:

#set parameter grid
parameter_grid = {'max_depth': [1, 2, 3, 4, 5],
              'max_features': [1, 2, 3, 4]}
#specifiy cross validation
cross_validation = StratifiedKFold(n_splits=10)
cross_validation.get_n_splits(X_train, y_train)
#finds optimised parameters
grid_search = GridSearchCV(clft, param_grid = parameter_grid,
                      cv = cross_validation)
#best estimater is fitted for x_train and y_train
grid_search.fit(X_train, y_train)
#outer loop with cv 5
 scoresclt = model_selection.cross_val_score(grid_search, X_train, y_train, 
 cv=5)
Run Code Online (Sandbox Code Playgroud)

我不确定嵌套简历、在哪里使用验证集以及从这里去哪里。

据我所知,模型应该应用于测试集和验证集,以便为模型提供适当的准确性。

我的嵌套 Cv 使用网格搜索作为内部循环,将其放置在由 model_selection.cross_val_score 运行的外部循环中。它是否正确?

我应该将验证集放置在嵌套简历中的某个位置吗?或者我是否在验证集上使用 Nested Cv 中的模型?然后我是否将该精度计算为模型的真实精度?

先感谢您。

adr*_*rin 5

你快到了。这就是我要做的:

训练和测试分开

首先将输入拆分为traintest;但我也会考虑领域知识。尝试让你的test集合尽可能代表现实世界。例如,如果输入是手写数字,并且您知道谁写了哪些数字(即作家),则选择一些“作家”并将他们写的所有内容作为测试集。或者,如果您的数据来自不同的实验室或医院,请采用其中一些实验室以及他们提供的所有内容作为测试集。train您应该将输入拆分为和 的方式test实际上取决于域。随机选择样本通常不是最好的选择。

嵌套交叉验证和参数网格

现在您可以对数据执行您所做的操作train,即假设您GridSearchCV是您的模型(sklearn为它提供与通常模型相同的 API,因此您可以假装它是一个普通模型,就像您在代码中所做的那样),并且对该模型进行交叉验证以获得性能估计。接下来您要做的通常是调整网格搜索的参数网格,以获得更好的性能。例如,对于内核方法,您可以在搜索空间中包含或排除某些内核。

最终评价

一旦找到您满意的参数网格,您就可以将其应用于整个数据,并在您预留的train数据上评估生成的模型。test如果您希望结果尽可能有效,那么在数据上看到模型结果后切勿更改任何内容test。在看到结果之前先进行优化test