diff --git "a/\345\210\206\347\261\273\345\222\214\345\233\236\345\275\222/\347\273\204\345\220\210\346\240\221/\351\232\217\346\234\272\346\243\256\346\236\227/random-forests.md" "b/\345\210\206\347\261\273\345\222\214\345\233\236\345\275\222/\347\273\204\345\220\210\346\240\221/\351\232\217\346\234\272\346\243\256\346\236\227/random-forests.md" index 33b828b..65d63c5 100644 --- "a/\345\210\206\347\261\273\345\222\214\345\233\236\345\275\222/\347\273\204\345\220\210\346\240\221/\351\232\217\346\234\272\346\243\256\346\236\227/random-forests.md" +++ "b/\345\210\206\347\261\273\345\222\214\345\233\236\345\275\222/\347\273\204\345\220\210\346\240\221/\351\232\217\346\234\272\346\243\256\346\236\227/random-forests.md" @@ -416,7 +416,8 @@ private[tree] def findSplitsForContinuousFeature( if (possibleSplits <= numSplits) { valueCounts.map(_._1) } else { - // 切分点之间的步长 +        // 等频切分 +        // 切分点之间的步长 val stride: Double = featureSamples.length.toDouble / (numSplits + 1) val splitsBuilder = Array.newBuilder[Double] var index = 1 @@ -449,6 +450,7 @@ private[tree] def findSplitsForContinuousFeature( splits } ``` +   在if判断里每步前进`stride`个样本,累加在`targetCount`中。`while`循环逐次把每个特征值的个数加到`currentCount`里,计算前一次`previousCount`和这次`currentCount`到`targetCount`的距离,有3种情况,一种是`pre`和`cur`都在`target`左边,肯定是`cur`小,继续循环,进入第二种情况;第二种一左一右,如果`pre`小,肯定是`pre`是最好的分割点,如果`cur`还是小,继续循环步进,进入第三种情况;第三种就是都在右边,显然是`pre`小。因此`if`的判断条件`pre