'ExtraTreesClassifier'对象没有属性'estimators_'错误

问题描述

我正在尝试将ExtraTreesClassifier()中的sklearn.ensemble拟合到样本数据集上,但它总是抛出此错误。我已经实现了其他sklearn模型,它们似乎运行良好。我在这里想念什么?

from sklearn.ensemble import ExtraTreesClassifier
model = ExtraTreesClassifier()
model.fit(X,y)

当我调用ExtraTreesClassifier函数时抛出错误

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

   ---> 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,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,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,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_'

解决方法

当使用.loc设置数据帧的元素时,pandas试图解压缩一个可迭代对象,以为您要设置该数据帧的多个条目,每个可迭代元素设置一个。您可以在回溯中看到pandas测试了您的ExtraTreesClassifier是否是可迭代的:

    282     try:
--> 283         iter(y)
    284     except TypeError:
    285         return False

不幸的是,ExtraTreesClassifier 可迭代的,包含了它的每棵树,尽管它当然只有在装配好之后才能工作,因此会出错。


我首先建议将模型对象存储在数据框中有点违背数据框的精神,而建议您将模型对象保存在其他位置。也许在框架中保存模型名称和最佳参数就足够了?

无论如何,如果要保存模型对象本身,则取决于“如何将数据框条目设置为可迭代对象”,例如, Create and set an element of a Pandas DataFrame to a list 我个人喜欢the answer "use at"

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...