在scikit学习管道中插入CalibratedClassifierCV的正确方法是什么?

Dav*_*cco 4 python pandas scikit-learn

我正在尝试在sklearn管道中添加校准步骤以获得校准的分类器,从而在输出中具有更可信赖的概率

到目前为止,我笨拙地尝试使用CalibratedClassifierCV沿着的行插入“校准”步骤(可重复性的愚蠢示例):

import sklearn.datasets
import pandas as pd
import numpy as np
from sklearn.pipeline import Pipeline
from sklearn.linear_model import SGDClassifier
from sklearn.feature_extraction.text import TfidfVectorizer

data = sklearn.datasets.fetch_20newsgroups(categories=['alt.atheism', 'sci.space'])
df = pd.DataFrame(data = np.c_[data['data'], data['target']])\
       .rename({0:'text', 1:'class'}, axis = 'columns')

my_pipeline = Pipeline([
    ('vectorizer', TfidfVectorizer()),
    ('classifier', SGDClassifier(loss='modified_huber')),
    ('calibrator', CalibratedClassifierCV(cv=5, method='isotonic'))
])

my_pipeline.fit(df['text'].values, df['class'].values)
Run Code Online (Sandbox Code Playgroud)

但这是行不通的(至少不是这样)。有人知道如何正确执行此操作的提示吗?

Ami*_*ory 7

SGDClassifier对象应纳入CalibratedClassifierCVbase_estimator参数中

您的代码应该看起来像这样:

my_pipeline = Pipeline([
    ('vectorizer', TfidfVectorizer()),
    ('classifier', CalibratedClassifierCV(base_estimator=SGDClassifier(loss='modified_huber'), cv=5, method='isotonic'))
])
Run Code Online (Sandbox Code Playgroud)

CalibratedClassifierCV 是一个元估算器。

  • 是的,可以通过 **classifier__base_estimator__loss: ['hinge','modified_huber']** 例如,其中 *classifier* 是管道中校准步骤的名称,*loss* 是您的基本估计器参数的名称想要网格搜索。 (8认同)
  • 是否可以在此管道上方添加gridsearchcv来搜索CalibratedClassifierCV的base_estimator的hyerparamters?我无法弄清params_grid的正确格式。希望你的帮助。 (3认同)
  • @ Feiyang.Chen我想知道同一件事,您设法找到解决方案了吗?一个简单的解决方案是首先使用“ GridSearchCV”步骤,找到“ best_estimator_”,然后在带有“ cv ='prefit”的“ CalibratedClassifierCV”中使用它。 (2认同)