当前位置: 首页 > 面试题库 >

在Scikit学习中将Smote与Gridsearchcv一起使用

尚嘉庆
2023-03-14
问题内容

我正在处理不平衡的数据集,并希望使用scikit的gridsearchcv进行网格搜索以调整模型的参数。为了对数据进行超采样,我想使用SMOTE,我知道我可以将其作为管道的一个阶段,并将其传递给gridsearchcv。我担心的是,我认为训练和验证折纸都将使用击打,这不是您应该做的。验证集不应过采样。我是否正确,整个管道将应用于两个数据集拆分?如果是的话,我该如何扭转呢?在此先多谢


问题答案:

是的,可以做到,但是可以使用Pipeline。

您会看到,imblearn有自己的管道来正确处理采样器。我在一个类似的问题中对此进行了描述。

在对象predict()imblearn.Pipeline调用时,它将跳过采样方法,并保留将要传递给下一个转换器的数据。您可以通过在此处查看源代码来确认这一点]

        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)

根据需要填写详细信息,管道将处理其余的工作。



 类似资料:
  • 我正在使用scikit-learn 0.14的GridSearchCV,但总是得到以下警告: /Library/Frameworks/epd 64 . framework/Versions/7.2/lib/python 2.7/site-packages/sk learn/grid _ search . py:706:deprecation warning:忽略GridSearchCV的附加参数!

  • 从sklearn加载流行数字数据集。数据集模块,并将其分配给可变数字。 分割数字。将数据分为两组,分别命名为X_train和X_test。还有,分割数字。目标分为两组Y_训练和Y_测试。 提示:使用sklearn中的训练测试分割方法。模型选择;将随机_状态设置为30;并进行分层抽样。使用默认参数,从X_序列集和Y_序列标签构建SVM分类器。将模型命名为svm_clf。 在测试数据集上评估模型的准确

  • 问题内容: 是否可以在没有交叉验证的情况下使用GridSearchCV?我正在尝试通过网格搜索优化KMeans聚类中的聚类数量,因此我不需要或想要交叉验证。 该文档也使我感到困惑,因为在fit()方法下,它有一个用于非监督学习的选项(例如,将None用于非监督学习)。但是,如果您想进行无监督学习,则需要在没有交叉验证的情况下进行学习,而且似乎没有摆脱交叉验证的选择。 问题答案: 经过大量搜索,我能

  • 我希望在PostgreSQL plpython3u语言函数中使用Scikit学习Python机器学习库。最简单的方法来安装Scikit学习(连同先决条件NumPy和SciPy)是安装Anaconda。 Anaconda附带了内置的Python 3.5。但是,PostgreSQL 9.5 EnterpriseDB安装程序安装的PostgreSQL需要Python 3.3,并且不使用Python 3.

  • 问题内容: 我正在使用scickit-learn来调整模型的超参数。我正在使用管道将预处理器与估算器链接在一起。我的问题的一个简单版本如下所示: 在我的情况下,预处理(在玩具示例中为StandardScale())非常耗时,并且我没有调整其任何参数。 因此,当我执行示例时,StandardScaler被执行12次。2个适合/预测 2个简历 3个参数。但是,每次对参数C的不同值执行StandardS

  • Scikit-learn 套件的安装 目前Scikit-learn同时支持Python 2及 3,安装的方式也非常多种。对于初学者,最建议的方式是直接下载 Anaconda Python (https://www.continuum.io/downloads)。同时支持 Windows / OSX/ Linux 等作业系统。相关数据分析套件如Scipy, Numpy, 及图形绘制库 matplot