【问题标题】:PCA on data and training with SVM with K-fold CV and Gridsearch使用带有 K-fold CV 和 Gridsearch 的 SVM 进行数据和训练的 PCA
【发布时间】:2021-09-16 02:07:54
【问题描述】:

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

【问题讨论】:

  • 创建一个执行GridSearch{Pipeline[PCA->SVM]}的管道
  • 我投票结束这个问题,因为它与 help center 中定义的编程无关,而是关于 ML 理论和/或方法 - 请参阅 machine-learning @ 中的介绍和注意事项987654322@.
  • 你最好把它贴在这里:datascience.stackexchange.com
  • 不清楚为什么您有内部 2 折网格搜索。对我来说,你应该 1/ 做 PCA,2/ 做 Gridsearch 优化和 3/ 10 倍交叉验证来获得度量指标,但是如果没有这个,gridsearch 可能会给出一个很好的结果。

标签: machine-learning scikit-learn svm pca


【解决方案1】:

最好的解决方案是创建一个 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)

【讨论】:

  • 所以,现在我得到了这个:pipe = Pipeline(steps=[("scaler", StandardScaler()), ("pca", PCA()), ("clf", SVC(kernel="rbf"))]) Cs = np.logspace(-4,4,5) gammas = np.logspace(-4,4,5) params = {"clf__gamma": SVM_model_gammas, "clf__C": SVM_model_Cs} X_train, X_test, y_train, y_test = train_test_split(X, y) gridsearch = GridSearchCV(clf, params, scoring="accuracy", iid=True, verbose=1) gridsearch.fit(X_train, y_train) 但它告诉我“估计器 SVC() 的参数 clf 无效”我为格式化道歉。
  • SVC 的'C' 参数必须严格为正。
猜你喜欢
  • 2019-11-09
  • 2019-06-02
  • 1970-01-01
  • 2021-08-29
  • 1970-01-01
  • 1970-01-01
  • 2014-02-21
  • 2017-06-21
  • 2019-01-23
相关资源
最近更新 更多