gpt4 book ai didi

python - Scikit 随机森林分类器未评估为真

转载 作者:太空宇宙 更新时间:2023-11-03 14:03:10 25 4
gpt4 key购买 nike

奇怪的边缘行为。在此示例中,打印了 KNN exists,但未打印 Random Forest exists

在检查模型是否存在时发现它,当模型是随机森林时,if model: ... 没有被触发。

from sklearn.ensemble import RandomForestClassifier
from sklearn.neighbors import KNeighborsClassifier

if KNeighborsClassifier(4):
print('KNN exists')

if RandomForestClassifier(n_estimators=10, max_depth=4):
print('Random Forest exists')

为什么会这样?

最佳答案

啊哈!这是因为 Random 实现了 __len__:

In [1]: from sklearn.ensemble import RandomForestClassifier
...: from sklearn.neighbors import KNeighborsClassifier
...:

In [2]: knn = KNeighborsClassifier(4)

In [3]: forest = RandomForestClassifier(n_estimators=10, max_depth=4)

In [4]: knn.__bool__
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-4-ef1cfe16be77> in <module>()
----> 1 knn.__bool__

AttributeError: 'KNeighborsClassifier' object has no attribute '__bool__'

In [5]: knn.__len__
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-5-dc98bf8c50e0> in <module>()
----> 1 knn.__len__

AttributeError: 'KNeighborsClassifier' object has no attribute '__len__'

In [6]: forest.__bool__
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-6-fbdd7f01e843> in <module>()
----> 1 forest.__bool__

AttributeError: 'RandomForestClassifier' object has no attribute '__bool__'

In [7]: forest.__len__
Out[7]:
<bound method BaseEnsemble.__len__ of RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',
max_depth=4, 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)>

In [8]: len(forest)
Out[8]: 0

并且,根据 Python Data Model :

object.__bool__(self)

Called to implement truth value testing and the built-in operation bool(); should return False or True. When this method is not defined, __len__() is called, if it is defined, and the object is considered true if its result is nonzero. If a class defines neither __len__() nor __bool__(), all its instances are considered true.

正如人们可能预料的那样,RandomForestClassifierlen 是估计器的数量,但只有之后是 .fit :

In [9]: from sklearn.datasets import make_classification
...: X, y = make_classification(n_samples=1000, n_features=4,
...: n_informative=2, n_redundant=0,
...: random_state=0, shuffle=False)
...:

In [10]: X.shape
Out[10]: (1000, 4)

In [11]: y.shape
Out[11]: (1000,)

In [12]: forest.fit(X,y)
Out[12]:
RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',
max_depth=4, 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)

In [13]: len(forest)
Out[13]: 10

关于python - Scikit 随机森林分类器未评估为真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46983871/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com