簡體   English   中英

在 Scikit-learn 中使用 Smote 和 Gridsearchcv

[英]Using Smote with Gridsearchcv in Scikit-learn

我正在處理一個不平衡的數據集,並希望使用 scikit 的 gridsearchcv 進行網格搜索以調整我的模型參數。 為了對數據進行過采樣,我想使用 SMOTE,而且我知道我可以將其作為管道的一個階段包含在內並將其傳遞給 gridsearchcv。 我擔心的是,我認為 smote 將同時應用於訓練和驗證折疊,這不是您應該做的。 驗證集不應過采樣。 整個管道將應用於兩個數據集拆分是否正確? 如果是,我該如何扭轉這種局面? 非常感謝提前

是的,它可以做到,但使用imblearn Pipeline

你看, imblearn 有自己的管道來正確處理采樣器。 我在一個類似的問題中描述了這一點

當在imblearn.Pipeline對象上調用predict()時,它將跳過采樣方法並將數據保持原樣傳遞給下一個轉換器。 您可以通過查看此處源代碼來確認:

        if hasattr(transform, "fit_sample"):
            pass
        else:
            Xt = transform.transform(Xt)

因此,為了使其正常工作,您需要以下內容:

from imblearn.pipeline import Pipeline
model = Pipeline([
        ('sampling', SMOTE()),
        ('classification', LogisticRegression())
    ])

grid = GridSearchCV(model, params, ...)
grid.fit(X, y)

根據需要填寫詳細信息,管道將負責其余部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM