首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >'ExtraTreesClassifier‘对象没有属性'estimators_’错误

'ExtraTreesClassifier‘对象没有属性'estimators_’错误
EN

Stack Overflow用户
提问于 2020-09-04 13:50:06
回答 1查看 493关注 0票数 2

我试图在一个示例数据集中安装来自ExtraTreesClassifier()sklearn.ensemble,但是它总是抛出这个错误。我已经实现了其他sklearn模型,它们似乎运行得很好。我在这里错过了什么?

代码语言:javascript
复制
from sklearn.ensemble import ExtraTreesClassifier
model = ExtraTreesClassifier()
model.fit(X,y)

当我调用ExtraTreesClassifier函数时,会引发错误。

这是完全错误。这里最好的是一个包含参数的字典,df是我用来存储不同模型输出的数据。

代码语言:javascript
复制
   ---> 97       df.loc[ind,'model']=ExtraTreesClassifier(**best)
     98       df.loc[ind,'param']=str(best)
     99       Start=time.time()

/usr/local/lib/python3.6/dist-packages/pandas/core/indexing.py in __setitem__(self, key, value)
    669             key = com.apply_if_callable(key, self.obj)
    670         indexer = self._get_setitem_indexer(key)
--> 671         self._setitem_with_indexer(indexer, value)
    672 
    673     def _validate_key(self, key, axis: int):

/usr/local/lib/python3.6/dist-packages/pandas/core/indexing.py in _setitem_with_indexer(self, indexer, value)
    848                             indexer, self.obj.axes
    849                         )
--> 850                         self._setitem_with_indexer(new_indexer, value)
    851 
    852                         return self.obj

/usr/local/lib/python3.6/dist-packages/pandas/core/indexing.py in _setitem_with_indexer(self, indexer, value)
   1008                 # we have an equal len list/ndarray
   1009                 elif _can_do_equal_len(
-> 1010                     labels, value, plane_indexer, lplane_indexer, self.obj
   1011                 ):
   1012                     setter(labels[0], value)

/usr/local/lib/python3.6/dist-packages/pandas/core/indexing.py in _can_do_equal_len(labels, value, plane_indexer, lplane_indexer, obj)
   2474         True if we have an equal len settable.
   2475     """
-> 2476     if not len(labels) == 1 or not np.iterable(value) or is_scalar(plane_indexer[0]):
   2477         return False
   2478 

/usr/local/lib/python3.6/dist-packages/numpy/lib/function_base.py in iterable(y)
    281     """
    282     try:
--> 283         iter(y)
    284     except TypeError:
    285         return False

/usr/local/lib/python3.6/dist-packages/sklearn/ensemble/_base.py in __iter__(self)
    171     def __iter__(self):
    172         """Return iterator over estimators in the ensemble."""
--> 173         return iter(self.estimators_)
    174 
    175 

AttributeError: 'ExtraTreesClassifier' object has no attribute 'estimators_'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-05 15:12:16

当使用.loc设置dataframe元素时,熊猫尝试解压缩一个可迭代,认为您希望设置一个以上的数据记录条目,每个元素设置一个可迭代项。您可以在回溯中看到,熊猫测试您的ExtraTreesClassifier是否是可迭代的:

代码语言:javascript
复制
    282     try:
--> 283         iter(y)
    284     except TypeError:
    285         return False

不幸的是,ExtraTreesClassifier 是可迭代的,包含了它的每一棵树,当然只有在它被安装后才能工作,因此出现了错误。

首先,我建议将模型对象存储在dataframe中,这有点违背了dataframe的精神,您应该将模型对象保存在另一个地方。也许在帧中保存模型名和最佳参数就足够了?

无论如何,如果您想保存模型对象本身,那就是“如何将dataframe条目设置为一个可迭代的”,这是以前曾经问过的,例如Create and set an element of a Pandas DataFrame to a list和我个人都喜欢the answer "use at"

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63742494

复制
相关文章

相似问题

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