速通机器学习2

参考资料:《速通机器学习》北大博士后AI卢菁

因为原文公式全部炸了,难以阅读,故在学习过程中编写了此笔记,精简了原文并添加了一定自己的理解(所以会有很多不严谨的地方),如有错误感谢指出。

第七章 集成学习

7.1 决策树

在决策树中,我们会依次判断各个特征是否满足预设条件,得到最终的决策结果。非叶子节点选择一个特征进行决策,这个特征称为决策点,叶子节点则表示最终的决策结果。

一个好的决策点可以把所有数据(例如商品)分为两部分(左子树和右子树),各部分数据所对应的类别应尽可能相同(例如购买或不购买),即两棵子树中的数据类别应尽可能“纯”(这种决策点有较高的区分度)

可以使用基尼(Gini)系数来量化数据的混乱程度。基尼系数的计算公式如下:

G = 1 − ∑ i = 1 k p k 2 G=1−∑^k_{i=1}p^2_k G=1i=1kpk2

基尼系数越大说明系统不确定性越高(或越随机),基尼系数越小说明系统的不确定性越低(或越确定)

在二分类中,不难发现数据只有一个类别时, G = 1 − 1 2 = 0 G=1-1^2=0 G=112=0数据最纯,概率相等的时候 G = 1 − 2 ∗ ( 1 / 2 ) 2 = 0.5 G=1-2*(1/2)^2=0.5 G=12(1/2)2=0.5数据最不纯。

决策树有一些常用的构建方法,在这里我们详细讲解一下最为流行的CART树。CART树是一棵二叉树,它不仅能完成分类任务,还能完成数值预测类的回归任务。下面先介绍分类树,再介绍回归树。在构建CART树时,可以使用基尼系数来度量决策条件的合理性。

假设有 N N N个训练样本,特征一共有 m m m维,即 x = [ x 1 , ⋯   , x m ] x=[x_1,\cdots,x_m] x=[x1,,xm]。这里的特征 x i x_i xi既可以时连续纸也可以是离散值。

假设我们使用划分条件 c o n d cond cond将一组样本 D a t a Data Data划分为 D a t a 1 Data_1 Data1 D a t a 2 Data_2 Data2,其中 D a t a 1 Data_1 Data1 M 1 M_1 M1个样本, D a t a 2 Data_2 Data2 M 2 M_2 M2个样本。那么我们定义此次划分的基尼系数为两个子集的 G i n i Gini Gini系数加权求和:

G i n i ( c o n d ) = M 1 M 1 + M 2 G i n i ( D a t a 1 ) + M 2 M 1 + M 2 G i n i ( D a t a 2 ) Gini(cond)=\cfrac{M_1}{M_1+M_2}Gini(Data_1)+\cfrac{M_2}{M_1+M_2}Gini(Data_2) Gini(cond)=M1+M2M1Gini(Data1)+M1+M2M2Gini(Data2)

G i n i ( c o n d ) Gini(cond) Gini(cond)越小,说明 c o n d cond cond划分越合理。

因此一个简单的想法是:遍历所有维度 ( i = 1 , 2 , 3 , ⋯ , m ) (i=1,2,3,⋯,m) i=1,2,3,,m中可能的划分条件,对每种划分方法均可计算相应的基尼系数,以最小基尼系数所对应的特征和划分条件为决策点,数据将被划分为两堆。。但是,决策树是不停生长的,仅划分一次是不够的,需要再使用同样的方法对每个子堆(Data 1、Data 2)进行划分

  • 当前节点的数据集为 D。如果样本数量小于阈值、基尼系数小于阈值或没有特征,则返回决策子树,当前节点停止递归
  • 在当前节点的数据上计算各个特征的各个划分条件对划分后的数据的基尼系数。当维度过高且每维所对应的可取值比较多时(例如,价格的值为 1~10000 的整数,将有10000种划分方式;如果为浮点数,划分方式更多),可以随机选取一些特征和划分条件,不再强制要求全部遍历
  • 在计算出来的各个特征的各个特征值对数据集 D 的基尼系数中,选择基尼系数最小的特征$ x_i$ 和对应的划分条件,例如“ x i > 10 x_i>10 xi>10”或“ x i = x_i= xi=本科”。通过划分条件把数据集划分成 Data1 和 Data2 两部分,同时分别建立当前节点的左节点和右节点,左节点的数据集为 Data1,右节点的数据集为 Data2。
  • 对 Data1 和 Data2 递归调用以上步骤,生成决策树。

决策树建立后,每个叶子节点里都有一堆数据。可以将这堆数据的类别比例作为叶子节点的输出

以上介绍的是分类树,回归树除了使用方差代替基尼系数来度量数据的纯度,其他均与分类树一致叶子节点输出的值为该节点所有样本目标值的平均值

7.2 随机森林

然而,令人遗憾的是,在测试集(真实场景)中,决策树非常容易发生过拟合,其原因之一就是规则太“硬”。例如,以“年龄>25岁”为条件进行划分,那么26岁和24岁所对应的类别有本质区别吗?当然没有。可见,决策树把特征绝对化了。

决策树过于在意降低经验风险,其代价是结构风险较高(决策树不停生长,模型的复杂度越来越高),这也是和奥卡姆剃刀定律相悖的。通过上述分析可以发现,决策树的泛化能力不好,容易学到一些极端特例,非常容易出现过拟合。

综上所述,决策树出现过拟合的原因在于,模型不仅容易对个别特征及其取值过于敏感,还容易被个别样本影响。为了消除这些问题,我们可以选取部分特征及部分数据来构建决策树,从而在大概率上忽略极端数据。这是一个双重随机过程,具体如下:

  1. 第一次随机:设全体样本数为 N N N有放回地随机抽取 M M M条数据作为训练样本。
  2. 第二次随机:在抽取的 M M M条样本当中,从所有特征 x = [ x 1 , x 2 , ⋯   , x m ] T x=[x_1,x_2,\cdots,x_m]^T x=[x1,x2,,xm]T中随机选取特征,并且忽略其它特征。

通过双重随机选取训练样本和特征,可以构建决策树 h 1 h_1 h1。重复这个双重随机过程,构建决策树 h 2 , ⋯   , h k h_2,\cdots,h_k h2,,hk。这 K K K颗决策树组成一个森林,称为随机森林 Random Forest。将这 K 棵决策树的分类结果的平均值作为最终结果,即 : y ′ = 1 K ∑ i = 1 K h i ( x ) y^{'}=\frac{1}{K}\sum_{i=1}^Kh_i(x) y=K1i=1Khi(x)。(即每一颗树都会给出不同类别的概率,最终的输出是这些概率的平均)

为什么随机森林表现更好:在随机森林中,每棵决策树都是一个强分类器。强分类器在训练集上的分类效果很好,但会带来过拟合问题,而过拟合问题产生的原因就是分类器学会了数据中的随机噪声。分类器在有噪声的数据中学习,等价于给各个分类器注入了噪声。因为随机森林的预测结果是多棵决策树投票决定的,而单棵决策树由于数据噪声出现导致的分类错误会通过求平均值的计算得以消除,所以,随机森林的表现一般要优于单棵决策树。

7.3 GBDT

在二分类决策树中,将特征输入决策树,会得到分类结果 h ( x ) h(x) h(x) 决定了特征 x 将落入哪个叶子节点,并给出了对应的输出(值域为 [0,1])。叶子节点的输出只能是 [0,1],这是一个强限制。多个分类器的集成(随机森林)只能通过求平均值的方式进行,以保证最终结果的值域为 [0,1]。

梯度升级决策树(Gradient Boosting Decision Tree,GBDT)和随机森林的区别就在于:随机森林是直接获得分类概率,而GBDT是获得值域 ( − ∞ , + ∞ ) (-\infin,+\infin) (,+)的值,然后概率为 s i g m o i d ( ∑ i = 0 K h i ( x ) ) sigmoid(\sum_{i=0}^K h_i(x)) sigmoid(i=0Khi(x))

这样做有什么好处呢?GBDT可以使每棵决策树的训练目标不再是最终分类结果,而是前面 k 棵决策树的结果和最终目标的差异(Gap)。这也决定了训练GBDT中的决策树需要采用串行方法:训练前 k 棵决策树,计算前 k 棵决策树的分类结果 y ′ = 1 1 + e − ∑ m = 0 k h m ( x ) y^{'}=\frac{1}{1+e^{-\sum^k_{m=0}h_m(x)}} y=1+em=0khm(x)1和真实目标 y y y之间的误差,在训练第 k + 1 k+1 k+1颗决策树时,目标就是这个误差。

下面具体分析GBDT的学习过程:

令当前已经完成了前 k k k颗决策树的学习,那么当前的学习器为 F k ( x ) = ∑ m = 0 k h m ( x ) F_k(x)=\sum_{m=0}^kh_m(x) Fk(x)=m=0khm(x)也就是说当前学习器对于样本 { x i , y i } \{x_i,y_i\} { xi,yi}的预测结果为 1 1 + e − F k ( x ) \frac{1}{1+e^{-F_k(x)}} 1+eFk(x)1,使用 K L KL KL距离来度量 y i ′ y_i^{'} yi y i y_i yi之间的差异,有: L o s s i = − y i log ⁡ y i ′ − ( 1 − y i ) log ⁡ ( 1 − y i ′ ) Loss_i=-y_i\log{y_i^{'}}-(1-y_i)\log{(1-y_i^{'})} Lossi=yilogyi(1yi)log(1yi)

在GBDT中,添加 h k + 1 ( x ) h_{k+1} (x) hk+1(x) 的目标是减小 L o s s i Loss_i Lossi,那么 h k + 1 ( x ) h_{k+1} (x) hk+1(x) 取多少才合适呢?

通过对梯度下降法的分析可以知道,为了使 L o s s i Loss_i Lossi 变小, F k + 1 ( x ) F_{k+1} (x) Fk+1(x) 应朝着 − ∂ L o s s i ∂ F k ( x i ) -\cfrac{\partial Loss_i}{\partial F_k(x_i)} Fk(xi)Lossi的方向变化。我们这里令这个方向为 r i , k + 1 = − ∂ L o s s i ∂ F k ( x i ) = y i − y i ′ r_{i,k+1}=-\cfrac{\partial Loss_i}{\partial F_k(x_i)}=y_i-y_i^{'} ri,k+1=Fk(xi)Lossi=yiyi

在训练回归树 t k + 1 ( x ) t_{k+1}(x) tk+1(x)时,使用的训练样本为 { x i , r i , k + 1 } i = 1 N \{x_i,r_{i,k+1}\}_{i=1}^N { xi,ri,k+1}i=1N

注意,这里训练的回归树是 t k + 1 ( x ) t_{k+1}(x) tk+1(x),而不是 h k + 1 ( x ) h_{k+1}(x) hk+1(x)。主要原因是: r i , k + 1 r_{i,k+1} ri,k+1是下一刻决策树的目标方向,而不是真实值,所以 t k + 1 ( x ) t_{k+1}(x) tk+1(x)只能提供正确的树结构,但是叶子节点的输出值需要修正。若 t k + 1 ( x ) t_{k+1}(x) tk+1(x) j = 1 , 2 , ⋯   , J k + 1 j=1,2,\cdots,J_{k+1} j=1,2,,Jk+1个叶子节点,则每个叶子节点的输出可以修订为:

c k + 1 , j = ∑ x i ∈ R k + 1 , j r i , k + 1 ∑ x ∈ R k + 1 , j ( y i − r i , k + 1 ) ( 1 − y i + r i , k + 1 ) c_{k+1,j}=\cfrac{\underset{x_i\in R_{k+1,j}}{\sum}r_{i,k+1}}{\underset{x\in R_{k+1,j}}{\sum}(y_i-r_{i,k+1})(1-y_i+r_{i,k+1})} ck+1,j=xRk+1,j(yiri,k+1)(1yi+ri,k+1

<think>嗯,用户之前让我设计一个针对零基础的学习方案,现在他们希望在这个方案里加入如何利用DeepSeek等AI工具来提高学习效率,并进行学习方法的创新。我需要先回顾之前的方案,看看哪些部分可以整合AI工具。 首先,原方案分四个阶段:编程基础、机器学习入门、深度学习与框架、专项领域与求职。每个阶段都有推荐资源和调整措施。现在用户希望加入AI工具,比如DeepSeek,来提升效率。我需要考虑AI工具可以在哪些环节发挥作用,比如答疑、代码辅助、学习资源推荐等。 用户可能是零基础的学习者,可能对如何高效使用AI工具不太熟悉,所以需要具体的例子和步骤。同时,用户可能希望这些AI工具能够解决学习中的痛点,比如理解困难的概念、调试代码、项目实战指导等。 接下来,我需要分析DeepSeek或其他类似AI工具的功能。例如,DeepSeek可能有代码生成、问题解答、学习建议等功能。类似GitHub Copilot可以帮助写代码,ChatGPT可以解释概念。需要将这些功能整合到各个学习阶段中。 在阶段1,编程基础部分,可以加入AI辅助理解概念和生成代码示例。比如,用AI来解释变量和函数,并提供练习题的答案。阶段2机器学习入门,AI可以辅助数学概念的理解,比如用生活化的例子解释梯度下降,或者生成数据集的代码。阶段3的深度学习,AI可以帮助调试模型,解释错误信息。阶段4的项目实战,AI可以辅助设计项目架构,生成代码模板,或者模拟面试问题。 还需要考虑用户可能遇到的困难,比如不知道如何有效提问AI,或者过度依赖AI而忽略基础。所以,在建议中需要包括如何有效使用AI的方法,比如分步骤提问,验证AI生成代码的正确性,结合官方文档等。 此外,用户提到“学习方法的创新”,可能需要对比传统学习方法,展示AI工具带来的效率提升,比如快解决问题,个性化学习路径,实时反馈等。同时,要提醒用户注意AI的局限性,比如可能存在的错误,需要批判性思考。 最后,整合这些思考到原方案中,确保每个阶段都有具体的AI工具应用案例,并给出资源链接或使用示例,让用户能够实际操作。例如,在阶段1的每日任务中,加入使用DeepSeek解决代码错误的步骤,或者在阶段3中使用AI工具优化模型结构。</think>以下是在原方案基础上整合 **DeepSeek** 等AI工具的创新学习方法,针对零基础学习者进行效率优化: --- ### **AI工具与学习场景的深度结合** #### **1. 概念理解与问答(替代传统搜索)** - **痛点**:零基础面对术语时,百度/谷歌结果常混杂过时或复杂解释。 - **AI方案**: - 用 **DeepSeek-Chat** 或 **Claude** 提问时,添加“用生活例子解释”指令,例如: ``` “请用做饭的步骤类比神经网络训练过程,限制300字内” ``` - 对数学公式,要求AI生成**可互动代码**(如梯度下降动态图): ```python # DeepSeek生成的可视化代码示例 import numpy as np import matplotlib.pyplot as plt def gradient_descent_demo(): # AI自动补充完整代码并注释关键参数 ``` - **推荐工具**: - [DeepSeek](https://www.deepseek.com/)(中文理解强) - [Phind](https://www.phind.com/)(技术问题精准解答) #### **2. 代码纠错与优化(替代Stack Overflow)** - **痛点**:新手报错信息看不懂,传统社区回复慢。 - **AI方案**: - 将报错信息+代码片段直接粘贴给**Cursor**(AI编程IDE): ``` "我的PyTorch代码在GPU训练时报错‘Tensor维度不匹配’,请指出问题并给出两种修改方案" ``` - 用 **GitHub Copilot** 自动补全重复代码(如数据预处理模板)。 - **操作技巧**: - 对AI生成的代码追加提问:“为什么这里要用`unsqueeze(0)`?” 强制输出原理注释。 #### **3. 学习路径动态调整(替代固定课表)** - **痛点**:统一课程无法匹配个人进度。 - **AI方案**: - 用 **ChatGPT** 定制周计划(需输入当前进度/困惑): ``` "我刚学完Pandas基础,想转向机器学习,请列一份3天Scikit-learn的计划,每天2小时" ``` - 用 **Notion AI** 自动将视频教程转**结构化笔记**(提取代码+核心公式)。 --- ### **分阶段AI增强学习示例** #### **阶段1:编程基础** - **AI应用场景**: - **概念学习**:用DeepSeek生成“变量与列表的比喻对照表”(如:变量=抽屉,列表=档案柜)。 - **代码练习**:在Replit中启用AI助手,实时提问“如何用Python实现数字猜谜游戏”。 #### **阶段2机器学习** - **AI应用场景**: - **数学辅助**:让AI将线性代数概念转为**几何动画代码**(如矩阵乘法可视化)。 - **项目实战**:输入Kaggle数据集描述,获取AI推荐的**特征工程方法清单**。 #### **阶段3:深度学习** - **AI应用场景**: - **模型调试**:将训练loss曲线截图传给AI,要求分析“是否过拟合+3种改进策略”。 - **论文读**:用**ChatPDF**上传Arxiv论文,直接提问“本文的创新点是什么”。 #### **阶段4:求职专项** - **AI应用场景**: - **面试模拟**:用**Mocker.ai**生成算法题变体(如“修改LeetCode第15题为链表形式”)。 - **项目包装**:输入GitHub链接,让AI生成**技术文档大纲**(背景→难点→成果)。 --- ### **AI工具资源清单(零基础友好型)** | 工具类型 | 推荐工具 | 使用场景 | 新手技巧 | |----------------|-------------------------------------|----------------------------------|----------------------------------------| | **代码辅助** | Cursor(智能IDE) | 自动补全/解释代码 | 开启“Ask AI”侧边栏直接提问 | | **交互学习** | ChatGPT+DALL·E 3 | 生成概念图解 | 提示词示例:“画一个神经网络训练流程图” | | **效率工具** | Notion AI | 整理学习笔记 | 对混乱草稿用“/fix grammar”一键优化 | | **领域定制** | DeepSeek(专注STEM) | 技术问题深究 | 提问时声明“请用初中生能懂的语言回答” | --- ### **AI学习法避坑指南** 1. **防止过度依赖**: - 设定“15分钟规则”——先用AI尝试解决,仍未理解则回归教材/视频。 2. **验证AI输出**: - 对关键代码用**CodeGeeX**(清华开源工具)交叉验证正确性。 3. **培养元能力**: - 每周用AI生成“自测题”(如:“解释过拟合的5种表现”),再让AI评分。 --- ### **效率对比实验(传统vs AI增强)** | 任务 | 传统方式耗时 | AI增强耗时 | 工具组合 | |--------------------|--------------|------------|------------------------------| | 理解反向传播 | 3小时+ | 40分钟 | DeepSeek解释+TensorFlow Playground实操 | | 配置PyTorch环境 | 2小时(易卡顿) | 20分钟 | Cursor自动生成环境修复命令 | | 简历项目描述优化 | 反复修改 | 5分钟 | ChatGPT润色+LaTeX模板生成 | --- 过AI工具,零基础学习者可**将理解效率提升3-5倍**,重点突破“卡壳点”,同时保留必要的手动实践环节以巩固基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值