【问题标题】:Classification and Regression tree - optimal split calculation with GINI分类和回归树 - 使用 GINI 进行最优分割计算
【发布时间】:2018-10-05 06:40:35
【问题描述】:

我一直在使用我的 java 实现遵循cart 算法的本指南,并且想知道是否有更快的方法来选择最佳分割。

指南建议以下步骤:

       for each feature:
          for each value of the feature:
             make a split
             remember GINI score if a split is less than previous min GINI

是否可以对该过程进行任何修改以牺牲局部精度来提高速度,但不会导致整体精度下降?虽然这可以很容易地并行化,但循环每个属性仍然很昂贵,并且选择单个拆分是有价值的。

【问题讨论】:

    标签: java python machine-learning classification


    【解决方案1】:

    是的,这可以加快:

    For each feature
        Sort data by feature
        Calculate cumulative counts of different values of target
        Calculate reverse cumulative counts of different values of target
        At each feature value
             Calculate gini value based on cumulative counts
             Keep the maximum
    

    如果特征采用一组有限的值,则可以进一步优化。无需对数据进行排序,您可以聚合数据并将聚合后的数据用于拆分计算。

    如果特征是分类特征,您遵循相同的过程,但按二元目标的目标密度对特征进行排序。如果您有超过 2 个目标值,这会变得有点棘手。

    【讨论】:

    • 几个问题。假设我正在对 1 类和 0 类进行二进制分类。通过目标不同值的累积计数,您的意思是给定特征的不同值的计数?什么是反向累积计数,它与以下步骤有何联系?然后在每个特征值处假设唯一的特征?
    • 给定拆分值所需的计数是:count(class= 1 where feature = x), count(class= 0 其中特征 >= x)。这些足以计算基尼系数。您可以在表的 1 次或 2 次扫描中累积完成这些计数。
    • 当我们有超过 2 个目标值时,是否有任何指向其他帖子或参考的链接?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-02
    • 2017-09-25
    • 2020-02-05
    • 2016-04-17
    • 1970-01-01
    • 2011-05-19
    • 2016-12-03
    相关资源
    最近更新 更多