首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >输油管道和击打得分下降

输油管道和击打得分下降
EN

Stack Overflow用户
提问于 2020-05-04 19:17:16
回答 1查看 182关注 0票数 1

我有管道:

代码语言:javascript
复制
np.random.seed(42)
tf.random.set_seed(42)

pipeline = Pipeline([
    ('smote', SMOTE()),
    ('under',RandomUnderSampler()),
    ('cl', KerasClassifier(build_fn=create_model, verbose=0))
])

param_grid_pipeline = {
    'smote__sampling_strategy':[.3],
    'smote__random_state':[42],
    'under__sampling_strategy':['auto'],
    'under__random_state':[42],   
    'cl__batch_size':[128],
    'cl__epochs':[20],
}

cv = StratifiedShuffleSplit(n_splits=40, test_size=0.2, random_state=42)
grid = GridSearchCV(estimator=pipeline, param_grid=param_grid_pipeline, cv=cv, scoring='f1', verbose=1, n_jobs=-1)
grid_result = grid.fit(X,y)
print("best_score_",grid_result.best_score_)

best_score_是0.9981313067607172

但是,如果我将重新取样排除在管道之外并在外部执行:

代码语言:javascript
复制
np.random.seed(42)
tf.random.set_seed(42)

over = SMOTE(sampling_strategy=0.3,random_state=42)
under = RandomUnderSampler(sampling_strategy='auto',random_state=42)
X,y = over.fit_resample(X,y)
X,y = under.fit_resample(X,y)

pipeline = Pipeline([
    ('cl', KerasClassifier(build_fn=create_model, verbose=0))
])

param_grid_pipeline = {
    'cl__batch_size':[128],
    'cl__epochs':[20],
}

cv = StratifiedShuffleSplit(n_splits=40, test_size=0.2, random_state=42)
grid = GridSearchCV(estimator=pipeline, param_grid=param_grid_pipeline, cv=cv, scoring='f1', verbose=1, n_jobs=-1)
grid_result = grid.fit(X,y)
print("best_score_",grid_result.best_score_)

我得到了(很多次)更好的结果: 0.9999888503305302

从管道外部再取样有什么区别?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-07 20:18:48

如果您在外部执行过采样和欠采样,则在整个数据集上执行它,然后将其拆分以进行交叉验证(这解释了较高的分数,因为在测试集中有关于您的培训集的“信息”)!如果将它包含在管道中,则只需要重新设置培训集(这实际上是正确的方法)。尝试手动进行交叉验证的混洗-拆分,然后只在训练集上重新采样,然后手动计算分数(因为在本例中实际上没有参数网格,这不是很多工作),那么您应该得到相同的结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61599901

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档