ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

分类模型实战:从逻辑回归到SVM与随机森林的核心原理与应用

分类模型实战:从逻辑回归到SVM与随机森林的核心原理与应用 1. 从“预测”到“归类”分类模型在数学建模中的角色转变在数学建模的实战中我们常常会遇到一类问题目标不再是预测一个具体的数值比如明天的气温、下个月的销量而是要将研究对象“分门别类”。比如根据病人的各项体检指标判断其是否患有某种疾病健康/患病根据一封邮件的文本特征识别它是正常邮件还是垃圾邮件正常/垃圾或者根据一家企业的财务数据评估其信用等级AAA/AA/A...。这类问题的核心就是分类。“数学建模学习笔记八——分类模型”这个标题指向的正是解决这类问题的核心工具箱。与回归模型关注“是多少”不同分类模型关注的是“属于哪一类”。这不仅仅是输出形式的变化其背后的数学思想、模型假设、评估标准都发生了根本性的转变。很多初学者在从回归转向分类时会不自觉地套用线性回归的思路直接对类别标签如0和1进行拟合这往往会走入误区。分类模型有自己的一套“玩法”理解这套玩法的底层逻辑比记住几个算法名字要重要得多。在这篇笔记里我不想仅仅罗列KNN、决策树、SVM这些算法名称和调用代码。我更想和你一起拆解当我们面对一个分类问题时完整的思考路径应该是怎样的我们手头的数据适合用什么模型不同模型到底是怎么“想”问题的那个准确率99%的模型真的就无敌了吗在实际竞赛和项目中有哪些教科书上不会写的“坑”和“技巧”我们将从最基础、最经典的模型入手剖析其原理对比其优劣并深入到模型评估、样本不平衡等实战中必然遇到的棘手问题。无论你是正在备战数模竞赛的学生还是希望将分类方法应用于实际工作的从业者这些从一次次调参、一次次失败中总结出的经验或许能帮你少走些弯路。2. 模型基石逻辑回归——从线性到概率的桥梁当我们谈论分类尤其是二分类结果只有两种通常编码为0和1时逻辑回归往往是第一个被想到的模型。它名字里带有“回归”但本质是分类模型这本身就容易让人困惑。它的核心思想是为线性回归的输出套上一个“概率转换器”。2.1 为什么不能直接用线性回归做分类设想一个简单的二分类问题根据学习时间预测考试是否通过通过1不通过0。如果我们强行用普通线性回归Y β₀ β₁X去拟合会得到一条直线。这条直线会预测出诸如Y0.2或Y1.5这样的值。这些值既不是0也不是1解释起来很别扭0.2代表20%的可能性通过1.5代表150%的可能性这显然不合理因为概率必须在0到1之间。更严重的是线性回归的误差项通常假设为正态分布而0/1标签的分布与此严重不符会导致参数估计有偏且预测值可能超出[0,1]范围。因此我们需要一个模型能将线性组合z β₀ β₁X₁ ... βₙXₙ的结果映射到(0,1)区间内并且这个映射函数最好是单调、光滑的。这就是Sigmoid函数或称Logistic函数登场的原因。2.2 Sigmoid函数与“几率”的概念Sigmoid函数的公式是σ(z) 1 / (1 e^{-z})。它的图像是一条优美的S型曲线将整个实数域z ∈ (-∞, ∞)平滑地压缩到(0, 1)区间。当z趋近于正无穷时σ(z)趋近于1当z趋近于负无穷时σ(z)趋近于0当z0时σ(z)0.5。在逻辑回归中我们并不直接预测类别0或1而是预测样本属于正类标记为1的概率即P(Y1|X) σ(z)。那么这个z是什么z就是我们特征变量的线性组合。由此我们得到了逻辑回归的核心方程P 1 / (1 e^{-(β₀ β₁X₁ ... βₙXₙ)})为了更容易理解参数β的意义我们引入“几率”的概念。几率Odds是指事件发生的概率与不发生的概率之比Odds P / (1-P)。将上面的公式进行变换可以得到P / (1-P) e^{β₀ β₁X₁ ... βₙXₙ}两边取自然对数ln(P / (1-P)) β₀ β₁X₁ ... βₙXₙ左边ln(P / (1-P))称为对数几率。这个公式非常美妙它意味着逻辑回归模型实际上是在用线性模型拟合输出Y的对数几率。因此参数βᵢ就有了清晰的解释在其他特征不变的情况下特征Xᵢ每增加一个单位其对应的对数几率将增加βᵢ或者说几率将变为原来的e^{βᵢ}倍。如果βᵢ是正数e^{βᵢ}1说明该特征对预测为正类有正向贡献反之则为负向贡献。注意这里的“几率”是统计学概念与日常用语中的“概率”含义不同e^{βᵢ}是几率比解释时务必谨慎避免说成“概率增加了βᵢ”。2.3 参数估计极大似然法与梯度下降线性回归用最小二乘法估计参数目标是让预测值与真实值的平方误差最小。但逻辑回归的输出是概率真实值是类别标签平方误差不再适用。逻辑回归采用极大似然估计。其思想是寻找一组参数β使得在这组参数下观测到当前这批样本数据的可能性似然最大。对于单个样本其似然函数是如果真实标签y1我们希望预测概率P尽量大如果y0我们希望1-P尽量大。可以统一写为L(β) P^y * (1-P)^{1-y}。对于所有独立同分布的样本整体似然函数是每个样本似然的乘积。通常我们对其取对数对数似然函数将连乘变为连加便于求导优化。LL(β) Σ [y_i * ln(P_i) (1-y_i) * ln(1-P_i)]我们的目标就是最大化这个对数似然函数LL(β)。由于直接求解析解困难通常采用数值优化方法如梯度下降法或其变种如随机梯度下降、拟牛顿法来求解。梯度下降会沿着对数似然函数梯度增长最快的方向逐步调整参数β直至找到最大值点。实操心得在实际调用sklearn.linear_model.LogisticRegression时其solver参数就是指定优化算法。对于小数据集或特征不多的情况liblinear是不错的选择对于大数据集sag或saga随机平均梯度下降效率更高。另外务必要注意penalty正则化参数默认的L2正则化能有效防止过拟合尤其是在特征较多或存在共线性时。3. 线性与非线性分界支持向量机SVM的几何直觉如果说逻辑回归是从概率统计的视角切入分类那么支持向量机则是从几何间隔最大化的视角为我们提供了另一种清晰而强大的思路。SVM的核心目标是找到一个超平面不仅能将两类样本分开还要使两类样本中离这个超平面最近的点的距离即“间隔”尽可能大。这些最近的样本点就被称为“支持向量”它们决定了超平面的最终位置。3.1 硬间隔与软间隔理想与现实的妥协在最理想的、线性可分的情况下SVM寻找的是“硬间隔”超平面。它要求所有样本都被正确分类且间隔最大化。这可以转化为一个凸二次规划问题有成熟的算法求解。然而现实中的数据往往不是完美线性可分的或者存在一些噪声点。如果坚持硬间隔可能会导致模型非常复杂过拟合或者根本找不到解。这时就需要引入“软间隔”。软间隔SVM允许一些样本点违反间隔约束甚至被错误分类但对这些“违规”行为施加惩罚。这个惩罚力度由一个超参数C来控制。C值很大意味着对分类错误的惩罚很重模型会倾向于更少的误分类间隔可能变窄模型更复杂容易过拟合。C值很小意味着对分类错误的容忍度较高模型更追求“宽间隔”允许一些样本点落在间隔内或被误分模型更简单可能欠拟合。C的选择是SVM调参的关键之一通常需要通过交叉验证来确定。3.2 核技巧升维打击解决非线性问题SVM本质上是线性分类器但通过“核技巧”它能巧妙地处理非线性分类问题。其思想非常精妙如果原始特征空间中的数据线性不可分我们可以通过一个映射函数φ将数据映射到一个更高维甚至是无穷维的特征空间。在这个高维空间中数据可能就变得线性可分了。SVM在这个高维空间中寻找最优超平面。但直接计算高维空间中的内积φ(x_i)·φ(x_j)可能计算量巨大维度灾难。核技巧的精髓在于我们不需要知道映射函数φ的具体形式也不需要真的去高维空间计算只要找到一个函数K(x_i, x_j)它在原始空间的计算结果等于在高维空间的内积结果即K(x_i, x_j) φ(x_i)·φ(x_j)。这个函数K就是核函数。常用的核函数有线性核K(x_i, x_j) x_i·x_j。就是原始空间的内积退化为线性SVM。多项式核K(x_i, x_j) (γ * x_i·x_j r)^d。其中d是多项式次数γr是参数。径向基函数核K(x_i, x_j) exp(-γ * ||x_i - x_j||^2)。这是最常用、最强大的核函数之一γ参数控制单个样本的影响范围。γ越大模型越复杂容易过拟合γ越小模型越平滑容易欠拟合。踩坑实录核函数和参数的选择极具艺术性。我曾在一个项目中用RBF核的SVM在训练集上达到了接近100%的准确率欣喜若狂。但在测试集上却一塌糊涂。这就是典型的过拟合。后来通过网格搜索交叉验证找到了一个合适的(C, γ)组合虽然训练集准确率降到95%但测试集稳定在92%以上泛化能力大大提升。切记在SVM中C和核参数如RBF的γ的调优是必须的步骤不能只看训练集效果。3.3 SVM的优缺点与适用场景优点在高维空间中非常有效。当特征维度远大于样本数时仍然能较好地工作。决策函数只依赖于支持向量内存效率高。通过核函数可以灵活处理非线性问题。缺点如果特征数量远大于样本数量核函数的选择和正则化项C就至关重要否则容易过拟合。不直接提供概率估计sklearn中可以通过probabilityTrue设置进行概率校准但会增加计算开销。对缺失数据和参数调优比较敏感。大规模训练样本时训练速度可能较慢尽管有序列最小优化等高效算法。适用场景SVM特别适用于小到中型、特征维度较高、且需要清晰决策边界的分类问题如图像识别、文本分类等。4. 树形结构的力量从决策树到随机森林决策树是一种非常直观的“白盒”模型它模拟人类做决策的过程通过一系列“如果...那么...”的问题最终得到一个结论。构建一棵决策树关键在于如何选择每个节点上用于划分数据的特征。4.1 决策树的核心特征选择与划分准则决策树学习的目的是为了产生一棵泛化能力强即处理未见示例能力强的树。其生成是一个递归地选择最优划分特征并根据该特征对训练数据进行分割使得各个子数据集有一个最好的分类的过程。这个过程对应着对特征空间的划分也对应着决策树的构建。常用的特征选择准则有信息增益这是ID3算法使用的准则。它基于信息论中的熵。熵表示随机变量不确定性的度量。信息增益表示得知特征X的信息而使得类Y的信息的不确定性减少的程度。倾向于选择分支数量多的特征有偏好。信息增益比C4.5算法对信息增益的改进用信息增益除以该特征本身的熵称为“分裂信息”来校正信息增益对可取值数目较多的特征的偏好。基尼指数CART树用于分类的准则。基尼指数表示一个随机选中的样本在子集中被分错的可能性。基尼指数越小集合的纯度越高。与信息增益/信息增益比相比基尼指数的计算不涉及对数运算速度稍快。以基尼指数为例对于数据集D其基尼值为Gini(D) 1 - Σ (p_k)^2其中p_k是第k类样本所占的比例。 若根据特征A将D划分为两个子集D1和D2则划分后的基尼指数为Gini(D, A) |D1|/|D| * Gini(D1) |D2|/|D| * Gini(D2)我们选择那个使得Gini(D, A)最小的特征A作为当前节点的划分特征。4.2 剪枝对抗过拟合的必由之路决策树非常容易过拟合它可以一直生长直到每个叶子节点只包含一个样本纯度100%但这棵树在训练集上准确率100%在未知数据上往往表现很差。剪枝是决策树学习算法中对付过拟合的主要手段。剪枝分为预剪枝和后剪枝预剪枝在树生长过程中对每个节点划分前进行估计若当前节点的划分不能带来决策树泛化性能的提升如验证集准确率不再提高则停止划分并将该节点标记为叶节点。预剪枝降低了过拟合风险减少了训练时间但可能带来欠拟合风险因为有些分支的当前划分虽不能提升泛化性能但在其基础上进行的后续划分却有可能显著提高性能。后剪枝先构造一棵完整的决策树然后自底向上地对非叶节点进行考察若将该节点对应的子树替换为叶节点能带来决策树泛化性能的提升则将该子树替换为叶节点。后剪枝通常比预剪枝保留了更多的分支欠拟合风险小但训练时间开销更大。个人体会在实际使用sklearn.tree.DecisionTreeClassifier时我们通过参数来控制树的复杂度和剪枝。max_depth最大深度和min_samples_leaf叶节点最少样本数是最常用、最有效的预剪枝参数。通常我会先设置一个较大的max_depth比如10然后通过绘制“树深度-交叉验证得分”曲线来观察模型性能何时达到平台期或开始下降从而确定一个合适的深度。盲目追求深度只会得到一棵在训练集上“完美”但无用的树。4.3 集成学习随机森林如何让“树”变得强大单棵决策树不稳定容易过拟合。而随机森林通过Bagging集成思想和随机特征选择构建了多棵决策树并通过投票分类或平均回归来得到最终结果显著提升了模型的泛化能力和鲁棒性。随机森林的构建过程自助采样从原始训练集中有放回地随机抽取n个样本形成一个自助采样集。该过程重复B次B即森林中树的数量得到B个不同的训练子集。随机特征对于每棵树的每个节点不是从所有m个特征中选择最优划分特征而是先随机选取一个特征子集通常大小为sqrt(m)或log2(m)然后从这个子集中选择最优特征进行划分。这进一步增强了树之间的差异性。独立生长每棵树都基于其对应的训练子集和特征选择策略独立地生长不进行剪枝或仅进行很弱的剪枝让其充分生长。集成输出对于分类问题B棵树进行投票对于回归问题取B棵树输出的平均值。为什么随机森林有效降低方差通过平均多棵高方差、低偏差的树决策树容易过拟合即高方差有效降低了整体模型的方差。引入随机性自助采样和随机特征选择保证了树之间的差异性使得集成模型更稳定不易过拟合。天然评估在自助采样过程中约有37%的样本未被抽中这些“袋外”样本可以用于评估单棵树的性能进而评估整个森林的性能无需单独划分验证集。实战技巧随机森林有两个核心参数n_estimators树的数量和max_features节点划分时考虑的最大特征数。n_estimators越大越好但计算成本也越高通常增加到模型性能不再显著提升即可。max_features是控制随机性的关键默认值sqrt(n_features)对于分类问题通常是个好起点。随机森林还能输出特征重要性这是模型可解释性的一个宝贵副产品可以帮助我们进行特征筛选。5. 超越准确率分类模型的评估与选择陷阱模型建好了在训练集上准确率高达98%是不是就大功告成了远非如此。在分类任务中尤其是类别不平衡或错误代价不对称的场景下准确率是一个极具误导性的指标。5.1 混淆矩阵与更丰富的评估指标假设我们有一个二分类问题正类P负类N模型预测结果与真实情况对比会形成如下混淆矩阵真实情况 \ 预测结果预测为正类预测为负类实际为正类真正例假负例实际为负类假正例真负例从这个矩阵中我们可以衍生出多个关键指标准确率(TPTN) / (TPTNFPFN)。所有样本中被正确分类的比例。在类别严重不平衡时如99%负例1%正例一个将所有样本都预测为负类的“笨”模型准确率也能达到99%但这毫无意义。精确率TP / (TPFP)。所有被预测为正类的样本中真正是正类的比例。它关注的是预测的“准不准”。在垃圾邮件过滤中我们非常关心精确率因为把正常邮件误判为垃圾邮件FP的代价很高。召回率TP / (TPFN)。所有真实的正类样本中被模型成功找出来的比例。它关注的是找的“全不全”。在疾病筛查中我们非常关心召回率因为漏诊FN的代价很高。F1分数2 * Precision * Recall / (Precision Recall)。精确率和召回率的调和平均数。当精确率和召回率都重要且需要找一个平衡点时F1分数是一个综合指标。避坑指南永远不要只看准确率拿到数据后第一件事就是看类别分布。如果存在不平衡评估模型时必须结合混淆矩阵看精确率、召回率和F1分数。例如在金融风控中预测交易是否欺诈欺诈样本极少正例我们可能更看重召回率尽可能抓住所有欺诈同时也要保证精确率不能太低否则人工审核成本太高此时F1分数或PR曲线下的面积就是更好的评估标准。5.2 ROC曲线与AUC衡量模型排序能力ROC曲线和AUC是评估二分类模型性能的另一个强大工具它不依赖于单一的分类阈值。ROC曲线的横轴是假正例率FPR FP / (FPTN)即所有负例中被错判为正例的比例。纵轴是真正例率即召回率TPR TP / (TPFN)。分类模型通常输出一个属于正类的概率值如逻辑回归的P(Y1|X)。我们需要设定一个阈值比如0.5大于阈值的判为正类否则为负类。每设定一个不同的阈值就会得到一对(FPR, TPR)值在图上形成一个点。让阈值从1到0连续变化就得到了ROC曲线。曲线越靠近左上角(0,1)点越好表示在很低的FPR下就能获得很高的TPR。对角线yx代表随机猜测模型的性能。AUC是ROC曲线下的面积取值范围[0.5, 1]。AUC可以解释为随机选取一个正样本和一个负样本模型对正样本的输出概率高于负样本的概率。AUC衡量的是模型对样本的排序能力而非绝对的分类能力。AUC对类别不平衡不敏感这是它的一大优点。5.3 模型选择中的“没有免费午餐”定理面对逻辑回归、SVM、决策树、随机森林乃至神经网络我们该如何选择这里必须提及“没有免费午餐”定理没有任何一个模型在所有问题上都优于其他模型。模型的选择高度依赖于数据特征、问题背景和计算资源。一个粗略的决策流程可以参考数据量与特征数据量小、特征少可以尝试逻辑回归、线性SVM、简单决策树。数据量大、特征多可以考虑带正则化的逻辑回归、非线性SVM需谨慎调参、随机森林、梯度提升树如XGBoost, LightGBM。问题性质需要模型可解释性逻辑回归看系数、决策树看路径是首选。追求极致预测性能且可解释性要求不高可以尝试集成方法或深度学习。计算资源与时间随机森林训练可以并行预测快但模型存储大。SVM训练慢尤其大数据但预测快。XGBoost训练通常比随机森林慢但模型性能往往更强。实战策略永远从简单的模型开始如逻辑回归。建立一个性能基线。然后再尝试更复杂的模型如随机森林看性能提升是否显著。如果提升不大则可能简单模型已经足够复杂模型带来的边际效益很低且增加了过拟合风险和计算成本。在我参与过的一个用户流失预测项目中我们先后尝试了逻辑回归、决策树、随机森林和XGBoost。逻辑回归的AUC为0.78给出了哪些特征如最近登录间隔、消费金额下降比例对流失有正向/负向影响业务方非常认可。随机森林将AUC提升到了0.82XGBoost达到了0.83。但考虑到0.83相比0.78的提升所带来的业务价值与模型复杂度、维护成本之间的权衡项目组最终选择了逻辑回归随机森林特征重要性筛选的方案用随机森林筛选出Top 20的重要特征再用这些特征训练逻辑回归。最终模型AUC为0.81既保证了可解释性性能也比原始逻辑回归有提升。这个案例说明模型选择是技术、业务和资源的综合决策。
返回列表