0

我正在使用不平衡数据通过 scikit-learn 执行分类并提高模型的准确性,我使用 SMOTE 技术创建了更多合成数据。我想知道使用 GridSearch 实现超参数优化的最佳时机。我应该只使用原始数据还是原始+合成数据?

4

1 回答 1

1

您是在谈论如何将 SMOTE 之类的过采样方法与 sklearn 的 GridSearchCV 一起使用吗?我做这个假设是因为你在帖子上有一个 scikit-learn 标签。

如果是这样,您可以使用 Pipeline 对象将过采样的 SMOTE 数据传递到 GridSearchCV。如果您希望通过 GridSearchCV 使用交叉验证方案拟合模型,sklearn 将自动处理正确拟合/转换每个折叠。请在此处查看此答案,该答案询问如何不将 SMOTE 应用于验证折叠:

在 Scikit-learn 中使用 Smote 和 Gridsearchcv

imblearn 包有一个类似 sklearn 的管道专门用来处理这个问题,正如上面的链接所指出的:https ://imbalanced-learn.readthedocs.io/en/stable/generated/imblearn.pipeline.Pipeline.html

如果没有看到您的代码示例和您正在尝试做的事情,很难知道,但这可能会有所帮助:

from imblearn.pipeline import Pipeline
from imblearn.over_sampling import SMOTE
from sklearn.ensemble import RandomForestClassifier
from sklearn.preprocessing import StandardScaler

pipe = Pipeline(
    [('scaler', StandardScaler(copy=True),
    ('resample', SMOTE()),
    ('model', RandomForestClassifier()]
)

kf = StratifiedKFold(n_splits=5, shuffle=True)


p_grid = dict(model__n_estimators=[50,100,200])
grid_search = GridSearchCV(
    estimator=pipe, param_grid=p_grid, cv=kf, refit=True
)
grid_search.fit(X_train, y_train)

# Adding below in as could be helpful to know how to get fitted scaler if used
# best = grid_search.best_estimator_
# X_val_scaled = best['scaler'].transform(X_val)
# grid_search.predict(X_val_scaled)
于 2019-10-30T17:48:19.223 回答