这个问题的核心是模拟决策树(特别是CART算法)在选择最佳分裂特征时的过程。决策树在构建时,需要在每个节点上选择一个特征进行分裂,目标是让分裂后的数据子集“纯度”尽可能高。 基尼指数就是衡量数据纯度的一种指标。一个集合的基尼指数越小,其纯度越高。
题目要求我们找到使整个数据集在分裂后基尼指数最小的那个特征。解题的整体思路如下:
遍历所有特征:我们需要对数据集的每一个特征(即输入二维list
中每个子list
的除了最后一个元素之外的其它元素)进行评估。
计算每个特征的条件基尼指数:对于每一个特征 A
,我们需要计算如果用它来分裂数据集,最终得到的条件基尼指数 Gini(D∣A) 是多少。
某电商平台计划向定向用户发起一次大促活动,向受邀用户定向投放活动入口。通过构建一系列特征,使用决策树对用户进行分类,被分类为正样本的用户可以获得入场资格。使用基尼指数作为特征的优先级决策指标,给定一个数据集,其基尼指数可以表示为:
Gini(D)=1−∑k=1k(∣D∣∣Ck∣)2
其中 Ck 代表的是属于某一类的样本个数,D 是整个数据集的样本数量,如果样本集合 D 根据特征 A 是否取某一值 a 被分割为 D1,D2 ,两部分,那么在特征 A 的条件下,集合的基尼指数可以定义为:
$Gini(D∣A)=\frac{∣D_1∣}{∣D∣}Gini(D_1)+\frac{∣D_2∣}{∣D∣}Gini(D_2)$
现给定一个数据集,要求给出对于使整个集合基尼指数最小的特征,请结合题目信息,输入、输出和补充完成完成作答。
输入一个二维 list ,每个子 list 最后一个元素是 label ,其他元素是对应特征的值。
要求给出使整个数据集合基尼指数最小的特征对应的索引。
(1)可以使用形如 numpy、pandas 的第三方代码库。
(2)为了保证唯一性,请严格遵循输入输出描述进行作答。
(3)形如 sys.stdin 等方法结合 for 循环和 eval 函数即可读取并还原输入数据。
输入
[[0,0,0,0,0],[0,0,0,1,0],[0,1,0,1,1],[0,1,1,0,0],[0,0,0,0,0]]
输出
1
说明
第 2 列特征下,整个集合对应的基尼指数最小,其索引为 1 ,所以返回值为 1