使用 K-fold CV 和 Gridsearch 使用 SVM 进行数据和训练的 PCA

问题描述

我需要使用 LinearSVC 训练 SVM 模型,并使用内部 2 倍 Gridsearch 进行 10 倍交叉验证以优化 gamma 和 C。但我还必须对我的数据应用 PCA 以减小其大小。 我应该在 CV 和模型训练发生的循环之前还是在循环内应用 PCA? 在后一种情况下,我会为每个循环使用不同数量的主成分,但这有什么缺点吗?

解决方法

最好的解决方案是创建一个 sklearn Pipeline 并将两个步骤(PCALinarSvc 放在其中)。这将创建一个实现 fit()predict() 并且可以在 GridSearchCV 中使用的对象。

from sklearn.svm import LinearSVC
from sklearn.pipeline import Pipeline
from sklearn.decomposition import PCA
from sklearn.model_selection import GridSearchCV

pipe = Pipeline([('pca',PCA()),('clf',LinearSVC())])
params = {
    'pca__n_components' : [2,5,10,15],'clf__C' : [0.5,1,10],}

gs = GridSearchCV(estimator=pipe,param_grid=params)
gs.fit(X_train,y_train)