在Sklearn Pipeline中使用VotingClassifier

我想对几个Pipeline分类器应用投票分类器,并在网格搜索中调整参数。以下是最小示例,但它给我返回了一个错误。我需要以不同的方式来做这件事吗?

from sklearn.ensemble import RandomForestClassifierfrom sklearn.ensemble import AdaBoostClassifierfrom sklearn.ensemble import VotingClassifierp1 = Pipeline([['clf1', RandomForestClassifier()]])p2 = Pipeline([['clf2', AdaBoostClassifier()]])p3 = Pipeline([['clf3', VotingClassifier(estimators=(p1, p2))]])p3.get_params()

错误:

TypeError: cannot convert dictionary update sequence element #0 to a sequence

回答:

当您为VotingClassifier指定估算器时,您需要为每个估算器指定一个名称:

from sklearn.pipeline import Pipelinefrom sklearn.ensemble import RandomForestClassifierfrom sklearn.ensemble import AdaBoostClassifierfrom sklearn.ensemble import VotingClassifierp1 = Pipeline([['clf1', RandomForestClassifier()]])p2 = Pipeline([['clf2', AdaBoostClassifier()]])p3 = Pipeline([['clf3', VotingClassifier(estimators=[("p1",p1), ("p2",p2)])]])p3.get_params()

这将输出:

{'clf3': VotingClassifier(estimators=[('p1', Pipeline(steps=[['clf1', RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',             max_depth=None, max_features='auto', max_leaf_nodes=None,             min_impurity_split=1e-07, min_samples_leaf=1,             min_samples_split=2, min_weight_fraction...SAMME.R', base_estimator=None,           learning_rate=1.0, n_estimators=50, random_state=None)]]))],          n_jobs=1, voting='hard', weights=None), 'clf3__estimators': [('p1',   Pipeline(steps=[['clf1', RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',               max_depth=None, max_features='auto', max_leaf_nodes=None,               min_impurity_split=1e-07, min_samples_leaf=1,               min_samples_split=2, min_weight_fraction_leaf=0.0,               n_estimators=10, n_jobs=1, oob_score=False, random_state=None,               verbose=0, warm_start=False)]])),  ('p2',   Pipeline(steps=[['clf2', AdaBoostClassifier(algorithm='SAMME.R', base_estimator=None,             learning_rate=1.0, n_estimators=50, random_state=None)]]))], 'clf3__n_jobs': 1, 'clf3__p1': Pipeline(steps=[['clf1', RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',             max_depth=None, max_features='auto', max_leaf_nodes=None,             min_impurity_split=1e-07, min_samples_leaf=1,             min_samples_split=2, min_weight_fraction_leaf=0.0,             n_estimators=10, n_jobs=1, oob_score=False, random_state=None,             verbose=0, warm_start=False)]]), 'clf3__p1__clf1': RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',             max_depth=None, max_features='auto', max_leaf_nodes=None,             min_impurity_split=1e-07, min_samples_leaf=1,             min_samples_split=2, min_weight_fraction_leaf=0.0,             n_estimators=10, n_jobs=1, oob_score=False, random_state=None,             verbose=0, warm_start=False), 'clf3__p1__clf1__bootstrap': True, 'clf3__p1__clf1__class_weight': None, 'clf3__p1__clf1__criterion': 'gini', 'clf3__p1__clf1__max_depth': None, 'clf3__p1__clf1__max_features': 'auto', 'clf3__p1__clf1__max_leaf_nodes': None, 'clf3__p1__clf1__min_impurity_split': 1e-07, 'clf3__p1__clf1__min_samples_leaf': 1, 'clf3__p1__clf1__min_samples_split': 2, 'clf3__p1__clf1__min_weight_fraction_leaf': 0.0, 'clf3__p1__clf1__n_estimators': 10, 'clf3__p1__clf1__n_jobs': 1, 'clf3__p1__clf1__oob_score': False, 'clf3__p1__clf1__random_state': None, 'clf3__p1__clf1__verbose': 0, 'clf3__p1__clf1__warm_start': False, 'clf3__p1__steps': [['clf1',   RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',               max_depth=None, max_features='auto', max_leaf_nodes=None,               min_impurity_split=1e-07, min_samples_leaf=1,               min_samples_split=2, min_weight_fraction_leaf=0.0,               n_estimators=10, n_jobs=1, oob_score=False, random_state=None,               verbose=0, warm_start=False)]], 'clf3__p2': Pipeline(steps=[['clf2', AdaBoostClassifier(algorithm='SAMME.R', base_estimator=None,           learning_rate=1.0, n_estimators=50, random_state=None)]]), 'clf3__p2__clf2': AdaBoostClassifier(algorithm='SAMME.R', base_estimator=None,           learning_rate=1.0, n_estimators=50, random_state=None), 'clf3__p2__clf2__algorithm': 'SAMME.R', 'clf3__p2__clf2__base_estimator': None, 'clf3__p2__clf2__learning_rate': 1.0, 'clf3__p2__clf2__n_estimators': 50, 'clf3__p2__clf2__random_state': None, 'clf3__p2__steps': [['clf2',   AdaBoostClassifier(algorithm='SAMME.R', base_estimator=None,             learning_rate=1.0, n_estimators=50, random_state=None)]], 'clf3__voting': 'hard', 'clf3__weights': None, 'steps': [['clf3',   VotingClassifier(estimators=[('p1', Pipeline(steps=[['clf1', RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',               max_depth=None, max_features='auto', max_leaf_nodes=None,               min_impurity_split=1e-07, min_samples_leaf=1,               min_samples_split=2, min_weight_fraction...SAMME.R', base_estimator=None,             learning_rate=1.0, n_estimators=50, random_state=None)]]))],            n_jobs=1, voting='hard', weights=None)]]}

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注