为了测试一些代码,我希望能够手动创建sklearn.tree._tree.Tree,而不是通过拟合某些数据。
具体来说,我想要一棵将实线上的点分为间隔(-infinity,5],(5,6]或(6,infinity)的树。我想要的树形为
----0----
| |
| ---2---
| | |
1 3 4
其中节点0在5处分割实线,节点2在6处分割实线。
如何执行此操作?我看到树有一个__setstate__
方法,看着__getstate__
的输出,看来我需要类似
state = {
'n_features_': 1,
'max_depth': 2,
'node_count': 5,
'nodes': np.array([(1 , 2, 0, 5., 0.375, 3, 3.),
(-1, -1, 0, -2., 0. , 1, 1.),
(3 , 4, 0, 6., 0., , 2, 2.),
(-1, -1, 0, -2., 0., , 1, 1.),
(-1, -1, 0, -2., 0., , 1, 1.),
],
dtype=[('left_child', '<i8'), ('right_child', '<i8'), ('feature', '<i8'),('threshold', '<f8'), ('impurity', '<f8'), ('n_node_samples', '<i8'), ('weighted_n_node_samples', '<f8')]),
}
但是我并不太真正理解这些参数的含义,无论如何我一开始都没有看到如何用这种状态初始化树。
答案 0 :(得分:0)
经过数小时的尝试手动更改节点后。我找到了解决方案。 确实,你是对的。通过使用设置状态,您可以进行树的自定义。 “节点”键必须如下:
-1(代表左/右子代)和-2(代表功能)代表叶子。
训练分类器时,您将拥有另一个键:“值”。