我正在使用scikit-learn创建决策树,而且它的效果非常好。我还想实现另外一个目标:使树仅在一个属性上分裂。
之所以这样做是因为我的数据集非常奇怪。我使用的是一个嘈杂的数据集,并且我对噪声非常感兴趣。我的类别结果是二元的,比如[+,-]。我有许多属性,其中大多数数字在(0,1)范围内。
当scikit-learn创建决策树时,它会多次在属性上进行分裂,以使树“更好”。我理解这样可以使叶节点更纯净,但这不是我想要实现的情况。
我所做的事情是为每个属性定义截断值,通过计算不同截断值的信息增益并选择最大值来实现。通过使用“留一法”和“1/3-2/3”交叉验证技术,我比原始决策树获得了更好的结果。
问题在于,当我尝试自动化这个过程时,我遇到了一个问题,即在较低和较高的边界上(例如0和1附近),因为大多数元素将位于其下/上部,我会获得非常高的信息增益,因为其中一个集合是纯的,即使它只包含全数据的1-2%。
总之,我想做一些事情让scikit-learn仅在一个属性上进行分裂。
如果无法实现,你们有什么建议以一种好的方式生成这些截断值吗?
之所以这样做是因为我的数据集非常奇怪。我使用的是一个嘈杂的数据集,并且我对噪声非常感兴趣。我的类别结果是二元的,比如[+,-]。我有许多属性,其中大多数数字在(0,1)范围内。
当scikit-learn创建决策树时,它会多次在属性上进行分裂,以使树“更好”。我理解这样可以使叶节点更纯净,但这不是我想要实现的情况。
我所做的事情是为每个属性定义截断值,通过计算不同截断值的信息增益并选择最大值来实现。通过使用“留一法”和“1/3-2/3”交叉验证技术,我比原始决策树获得了更好的结果。
问题在于,当我尝试自动化这个过程时,我遇到了一个问题,即在较低和较高的边界上(例如0和1附近),因为大多数元素将位于其下/上部,我会获得非常高的信息增益,因为其中一个集合是纯的,即使它只包含全数据的1-2%。
总之,我想做一些事情让scikit-learn仅在一个属性上进行分裂。
如果无法实现,你们有什么建议以一种好的方式生成这些截断值吗?
min_samples_leaf
、min_samples_split
或min_weight_fraction_leaf
来实现您想要的结果。 - maxymoo