30

我已经适合一个Pipeline对象RandomizedSearchCV

pipe_sgd = Pipeline([('scl', StandardScaler()),
                    ('clf', SGDClassifier(n_jobs=-1))])

param_dist_sgd = {'clf__loss': ['log'],
                 'clf__penalty': [None, 'l1', 'l2', 'elasticnet'],
                 'clf__alpha': np.linspace(0.15, 0.35),
                 'clf__n_iter': [3, 5, 7]}

sgd_randomized_pipe = RandomizedSearchCV(estimator = pipe_sgd, 
                                         param_distributions=param_dist_sgd, 
                                         cv=3, n_iter=30, n_jobs=-1)

sgd_randomized_pipe.fit(X_train, y_train)

我想访问的coef_属性,best_estimator_但我无法做到这一点。我尝试使用coef_下面的代码进行访问。

sgd_randomized_pipe.best_estimator_.coef_

但是我得到以下 AttributeError ...

AttributeError:“管道”对象没有属性“coef_”

scikit-learn 文档说这coef_是 的一个属性SGDClassifier,它是 my 的类base_estimator_

我究竟做错了什么?

4

3 回答 3

42

named_steps在使用dict创建管道时,您始终可以使用分配给它们的名称。

scaler = sgd_randomized_pipe.best_estimator_.named_steps['scl']
classifier = sgd_randomized_pipe.best_estimator_.named_steps['clf']

然后访问对应拟合估计器可用的所有属性,如 等coef_intercept_

这是文档中指定的管道公开的正式属性:

命名步骤:字典

通过用户名访问任何步骤参数的只读属性。键是步骤名称,值是步骤参数。

于 2017-05-09T02:11:15.527 回答
9

我认为这应该有效:

sgd_randomized_pipe.named_steps['clf'].coef_
于 2018-10-21T01:31:32.683 回答
3

我发现一种方法是通过使用steps属性进行链接索引...

sgd_randomized_pipe.best_estimator_.steps[1][1].coef_

这是最佳做法,还是有其他方法?

于 2017-05-08T20:08:58.830 回答