【发布时间】:2020-06-03 20:50:29
【问题描述】:
我想评估模型管道的性能。我没有在我正在评估管道的真实标签上训练我的模型,因此没有必要进行交叉验证方案。但是,我仍然想使用 sklearn 中提供的网格搜索功能。
是否可以在不拆分数据的情况下使用sklearn.model_selection.GridSearchCV?换句话说,我想运行 Grid Search 并获得传入管道的完整数据集的分数。
这是一个简单的例子:
我可能希望为 KMeans 选择最佳的 k。实际上,我将在 许多 数据集上使用 KMeans,这些数据集在某种意义上是相似的。碰巧我有一些这样的数据集的真实标签,我称之为“训练”数据。因此,我决定不使用BIC 之类的东西,而是简单地为我的训练数据选择最佳的k,并将该k 用于未来的数据集。搜索k 的可能值是一种网格搜索。 KMeans 在 sklearn 库中可用,因此我可以非常轻松地在此模型上定义网格搜索。顺便说一句,KMeans 接受一个“空”y 值,它只是通过并可以在 GridSearchCV 记分器中使用。但是,在这里进行交叉验证是没有意义的,因为我个人的 kmeans 模型从来没有看到地面实况标签,因此无法过拟合。
需要明确的是,上面的示例只是一个人为的示例,目的是为那些担心我可能会滥用此功能的人证明这种事情的可能用例是合理的。上例我感兴趣的解决方案是如何不拆分GridSearchCV中的数据。
是否可以在不拆分数据的情况下使用sklearn.model_selection.GridSearchCV?
【问题讨论】:
-
你做
GridSearchCV等于做CV。当然,从技术角度来看,您可以在没有train/test拆分的情况下这样做。但这会使 ML 中普遍接受的train/validate/test哲学无效。 -
@SergeyBushmanov 的训练/验证/测试理念假设一个人正在根据真实标签(可能正在测试的标签相同)训练您的数据。我的训练管道不使用地面实况标签。因此,交叉验证没有任何作用,并且不可能过度拟合地面实况标签。
-
“当然,从技术角度来看,您可以在没有训练/测试拆分的情况下这样做。”当然如此。但是,我想知道 sklearn 中现有的 gridsearch 助手是否可以帮助解决这个问题?
-
理论上你可以做到
gs=GridSearchCV(scoring=None, cv=None); gs.fit(X, None),但你应该更具体地说明你的问题是什么...... -
cv=None: "无,使用默认的 5 折交叉验证,"。这不会关闭交叉验证。
标签: python scikit-learn