【特征选择】信息增益
机器学习特征选择信息增益超通俗讲解在做机器学习分类任务时我们常会遇到特征太多、有用的太少的问题。特征选择就是帮我们挑出最有用的特征既减少计算量又避免模型过拟合还能提升预测准确率。今天用最通俗的方式把信息增益这个经典特征选择方法讲透本科生、研究生都能轻松看懂包含原理、公式、代码、优缺点全总结。一、先搞懂什么是特征选择举个生活例子你要预测一个人会不会买奶茶手里有这些特征年龄、性别、身高、体重、喜不喜欢甜、收入、星座。很明显身高、体重、星座对买奶茶几乎没用喜不喜欢甜、年龄才是关键。特征选择就是从一堆特征里自动选出对分类结果最有用的特征扔掉没用的。作用减少计算量训练更快避免特征太多导致过拟合模型更简单、更容易解释二、什么是信息增益一句话讲明白信息增益 用这个特征分类后不确定性减少了多少。越能把不同类别分开的特征信息增益越大这个特征就越有用。通俗小场景猜动物一开始你完全不知道是什么动物信息很混乱、不确定性很高。问“是猫吗” → 帮助很小问“是哺乳动物吗” → 直接把动物分成两类不确定性大幅下降这个“帮你减少迷茫”的程度就是信息增益。换到机器学习里用特征把数据集分组后每组里的类别越纯比如全是好瓜/全是坏瓜信息增益就越高。三、核心原理熵、条件熵、信息增益信息增益基于信息论核心是三个概念熵 → 条件熵 → 信息增益。1. 熵Entropy衡量“混乱程度”熵用来表示数据集的不确定性/纯净度。熵越大数据越乱类别分布均匀熵越小数据越纯类别集中公式一定要看懂假设数据集D有K个类别第k类占比为pkp_kpkH(D)−∑k1Kpklog2pkH(D) -\sum_{k1}^K p_k \log_2 p_kH(D)−k1∑Kpklog2pk约定0×log2000 \times \log_2 0 00×log200举个最简单例子全是好瓜熵0最纯一半好瓜一半坏瓜熵1最乱2. 条件熵Conditional Entropy用特征A把数据分成几组后剩下的平均混乱程度。步骤按特征A的取值把D分成V个子集D1,D2...DVD_1,D_2...D_VD1,D2...DV分别算每个子集的熵按子集大小加权平均公式H(D∣A)∑j1V∣Dj∣∣D∣H(Dj)H(D|A) \sum_{j1}^V \frac{|D_j|}{|D|} H(D_j)H(D∣A)j1∑V∣D∣∣Dj∣H(Dj)∣Dj∣∣D∣\frac{|D_j|}{|D|}∣D∣∣Dj∣第j组数据占总数据的比例权重H(Dj)H(D_j)H(Dj)第j组数据的熵3. 信息增益Information Gain信息增益 原来的混乱程度 − 分完组后的混乱程度最终核心公式IG(D,A)H(D)−H(D∣A)IG(D,A) H(D) - H(D|A)IG(D,A)H(D)−H(D∣A)结论IG越大 → 特征A越能降低不确定性 → 越有用IG越小 → 特征A没用分了跟没分一样四、完整计算流程一步一步跟着算算整体熵H(D)不看任何特征原始数据的混乱度对每个特征A按A的取值分组算每组熵算条件熵H(D|A)算信息增益IG H(D) − H(D|A)按IG从大到小排序选IG高的特征五、实战案例Python代码实现可直接复制我们用一个是否喜欢水果的小数据集亲手算信息增益。1. 构造数据集ColorSizeSweetLikedGreenLargeSweetYesGreenLargeNotSweetYesYellowLargeSweetNoYellowSmallSweetNoYellowSmallNotSweetYesGreenSmallSweetNoGreenLargeNotSweetYes2. Python代码importpandasaspdimportnumpyasnp# 1. 构造数据data{Color:[Green,Green,Yellow,Yellow,Yellow,Green,Green],Size:[Large,Large,Large,Small,Small,Small,Large],Sweet:[Sweet,NotSweet,Sweet,Sweet,NotSweet,Sweet,NotSweet],Liked:[Yes,Yes,No,No,Yes,No,Yes]}dfpd.DataFrame(data)# 2. 计算熵defentropy(target_col):elements,countsnp.unique(target_col,return_countsTrue)ent0forcountincounts:pcount/sum(counts)ent-p*np.log2(p)returnent# 3. 计算条件熵defconditional_entropy(data,feature_col,target_col):elements,countsnp.unique(data[feature_col],return_countsTrue)cond_ent0total_numlen(data)foriinrange(len(elements)):subsetdata[data[feature_col]elements[i]]p_sublen(subset)/total_num cond_entp_sub*entropy(subset[target_col])returncond_ent# 4. 计算信息增益definfo_gain(data,feature_col,target_col):total_ententropy(data[target_col])cond_entconditional_entropy(data,feature_col,target_col)returntotal_ent-cond_ent# 5. 计算所有特征的信息增益targetLikedfeatures[Color,Size,Sweet]forfinfeatures:iginfo_gain(df,f,target)print(f特征{f}信息增益{ig:.4f})3. 运行结果特征Color信息增益0.1281 特征Size信息增益0.1281 特征Sweet信息增益0.5216✅结论甜度Sweet信息增益最大是区分“是否喜欢”最有用的特征。六、信息增益的优点与缺点面试常考优点理论扎实源自信息论可量化特征有用程度直观好理解IG越大特征越有用离散特征友好计算简单、速度快可解释性强适合决策树等模型缺点偏向取值多的特征取值越多分组越细熵降得越多容易被误判为重要特征可能过拟合。不能直接处理连续特征连续值必须先分箱/离散化增加预处理步骤。高维大数据下计算成本偏高七、信息增益 vs 其他特征选择方法方法优点缺点适用场景信息增益直观、理论强、适合离散特征偏向多值特征、连续值需离散化离散特征、类别清晰、快速筛选信息增益率修正多值偏向比信息增益更稳计算稍复杂多值特征多、避免偏向卡方检验统计严谨、适合分类特征样本量要求高、连续值需离散化需要统计检验、样本充足互信息能抓非线性、支持连续离散计算复杂、调参难特征与标签关系复杂方差选择超快、简单不考虑与标签关系预处理快速去低方差特征树模型重要性贴合模型、非线性强依赖模型、计算量大复杂数据、模型训练后评估八、什么时候用信息增益推荐使用数据以离散特征为主类别清晰、样本分布比较均衡做决策树特征分裂/特征筛选需要快速、可解释的特征选择不推荐使用换方法特征取值特别多 → 用信息增益率大量连续特征、离散化困难 → 用互信息/树模型重要性需要严格统计显著性 → 用卡方检验维度极高 → 先方差筛选再用信息增益九、总结必看信息增益 特征带来的不确定性减少量核心公式IGH(D)−H(D∣A)IG H(D) - H(D|A)IGH(D)−H(D∣A)IG越大特征对分类越有用适合离散特征简单高效但偏向多值特征实际使用离散数据首选复杂/连续数据搭配其他方法