【问题标题】:GridSearchCV - which data should be used?GridSearchCV - 应该使用哪些数据?
【发布时间】:2021-02-22 06:53:52
【问题描述】:

我目前正在处理训练集中大约 2000 个数据点的二元分类问题,我想知道是否应该将整个训练集用于网格搜索,或者是否应该先进行拆分以生成验证数据。我有以下 2 个变体可供选择。第一个是带有train/val的拆分,第二个是没有拆分(整个训练集上的GridSearchCV)

1.变体

训练/验证拆分

X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, stratify=y, random_state=rs)

SVC 上的 GridSearchCV (仅使用 x_train 和 y_train)

skf = StratifiedKFold(n_splits=splits, shuffle=True, random_state=rs)

params = {"C": [0.12, 0.13, 0.14, 0.15]}
        
clf = GridSearchCV(SVC(random_state=rs), params, cv=skf, n_jobs=-1, scoring=monetary_score)
clf.fit(X_train, y_train)

print(grid.best_params_)
print(grid.best_score_, "\n")
print(grid.best_estimator_)

使用验证集

final_clf = clf.best_estimator_

y_pred = final_clf.predict(X_val)
cm = confusion_matrix(y_val, y_pred)
print(cm)

2。变体

SVC 上的 GridSearchCV (使用整个 x 和 y)

skf = StratifiedKFold(n_splits=splits, shuffle=True, random_state=rs)

params = {"C": [0.12, 0.13, 0.14, 0.15]}
        
clf = GridSearchCV(SVC(random_state=rs), params, cv=skf, n_jobs=-1, scoring=monetary_score)
clf.fit(X, y)

print(grid.best_params_)
print(grid.best_score_, "\n")
print(grid.best_estimator_)

【问题讨论】:

    标签: python training-data grid-search gridsearchcv train-test-split


    【解决方案1】:

    您可以直接应用网格搜索 cv,而无需像在变体 2 中那样将数据拆分为训练和测试拆分。 原因是您的数据集仅包含 2000 个数据点。如果在这种情况下你有一个庞大的数据集,你可能不得不将数据集分成 90% 的训练和 10% 的测试。 但现在您可以继续使用变体 2

    【讨论】:

      猜你喜欢
      • 2021-11-20
      • 2012-02-10
      • 1970-01-01
      • 2019-05-14
      • 2011-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多