为决策树选择最佳分割变量:分组统计元素出现次数
统计每个首元素对应标签的出现次数(决策树分割变量分析)
嘿,针对你要统计每个首元素对应None、Basic、Premium三类标签出现次数的需求,我给你整理了几种实用的Python实现方法,刚好能帮你为决策树找最佳分割变量做准备!
先明确你的输入数据:
zipped = [('a', 'None'), ('b', 'Premium'), ('c', 'Basic'), ('d', 'Basic'), ('b', 'Premium'), ('e', 'None'), ('e', 'Basic'), ('b', 'Premium'), ('a', 'None'), ('c', 'None'), ('b', 'None'), ('d', 'None'), ('c', 'Basic'), ('a', 'None'), ('b', 'Basic'), ('e', 'Basic')]
方法1:手动字典统计(适合理解原理)
这种方法最直观,能清晰看到计数的过程,适合刚接触数据统计的场景:
# 初始化统计字典,确保每个首元素都包含三类标签的初始计数 counts = {} for key, category in zipped: if key not in counts: counts[key] = {'None': 0, 'Basic': 0, 'Premium': 0} counts[key][category] += 1 # 打印统计结果 for key, stats in counts.items(): print(f"{key}: {stats}")
运行结果:
a: {'None': 3, 'Basic': 0, 'Premium': 0} b: {'None': 1, 'Basic': 1, 'Premium': 3} c: {'None': 1, 'Basic': 2, 'Premium': 0} d: {'None': 1, 'Basic': 1, 'Premium': 0} e: {'None': 1, 'Basic': 2, 'Premium': 0}
方法2:用collections工具简化代码(简洁高效)
利用Python标准库的defaultdict和Counter,可以减少手动初始化的代码,更适合日常开发:
from collections import defaultdict, Counter # 用defaultdict自动为新的首元素创建Counter对象 counts = defaultdict(Counter) for key, category in zipped: counts[key][category] += 1 # 统一格式,确保每个首元素都显示三类标签(没出现的补0) final_counts = { key: { 'None': count.get('None', 0), 'Basic': count.get('Basic', 0), 'Premium': count.get('Premium', 0) } for key, count in counts.items() } # 输出结果 for key, stats in final_counts.items(): print(f"{key}: {stats}")
这个方法的输出和方法1完全一致,代码更简洁,还能自动处理新出现的首元素。
方法3:用Pandas生成交叉表(适合数据分析场景)
如果后续还要做决策树建模,用Pandas会更方便,因为它能直接生成结构化的统计表格,便于后续分析:
import pandas as pd # 把列表转成DataFrame df = pd.DataFrame(zipped, columns=['Key', 'Category']) # 生成交叉表,统计每个Key对应各Category的次数 count_table = pd.crosstab(df['Key'], df['Category']) # 确保三类标签都存在,没有的列补0 for category in ['None', 'Basic', 'Premium']: if category not in count_table.columns: count_table[category] = 0 # 调整列的顺序,和需求一致 count_table = count_table[['None', 'Basic', 'Premium']] print(count_table)
运行结果:
Category None Basic Premium Key a 3 0 0 b 1 1 3 c 1 2 0 d 1 1 0 e 1 2 0
这个表格形式的结果非常适合后续计算基尼系数、信息增益等决策树分割指标,直接用Pandas的函数就能处理。
内容的提问来源于stack exchange,提问作者Benyam
相关产品推荐
相关产品推荐

