如何处理sklearn决策树的广度优先搜索遍历?
在我的代码中,我尝试了sklearn.tree_库,并使用了诸如tree_.feature和tree_.threshold之类的各种功能来理解树的结构。但是,如果我想做bfs,这些功能会遍历树的dfs吗?
假设
clf1 = DecisionTreeClassifier( max_depth = 2 )
clf1 = clf1.fit(x_train, y_train)
这是我的分类器,生成的决策树是
然后我使用以下功能遍历了树
def encoding(clf, features):
l1 = list()
l2 = list()
for i in range(len(clf.tree_.feature)):
if(clf.tree_.feature[i]>=0):
l1.append( features[clf.tree_.feature[i]])
l2.append(clf.tree_.threshold[i])
else:
l1.append(None)
print(np.max(clf.tree_.value))
l2.append(np.argmax(clf.tree_.value[i]))
l = [l1 , l2]
return np.array(l)
并且产生的输出是
array([[['address','age',None,None,'age',None,None],[0.5,17.5,2,1,15.5,1,1]],dtype = object)其中第一个数组是节点的特征,或者如果它离开节点,则它被标记为无,第二个数组是特征节点的阈值,对于类节点,它是类,但是这是树的dfs遍历,我想做bfs遍历,我应该怎么做?上面的部分已经回答。
我想知道我们是否可以将树以完整的二叉树的形式存储到数组中,从而使第i个节点的子代存储在2i +1和2i +2索引处?
对于上述生成的树输出是array([['address','age',None,None],[0.5,15.5,1,1]],dtype = object)
但所需的输出是
array([[['address',None,'age',None,None,None,None],[0.5,-1,15.5,-1,-1,1,1]],dtype = object)] >
如果在第一个数组中没有值,而在第二个数组中为-1,则表示该节点不存在。因此,这里是地址的正确子代的年龄为2 * 0 + 2 = 2数组中的索引,分别在数组的2 * 2 +1 =第5个索引和2 * 2 + 2 =第6个索引中,分别找到左和右年龄的孩子。
我如何处理sklearn决策树的广度优先搜索遍历?在我的代码中,我尝试了sklearn.tree_库,并使用了诸如tree_.feature和tree_.threshold之类的各种功能来对...
这样的事情?