Python scikits SVM网格搜索和分类

时间:2012-03-10 16:03:24

标签: python machine-learning scikits scikit-learn

我是scikits和svm的初学者,我想查看几个问题。我有700个项目和35个功能的样本,我有3个班级。我有一个数组X,我的样本和功能使用“preprocessing.scale(X)”进行缩放。 第一步是找到合适的SVM参数,我使用嵌套交叉验证的网格搜索(参见http://scikit-learn.org/stable/auto_examples/grid_search_digits.html#)。 我正在“网格搜索”中使用我的所有样本(X)。在网格搜索期间,数据被分成训练和测试(使用StratifiedKFold)。 当我获得SVM参数时,我执行分类,将数据划分为训练和测试。 在实际分类过程中,我将在网格搜索中使用相同的数据吗?

2 个答案:

答案 0 :(得分:4)

  

在真正的分类过程中,我将在网格搜索中使用相同的数据吗?

可以使用此数据来训练(拟合)分类器。交叉验证由StratifiedKFold完成,适用于在优化超参数(算法设置)时没有足够数据来保存验证集的情况。你也可以使用,如果你懒得制作验证集拆分器,并希望依赖scikit-learn的内置交叉验证:)

refit的{​​{1}}选项会在通过交叉验证找到最佳设置后重新训练完整训练集上的估算值。

然而,训练有素的分类器应用于您搜索或训练过的数据是毫无意义的,因为您已经拥有了标签。如果你想对分类器做一个正式的评估,你应该从一开始就拿出一个测试集,而不是再次触摸它,直到你完成了所有的网格搜索,验证和拟合。

答案 1 :(得分:0)

我不是机器学习专家,但就我所知,交叉验证的优势在于它过度拟合安全。因此,使用具有最佳性能的分类器(根据CV结果)进行最终评估应该是完全可以的。

但问题是,为什么您需要对已有标签的数据进行“实际分类”?什么是最终目标(SVM绩效评估或分类)?