【发布时间】:2019-10-22 13:28:58
【问题描述】:
我正在处理一个二元分类问题。
我有 2 个索引列表 listTrain 和 listTest,它们是训练集的分区(实际测试集仅在以后使用)。我想使用与listTrain 关联的样本来估计参数和与listTest 关联的样本来评估交叉验证过程中的错误(保持集方法)。
但是,我无法找到将其传递给 sklearn GridSearchCV 的正确方法。
文档说我应该创建“一个可迭代的产生(训练,测试)拆分为索引数组”。但是,我不知道如何创建它。
grid_search = GridSearchCV(estimator = model, param_grid = param_grid,cv = custom_cv, n_jobs = -1, verbose = 0,scoring=errorType)
那么,我的问题是如何根据这些索引创建custom_cv 以用于此方法?
X和y分别是特征矩阵,y是标签向量。
示例:假设我只有一个超参数 alpha 属于集合 {1,2,3}。我想设置 alpha=1,使用与 listTrain 关联的样本估计模型的参数(例如回归的系数),并使用与 listTest 关联的样本评估错误。然后我重复 alpha=2 的过程,最后重复 alpha=3 的过程。然后我选择最小化错误的 alpha。
【问题讨论】:
-
您是否尝试 1) 使用多倍训练数据进行交叉验证,然后 2) 使用测试集测试泛化?因为据我了解您的问题,您希望在
listTrain上安装具有特定参数的分类器并使用listTest测试其性能。但这只是在同一个问题上测试不同的参数集,而不是真正的交叉验证? -
@JimmyOnThePage 假设我只有一个属于集合 {1,2,3} 的超参数 alpha。我想设置 alpha=1,使用与 listTrain 关联的样本估计模型的参数(例如回归的系数),并使用与 listTest 关联的样本评估错误。然后我重复 alpha=2 的过程,最后重复 alpha=3 的过程。然后我选择最小化错误的 alpha。
-
请记住,这个过程是错误的(从 ML 实践的角度来看)并且强烈不推荐;您的测试集应该只使用一次,用于您的 final 模型的性能评估,否则您实际上将它用作另一个 validation 集(不同于测试一)。请参阅Order between using validation, training and test sets 中的答案。
-
@desertnaut 对不起!我没有使用测试集。我使用索引集 listTrain 和 listTest 将训练集分为两部分。实际的测试集只会在以后使用。我这样做有两个原因:1)我的样本高度不平衡。 2)我的一些回归器出现过拟合,我想测试不同的方法。
标签: python-3.x scikit-learn cross-validation