首页 文章

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

提问于
浏览
2

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

我清理了数据并将数据拆分为功能和目标 .

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

X_train, X_test, y_train, y_test = train_test_split( feature, target, test_size = 0.2, random_state = 100)

我已将列车数据分成火车并验证:

X_train, X_test, y_train, y_val = train_test_split( feature, target, test_size = 0.2, random_state = 100)

我已经为火车数据拟合了决策树模型:

clft = tree.DecisionTreeClassifier()

clft.fit(X_train,y_train)

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

predictTree=clft.predict(X_test)
print (metrics.accuracy_score(predictTree, y_test))

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

#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)

我不确定嵌套的CV,在哪里使用验证集,以及从何处开始 .

据我所知,该模型应该应用于测试集和验证集,以给出模型的正确准确性 .

My Nested Cv使用网格搜索作为内部循环,它位于由model_selection.cross_val_score运行的外部循环中 . 它是否正确?

我应该将验证集放在嵌套CV中吗?或者我在验证集上使用嵌套Cv中的模型?然后,我是否将此精度计算为模型的真实准确度?

先感谢您 .

1 回答

  • 2

    你快到了 . 这是我要做的:

    Train and Test Split

    首先将输入拆分为 traintest ;但我也会考虑领域知识 . 尝试将 test 设置为现实世界的代表 . 例如,如果输入是手写数字并且您知道谁编写了哪些数字(即编写者),请选择一些"writers"并将他们提供的所有内容作为测试集 . 您应该将输入拆分为 traintest 的方式实际上取决于域 . 随机选择样品通常不是最佳选择 .

    Nested Cross Validation and Parameter Grid

    现在你可以对 train 数据做你做的事情,即假设你的 GridSearchCV 是你的模型( sklearn 为它提供与通常模型相同的API,因此你可以假装它在代码中完成了's a normal model, as you')并做了一个交叉验证该模型以获得性能估计 . 接下来你要做的就是调整网格搜索的参数网格,以获得更好的性能 . 例如,在内核方法的情况下,您可以在搜索空间中包含或排除某些内核 .

    Final Evaluation

    一旦你熟悉了,你就可以在你的整个 train 数据上应用它,并在你留出的 test 上评估结果模型 . 如果您希望结果尽可能有效,那么在 test 数据上看到模型的结果后,永远不要更改任何内容 . 在您看到 test 集上的结果之前进行优化 .

相关问题