'ExtraTreesClassifier' 对象没有属性 'estimators_' 错误
'ExtraTreesClassifier' object has no attribute 'estimators_' Error
我正在尝试将 sklearn.ensemble
中的 ExtraTreesClassifier()
拟合到示例数据集上,但它一直抛出此错误。我已经实现了其他 sklearn
模型,它们似乎 运行 很好。我在这里错过了什么?
from sklearn.ensemble import ExtraTreesClassifier
model = ExtraTreesClassifier()
model.fit(X,y)
调用ExtraTreesClassifier函数时报错
这是完整的错误。
这里 best 只是一个包含参数的字典,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, 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_'
当使用 .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
".
我正在尝试将 sklearn.ensemble
中的 ExtraTreesClassifier()
拟合到示例数据集上,但它一直抛出此错误。我已经实现了其他 sklearn
模型,它们似乎 运行 很好。我在这里错过了什么?
from sklearn.ensemble import ExtraTreesClassifier
model = ExtraTreesClassifier()
model.fit(X,y)
调用ExtraTreesClassifier函数时报错
这是完整的错误。 这里 best 只是一个包含参数的字典,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, 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_'
当使用 .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
".