简单来说,交叉验证和网格搜索有什么区别?网格搜索是如何工作的?我应该先做交叉验证还是先做网格搜索?
(gamma, C)
:(1, 1), (0.1, 1), (1, 10), (0.1, 10)
。它是一个网格,因为它就像gamma
的[1, 0.1]
和C
的[1, 10]
之积。网格搜索基本上会为每个这四个(gamma, C)
值对训练一个SVM,然后使用交叉验证进行评估,并选择表现最佳的那个。SVC(C=1, kernel='poly')
。X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.5,random_state = 0
对数据集进行拆分,然后在网格搜索中有clf = GridSearchCV(SVC(C = 1),tuned_parameters,cv = 5,scoring = score)
这是否意味着第一步将一个1000个训练集分成500个训练和500个测试对象,然后网格搜索将这500个对象分成“cv = 5” 5折交叉验证?因此,这500个对象被分成250和250,或400和100等等! - Linda交叉验证是指简单地将测试和训练数据分开,并使用测试数据验证训练结果。我知道两种交叉验证技术。
第一种是测试/训练交叉验证。将数据分割为测试和训练。
第二种是k折交叉验证,将数据分成k个容器,使用每个容器作为测试数据,其余数据作为训练数据并针对测试数据进行验证。重复这个过程k次,获取平均性能。k折交叉验证特别适用于小数据集,因为它最大化了测试和训练数据。
网格搜索是系统地遍历多个参数调整组合,对每个参数组合进行交叉验证并确定哪个组合提供了最佳性能。您可以通过微调参数来尝试许多组合。
在进行(监督式)机器学习实验时,通常会将可用数据的一部分作为测试集X_test
,y_test
(您可以决定多少,大多数情况下在20-30%之间)。在交叉验证中,您使用不同的训练集运行几次:
因此,在这种情况下,您运行5倍交叉验证(5次运行),并且在每个Fold中,您都会选择一个不同的训练集(
X_train
,y_train
)。测试数据始终是保留的。这用于避免过度拟合,即避免模型针对一个特定问题进行训练,但当新数据到达时,它将无法给出良好的结果。
最佳参数可以通过网格搜索技术确定。大多数机器学习模型都有可能调整参数以找到最佳结果,例如在决策树中,您可以在参数列表中调整节点数。
通常情况下,如果您想开发一个好的机器学习模型,您会使用两种技术的组合:交叉验证和网格搜索。