首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >GridSearchCV与StackingClassifier相结合

GridSearchCV与StackingClassifier相结合
EN

Stack Overflow用户
提问于 2020-05-10 12:22:36
回答 2查看 3.9K关注 0票数 8

我想使用StackingClassifier组合一些分类器,然后使用GridSearchCV优化参数:

代码语言:javascript
复制
clf1 = RandomForestClassifier()
clf2 = LogisticRegression()
dt = DecisionTreeClassifier()
sclf = StackingClassifier(estimators=[clf1, clf2],final_estimator=dt)

params = {'randomforestclassifier__n_estimators': [10, 50],
          'logisticregression__C': [1,2,3]}

grid = GridSearchCV(estimator=sclf, param_grid=params, cv=5)

grid.fit(x, y)

但事实证明这是个错误:

代码语言:javascript
复制
'RandomForestClassifier' object has no attribute 'estimators_'

我用过n_estimators。为什么它警告我没有estimators_

通常,GridSearchCV应用于单个模型,因此我只需要在dict中写出单个模型的参数名称。

我指的是这个页面https://groups.google.com/d/topic/mlxtend/5GhZNwgmtSg,但它使用的是早期版本的参数。即使我更改了新的参数,它也不起作用。

顺便说一句,我在哪里可以了解这些对角线命名规则的细节?

EN

Stack Overflow用户

回答已采纳

发布于 2020-05-10 13:03:26

首先,estimators需要是一个包含元组中的模型的list,其中包含相应的指定的名称

代码语言:javascript
复制
estimators = [('model1', model()), # model() named model1 by myself
              ('model2', model2())] # model2() named model2 by myself

接下来,您需要使用出现在sclf.get_params()中的名称。而且,名称与bove estimators列表中给出的特定模型的名称相同。因此,对于您需要的model1参数,这里:

代码语言:javascript
复制
params = {'model1__n_estimators': [5,10]} # model1__SOME_PARAM 

工作玩具示例:

代码语言:javascript
复制
from sklearn.datasets import make_classification
from sklearn.ensemble import RandomForestClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import StackingClassifier
from sklearn.model_selection import GridSearchCV


X, y = make_classification(n_samples=1000, n_features=4, 
                            n_informative=2, n_redundant=0,
                            random_state=0, shuffle=False)


estimators = [('rf', RandomForestClassifier(n_estimators=10, random_state=42)),
              ('logreg', LogisticRegression())]

sclf = StackingClassifier(estimators= estimators , final_estimator=DecisionTreeClassifier())

params = {'rf__n_estimators': [5,10]}

grid = GridSearchCV(estimator=sclf, param_grid=params, cv=5)
grid.fit(X, y)
票数 9
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61711896

复制
相关文章

相似问题

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