交叉验证和模型选择
Posted
技术标签:
【中文标题】交叉验证和模型选择【英文标题】:Cross validation and model selection 【发布时间】:2016-05-26 12:12:57 【问题描述】:我正在使用sklearn
进行 SVM 训练。我正在使用交叉验证来评估估计器并避免过度拟合模型。
我将数据分成两部分。训练数据和测试数据。代码如下:
import numpy as np
from sklearn import cross_validation
from sklearn import datasets
from sklearn import svm
X_train, X_test, y_train, y_test = cross_validation.train_test_split(
iris.data, iris.target, test_size=0.4, random_state=0
)
clf = svm.SVC(kernel='linear', C=1)
scores = cross_validation.cross_val_score(clf, X_train, y_train, cv=5)
print scores
现在我需要在 X_test 上评估估算器 clf。
clf.score(X_test, y_test)
在这里,我收到一条错误消息,说 没有使用 fit() 拟合模型,但通常,在 cross_val_score
函数中拟合模型?有什么问题?
【问题讨论】:
在进行交叉验证时,您将在X_train
、y_train
上训练模型,然后在 X_test
、y_test
上评估其性能。如果不先训练分类器,就评估它的性能是没有意义的。
@ali_m,cross_validation.cross_val_score() 有什么作用?通常它首先训练模式。我很清楚你在说什么。就我而言,我需要一种提前停止以避免过度拟合。我将数据集分成 3 个部分,例如训练、有效和测试。我在火车部分训练模型,然后在有效部分进行调整。一旦我获得了合理的训练和有效的错误。我在测试部分测试它。就是这样!
【参考方案1】:
cross_val_score
基本上是 sklearn cross-validation iterators 的便捷包装器。你给它一个分类器和你的整个(训练+验证)数据集,它通过将你的数据分成随机训练/验证集、拟合训练集并计算验证集的分数来自动执行一轮或多轮交叉验证.有关示例和更多说明,请参阅文档 here。
clf.score(X_test, y_test)
引发异常的原因是因为cross_val_score
在估计器的副本 上执行拟合,而不是原始(参见源代码中clone(estimator)
的使用@ 987654324@)。因此,clf
在函数调用之外保持不变,因此在您调用 clf.fit
时未正确初始化。
【讨论】:
谢谢,我明白了。但是在这种情况下,如果这个函数在使用交叉验证评估后没有返回“好的”估计器,那么它的效用是什么?它的用途是节省时间做交叉验证,然后我们不给出拟合模型!但是,如果有办法克隆估算器,那将很重要并且有意义。 交叉验证的目的是估计你的分类器在看不见的例子上的表现。如果你直接在你的训练集上评估它的表现,那么你往往会得到一个不切实际的好分数。 就其本身而言,交叉验证不会做任何事情来使您的分类器表现更好。但是,当您优化学习策略时,您通常会使用交叉验证分数作为您的性能指标 - 例如通过调整分类器的元参数(例如在 SVM 的情况下C
和 gamma
) .
好的。我同意你的看法。但是,如果此函数适用于分类器的副本,如何在交叉验证后返回这些最佳参数?另一方面,我知道验证集用于早期停止策略以在尝试最小验证错误时停止训练阶段。
我以其他方式提出我的问题。假设我有两个分布相同但维度不同的数据集。假设我需要对大数据集进行预训练,然后在第二个更小的数据集上调整生成的分类器的参数。
返回任何参数都是没有意义的——正如我所说,交叉验证本身不会给你任何“最佳参数”——它给你的只是为您的分类器提供更真实的分数。如果您正在谈论调整元参数,那么您将执行以下操作:1)为您的元参数选择一个值,例如C
,2)将您的分类器拟合到一组随机的训练示例,3) ,在保留的测试示例上评估您的分类器,4) 对您要测试的 C
的每个值重复此过程,5) 选择为您提供最佳交叉验证分数的 C
值。跨度>
以上是关于交叉验证和模型选择的主要内容,如果未能解决你的问题,请参考以下文章
scikit-learn交叉验证及其用于參数选择模型选择特征选择的样例
R语言glmnet交叉验证选择(alphalambda)拟合最优elastic回归模型:弹性网络(elasticNet)模型选择最优的alpha值模型最优的lambda值,最终模型的拟合与评估