1. 课程导学与数学基础:分类问题概述、信息熵与条件熵、信息增益与基尼系数

各位同学好,欢迎来到《分类算法实战》的第一章。我是你们这门课的主讲。今天咱们不急着敲代码,先把地基打牢。分类问题说白了就是「这个东西是A还是B?」——比如判断一封邮件是不是垃圾邮件,或者预测一个用户会不会流失。

我个人习惯,学任何算法前,先搞懂它要解决什么问题,以及背后的数学直觉是什么。你想想看,如果连「信息熵」是什么都不清楚,后面理解决策树的分裂逻辑就会很吃力。所以这一章,咱们把数学基础啃下来。

1.1 分类问题概述

分类是监督学习的核心任务之一。它的目标很简单:给定输入特征,输出一个离散的类别标签。比如根据花瓣长度和宽度,判断这是哪种鸢尾花。

我在项目中遇到过最典型的分类场景,是给电商平台的用户打标签。特征有几十个维度,比如浏览时长、购买频次、客单价等等。最终要输出「高价值用户」「普通用户」「流失风险用户」三个类别。嗯,这里要注意:类别之间最好互斥且完备,否则模型会懵。

分类算法有很多种,咱们这门课会重点讲决策树和随机森林。为什么选它们?因为可解释性强,而且对数据分布没什么假设。你想想看,逻辑回归要求特征之间独立,但树模型完全不怕特征共线性。

核心要点:分类问题的本质是「划分决策边界」。树模型通过一系列 if-else 规则,把特征空间切分成若干矩形区域,每个区域对应一个类别。

1.2 信息熵:衡量不确定性

信息熵这个概念,最早是香农在信息论里提出的。说白了,熵就是「混乱程度」的度量。一个系统越混乱,熵就越大。

举个例子:一个袋子里全是红球,你伸手一摸,100%是红球。这时候不确定性为0,熵就是0。但如果袋子里红球和蓝球各一半,你摸之前完全不知道会是什么颜色,熵就很大。

数学公式长这样:

H(X) = - Σ p(x) * log₂ p(x)

其中 p(x) 是事件 x 发生的概率。注意底数是2,所以熵的单位是「比特」。我个人习惯用 log₂,因为计算出来的值更直观——比如抛一枚公平硬币,熵正好是1比特。

我曾经在做一个风控项目时,需要评估特征的重要性。当时有个同事直接拿特征的方差来排序,结果效果很差。我告诉他:方差只能衡量数值型特征的离散程度,但分类问题里,我们关心的是「信息量」,也就是熵。从那以后,我们团队统一用信息增益来选特征。

小技巧:如果某个特征取值很多(比如用户ID),它的熵会非常大。但这不是好事,因为这种特征往往过拟合。决策树算法里会通过「增益率」来惩罚这种取值多的特征。

1.3 条件熵:知道一些信息后,不确定性还剩多少

条件熵 H(Y|X) 表示:在已知 X 的条件下,Y 的不确定性。公式是:

H(Y|X) = Σ p(x) * H(Y|X=x)

说白了,就是先按 X 的取值把数据分组,然后分别计算每组里 Y 的熵,最后加权平均。

举个例子:假设我们要预测明天是否下雨(Y),已知今天的湿度(X)。如果湿度高的时候,下雨的概率是90%;湿度低的时候,下雨的概率是10%。那么条件熵 H(Y|X) 就会比原始熵 H(Y) 小很多。因为湿度这个信息,帮我们降低了不确定性。

你想想看,如果 X 和 Y 完全独立,那么 H(Y|X) = H(Y),说明 X 对 Y 没有任何预测能力。反之,如果 X 能完全决定 Y,那么 H(Y|X) = 0。

避坑指南:我曾经在计算条件熵时,忘记对缺失值做处理。结果某个特征因为缺失值太多,条件熵算出来特别小,被误认为是最佳分裂特征。后来我养成了习惯:先检查缺失率,超过50%的特征直接剔除。

1.4 信息增益:特征好不好的评判标准

信息增益 = 原始熵 - 条件熵。公式:

Gain(D, A) = H(D) - H(D|A)

它衡量的是:用特征 A 来划分数据集 D,能带来多少「信息量」的提升。信息增益越大,说明这个特征越重要。

决策树里的 ID3 算法,就是每次选择信息增益最大的特征来分裂。但这里有个坑:信息增益偏向于取值多的特征。比如「用户ID」这个特征,每个取值只对应一个样本,条件熵为0,信息增益最大。但这样的特征毫无泛化能力。

我记得有一次做客户分群,数据里有个「会员编号」字段。新手同事直接把它当特征扔进模型,结果训练集准确率99%,测试集直接崩到50%。嗯,这就是典型的过拟合。后来我们用 C4.5 算法,改用增益率来避免这个问题。

1.5 基尼系数:另一种分裂标准

基尼系数(Gini Index)是 CART 决策树用的分裂标准。它和信息熵类似,也是衡量「不纯度」的指标。公式:

Gini(D) = 1 - Σ p(k)²

其中 p(k) 是第 k 类样本的比例。基尼系数越小,纯度越高。

举个例子:二分类问题,如果两类各占50%,基尼系数 = 1 - (0.5² + 0.5²) = 0.5。如果一类占100%,另一类占0%,基尼系数 = 1 - (1² + 0²) = 0。

信息熵和基尼系数有什么区别?我个人的经验是:

指标 公式 计算速度 对概率分布的敏感度
信息熵 -Σ p log₂ p 较慢(有对数运算) 对概率分布更敏感
基尼系数 1 - Σ p² 较快(无对数) 对概率分布略迟钝

在实际项目中,两者选哪个差别不大。sklearn 里的决策树默认用基尼系数,因为计算快。但如果你追求极致的精度,可以试试信息熵,有时候能多提升1-2个百分点。

总结一下:这一章我们讲了分类问题的本质,以及两个核心概念——信息熵和基尼系数。它们是决策树分裂的「方向盘」。下一章,咱们就动手实现一个决策树,看看这些数学公式是怎么变成代码的。

好了,今天就到这里。记得把信息熵和基尼系数的公式手推一遍,理解透了再往下走。有问题随时在课程群里问我。