PCA 数据和 SVM 训练与 K-fold CV 和 Gridsearch

PCA on data and training with SVM with K-fold CV and Gridsearch

我需要使用 LinearSVC 和 10 折交叉验证以及内部 2 折 Gridsearch 来训练 SVM 模型以优化 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, 5, 10],
}

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