CART 决策树算法中的 Gini 指数如何最小化?

How is the Gini-Index minimized in CART Algorithm for Decision Trees?

例如,对于神经网络,我通过使用反向传播算法最小化成本函数。决策树中的基尼指数是否有等价物?

CART 算法总是声明 "choose partition of set A, that minimizes Gini-Index",但我如何从数学上实际得到该分区?

对此的任何意见都会有所帮助:)

Here有一个很好的CART算法的例子。基本上,我们得到这样的基尼指数:

gini

对于每个属性,我们有不同的值,每个值都有一个基尼指数,根据它们所属的class。例如,如果我们有两个 classes(正面和负面),属性的每个值都会有一些属于正面 class 的记录和一些属于负面 [=50] 的其他值=].所以我们可以计算概率。假设一个属性被称为 weather 并且它有两个值(例如 rainysunny),并且我们有这些信息:

  • 多雨:2 个正,3 个负
  • sunny: 1 正, 2 负

我们可以说:

  • gsunny
  • grainy

然后我们可以得到 weather 的 gini 索引的加权和(假设我们总共有 8 条记录):

sum

我们对所有其他属性都这样做(就像我们对天气所做的那样),最后我们选择基尼指数最低的属性作为分割树的属性。我们必须在每次拆分时执行所有这些操作(除非我们可以 class 化 sub-tree 而无需拆分)。

对于决策树,有不同的方法来拆分年龄、体重、收入等连续变量

A) 将连续变量离散化以将其用作 DT 算法各个方面的分类变量。这可以做到:

  • 在开始时只有一次,然后保持这种离散化 静态
  • 在需要拆分的每个阶段,使用百分位数或 间隔范围或聚类以对变量进行分桶

B) 拆分变量的所有可能的不同值,并查看基尼指数下降幅度最大的地方。这在计算上可能很昂贵。因此,有优化的变体,您可以在其中对变量进行排序,而不是选择所有不同的值,而是选择两个连续值之间的中点作为拆分。例如,如果变量 'weight' 在数据点中有 70、80、90 和 100 公斤,尝试将 75、85、95 作为拆分并选择最好的一个(基尼系数或其他杂质的减少最高)

但是,在scikit-learn in pythonrpart in R[=27=中实现的精确分割算法是什么? ],以及 pyspark 中的 mlib 包,以及它们在连续变量拆分方面的区别是什么,我也不确定并且仍在研究中。