【发布时间】:2016-02-29 11:37:01
【问题描述】:
我正在使用 scikit-learn 创建一个决策树,它的工作原理就像一个魅力。我还想实现一件事:让树只在一个属性上拆分一次。
这背后的原因是因为我的数据集非常奇怪。我使用嘈杂的数据集,我也对噪音非常感兴趣。我的课堂结果是二元的,比如说 [+,-]。我有一堆属性,其数字大多在 (0,1) 范围内。
当 scikit-learn 创建树时,它会根据属性多次拆分,以使树“更好”。我知道这样叶子节点会变得更加纯净,但我想实现的不是这种情况。
我所做的是通过计算不同截止值中的信息增益并选择最大值来为每个属性定义截止值。通过这种方式,使用“leave-one-out”和“1/3-2/3”交叉验证技术,我得到比原始树更好的结果。
问题是,当我尝试将其自动化时,我遇到了上下限的问题,例如大约在 0 和 1 左右,因为大多数元素都低于/高于该值,并且我获得了非常高的信息增益,因为其中一组是纯的,即使它只包含完整数据的 1-2%。
总而言之,我想做一些事情来让 scikit-learn 只在一个属性上拆分一次。
如果无法完成,你们有什么建议可以很好地生成这些截止值吗?
【问题讨论】:
-
我想知道你是否可以通过调整
min_samples_leaf、min_samples_split或min_weight_fraction_leaf来实现你想要的。 -
真的有可能像OP描述的那样吗?
-
我已经找到了一种使用 sckit 的方法,我编写了自己的方法
-
您真的希望每个属性只使用一次吗?如果在左右子树中都使用相同的特征 x_i 会有什么问题?如果你想避免过度拟合,你可以对非常小的树而不是一棵树使用梯度提升。
-
您是否尝试过仅使用逻辑回归?根据定义,它只会使用每个属性一次。
标签: python scikit-learn decision-tree