我读完了这本机器学习实战,也就是那本蜥蜴书。想着写点什么,先讲讲机器学习分类吧
机器学习分类
机器学习分为;监督学习,无监督学习,半监督学习,自监督学习,强化学习
然后任务类型有,分类,回归,聚类,降维,生成
如果按照模型分:
线性模型:线性回归、逻辑回归
基于树的模型:决策树、随机森林、XGBoost
基于概率的模型:朴素贝叶斯、高斯混合模型
基于神经网络的模型:DNN、CNN、RNN、Transformer
基于图的模型:Graph Neural Network(GNN)
机器学习面临的困难有什么呢?
首先是数据数量不足,其次就是数据有,没有代表性数据。还有就是质量差的数据,
之后就是训练的数据过拟合和欠拟合。
分类
评价标准
分类首先得有考核标准,这里面就包括:准度,精度,召回率,F1,特异度。ROC AUC
然后就是混淆矩阵,这个可以通过行列快速看这个分类怎么样。有一个小tip,其实在这个混淆矩阵里特别容易看,混淆矩阵分TP FN FP TN。就是一个2 * 2的矩阵。我们看准确率的时候,是Accuracy = (TP+TN)/(FP+FN+TP+TN)
我们就可以记的时候,可以记成斜/全部,然后精度是TP/ TP + FP,召回率是 TP/TP +FN。分母也就是 “竖”“横”。分子都是TP。F1就是积在和上飞(鸡在河上飞)。
特异度当然就要单独记, TN / (TN + FP)
然后就是ROC和AUC就是模型整体区分能力。具体的可以自己查阅
多分类
然后就是有 多类别多分类,二分类就是要么是正,要么是负,很单一。但是往往有多个类别(猫、狗、鸟、鱼……)。
我们可以用二分类去拓展到多分类,这里就有OVA(为每个类别训练一个分类器,判断“是否属于该类)和OVO(为每对类别训练一个分类器。)。对了,这个多分类和多标签不一样,不要混淆! 多分类:一个样本只属于一个类(猫或狗或鸟);
多标签:一个样本可以属于多个类(猫+可爱+室内)。
然后当然这里补充一下,深度学习中多分类的 Softmax 输出层 实际就是一种 OVA 思想的极限形式。(可以不用理解先)
回归
说到回归就是预测连续值,本质上也就是拟合函数。
这里面有线性回归,和非线性回归
评价标准
公式可以自己找一下。
然后就是我们怎么找到这个最合适的函数,让模型参数沿着损失函数的梯度方向逐步下降,直到找到最低点。梯度下降是一种非常通用的优化算法。然后有三种
然后如果拟合不了,我们可以多项式回归去拟合
我们继续说正则线性模型。我本来这里想打公式的,就是普通线性回归当特征很多、存在噪声或多重共线性时,模型容易“过拟合”,也就是在训练集表现完美,但在新数据上崩溃。所以引入了正则化。我放一个表格,公式可以自己去查。
SVM支持向量机
我感觉svm是监督学习史上最优雅的算法之一
它有三种形态——线性分类、非线性分类、回归(SVR)
线性分类就是有一个最大间隔超平面然后给他们分开,使得它不仅能分对样本,还要离样本尽可能远。也就是硬间隔,但是现实数据通常不可完全线性可分,所以允许了少量违规,改了目标函数,也就是软间隔。
现实数据往往线性不可分。 于是 SVM 的妙计是:把数据“隐式”地映射到高维空间,让它线性可分。就是我们假设在某个高维度他们是能分开的,但是高纬度我们又没办法计算,所以这里面我们不直接计算 \phi(x),而只用内积,还有核函数。核函数就像魔法变换:在原空间是曲线,映射后变成直线。这里面设计对偶分析,和凸分析,所以可以自己学习一下数学原理。
之后就到了svm回归,SVM 不仅能分类,也能做回归任务。同样可以用核函数,SVR 的“支持向量”就是那些超出 ε 管的样本。
分类:找两类之间最宽的“间隔带”;
回归:找一条曲线,使大多数点都落在“ε管”内;
核技巧:让这条“线”在高维空间里变成“曲面”。
线性 SVM:最大化间隔的超平面; 非线性 SVM:通过核函数在高维实现线性分割; SVM 回归(SVR):用 ε 管道平衡精度与平滑度。
决策树
这也是监督学习,它其实不是在做矩阵代数,而是在不断分割数据空间。
也就是从输入特征中,逐步选择最能“区分”样本的特征进行分裂,直到叶节点上的样本足够纯(即几乎全属于同一类)。
然后CART是决策树的主流实现,在分类问题中使用基尼不纯度; 在回归问题中使用均方误差(MSE)。CART 每次分裂都遵循:选择一个特征和一个分裂点,使得左右子集的纯度最高。
这里面信息熵和就是混乱程度,基尼不纯度也就是表示从该节点随机抽两个样本,不同类别的概率。越小表示节点越纯。
这里面你会疑问,这个节点纯不纯有啥用。
想象你有个袋子,里面混着两种糖:
红糖代表“正类”;
蓝糖代表“负类”。
你想设计一个规则(比如“按甜度切分”)来把糖果分袋。 如果切完之后:
每个袋子里都是清一色的糖(要么全红,要么全蓝)——那说明你的规则很棒;
如果切完后,每个袋子仍然是红蓝混合的——那说明你的规则没起多大作用。
节点纯度(purity)就是衡量“袋子里是不是越来越干净”的指标。
这个算法很好,但是也要考虑这个计算复杂度的事情,我们假设样本n,特征m。 我们的树的总体的复杂度就是O(m n log² n),决策树比线性模型慢得多,但比神经网络快得多。
在之后就是,决策树容易过拟合,因为它能把训练集分得“非常纯”但泛化差。所以我们通过“剪枝”或“约束生长”正则化:
决策树的“回归”和“不稳定性”
回归
回归树预测值是区域内样本的均值, 它本质是一个分段常数函数: 每个叶子对应一个“区域”,区域内输出固定。
缺点:
不连续;
对输入微小变化非常敏感;
预测曲线是“阶梯形”。
不稳定性(High Variance)
决策树对数据扰动极其敏感:
换一两个样本,分裂特征可能完全不同;
不同样本顺序可能生成完全不同的树。
这就是高方差(high variance)问题。 解决方式:
Bagging(随机森林 Random Forest)
Boosting(如 XGBoost、LightGBM)
集成方法 = “多个不稳定学习器的平均”,从而稳健。
集成学习和随机森林
刚刚提到了集成学习,其实他的理念就是:单个模型不完美,但多个模型的平均会更稳。
随机森林是 Bagging + 随机特征选择 的自然扩展。随机森林能天然评估每个特征的重要性。
这里面,我们就得提到boosting家族, AdaBoost Gradient Boosting XGBoost。它们不是“并行平均”,而是“顺序强化”。 后一个模型专门修正前一个模型的错误。不依赖一个强模型,而是让多个“弱模型”(通常是浅层树)按顺序协作,每个都去纠正前一个的错误。
Boosting家族
三者在数学上的进化路线从“直接优化指数损失”到梯度下降最小化任意损失,再到加入二阶导+正则.
降维
最有意思的部分,降维我感觉是最哲学的,他在干什么,为什么要降维。
其实这是在问“高维世界里,哪些维度是真正重要的?"
现实世界往往都是高维度的,但是高维度有一个维度灾难,样本稀疏,计算量爆炸,很容易过拟合。但是其实那么多维度里面,我们其实只需要抓住其中的本质,某些个维度。
举几个例子:
一张人脸的像素有几万个维度,但“人脸变化”的主要因素(光照、角度、表情)不过十几个。
股票有几百只,但市场真正的“主因”(政策、经济周期、风险偏好)只有几个。
语音信号看似复杂,其实主要由频率成分和声道特性决定。
换句话说:
高维只是表象,低维才是本质。
降维就是从复杂的表面找到本质的结构变量。
降维方法
PCA 是最经典、最广泛使用的线性降维方法。 它的目标是:
找到一组新的正交坐标轴(主成分), 使得数据在这些方向上的方差最大。
最大化信息量 ≈ 最大化方差。
想象一群点在三维空间里沿着某条“细长的斜线”分布。 PCA 就像:
“找出那条最能代表数据延展方向的轴”, 然后把数据投影到那条轴上。
第一主成分:最大方差方向;
第二主成分:与第一正交,方差次大;
以此类推。
然后这边提一下PCA压缩,由于主成分是按方差排序的,我们可以只保留前 k 个。图像压缩、特征预处理、噪声消除中常用。
PCA的三种等价形式;
PCA的变体;
其他降维
不同降维的侧重点:
总结一句话
PCA 是“最大方差方向投影”, 是线性降维的代名词; t-SNE、LLE、UMAP 是它的非线性后继者; 它们共同回答:在庞大数据空间里,哪些维度最值得留下?
人工神经网络
终于到人工神经网络了,我们来整体说一下神经网络,神经网络其实就是模仿人的神经网络,然后你可能会问为什么要有神经网络?
传统机器学习(线性回归、逻辑回归、SVM)本质上都是线性模型, 它们能画直线、平面、超平面,但无法捕捉复杂的非线性关系。
现实世界几乎都是非线性的:
图片像素与“猫”之间的关系不是线性的;
声音波形与“人说的话”之间不是线性的。
于是我们构造一种模型:
把多个线性变换层层堆叠,中间加非线性激活,让模型能自动逼近任意函数。
这就是人工神经网络。
基本结构
一个最简单的神经网络由三部分组成:
输入层 → 隐藏层(若干) → 输出层每一层都有若干神经元(neuron),
终于要提到激活函数了,激活函数让神经网络能表示非线性关系。
前向传播
数据从输入层流向输出层,最后算到y
损失函数
反向传播
训练神经网络的关键:
用梯度下降法最小化损失函数。
反向传播是“链式法则”的大规模应用,每层的误差信号从输出往输入层传播,更新权重
训练过程(整体)
初始化参数(通常是随机小值)
前向传播计算预测 \hat{y}
计算损失 L(\hat{y}, y)
反向传播计算梯度
使用优化器(SGD / Adam 等)更新参数
重复直到收敛
优化器
决定了“如何下山”
万能逼近定理
理论上,一个两层(一个隐藏层)神经网络,就能逼近任意连续函数。 这称为万能逼近定理(Universal Approximation Theorem)。
直觉:
神经网络不是“写公式”,而是“学习函数形状”。
深层网络语表示学习
当我们堆叠多层隐藏层后:
第一层提取简单特征(边、线条);
第二层提取组合特征(形状);
更深层提取语义(猫、狗、人)。
这种分层特征学习能力,就是“深度学习(Deep Learning)”的精髓。
神经网络的主要问题
神经网络类型
还是一句话总结:人工神经网络是用数学模拟神经元连接的非线性函数系统, 通过前向传播学习输入到输出的复杂映射, 通过反向传播不断自我调整, 最终让“算法”具备了学习函数形状的能力。
深度神经网络
我们继续说这个问题,就是梯度消失和梯度爆炸。在反向传播中,梯度要层层乘上每一层的权重矩阵和激活函数导数。如果每一层导数和权重略小于一,特别多层之后就会变成0,如果都略大于 1,则梯度指数级爆炸。说一下解决方法
解决方式
保持前向信号和反向梯度在各层之间的方差尽可能恒定
有xavier初始化和He初始化
Xavier → 适合“双边激活”函数(Sigmoid / tanh)。He → 适合“单边激活”函数(ReLU 及其变体)。
在之后就是使用非饱和的激活函数,如ReLU系列的
还有就是批量归一化,在每层中,对每个 mini-batch 的输入标准化(均值=0,方差=1),然后再学习两个可训练参数(scale γ, shift β)恢复分布。可以说就是在每一层加入了一个“稳压器”。
快速优化器
深度学习训练的“加速核心”——就像不同的“赛车引擎”,这些优化器和学习率调度器让网络更快、更稳、更聪明地收敛。
普通的梯度下降容易陷入局部最小值;在陡峭或弯曲的损失面上收敛慢;同方向反复震荡(尤其在深谷形区域)
然后我们发明了Momentum 动量法,普通 SGD 像“光脚走山路”,每次都被地形拖慢。Momentum 像“给梯度加惯性”,让更新方向更平滑。
在之后,普通动量先“看梯度再走”,Nesterov 是“先走一步再看梯度”:“预判”未来的方向;避免过冲;收敛更快、更稳定。
在之后又发明了AdaGrad,不同参数学习速度不同,给每个参数单独调学习率。AdaGrad = 自适应步长 + 记忆所有历史梯度。常更新的参数(大梯度)→ 学习率减小;少更新的参数 → 学习率保持大;适合稀疏特征(NLP、推荐系统)。
在这个基础上又有RMSProp解决 AdaGrad 学习率“衰减过快”问题。只保留梯度平方的指数加权平均,而不是全部累加。自适应学习率;适合非平稳目标(如循环网络);不会像 AdaGrad 那样衰减到 0。
最后是Adam(Adaptive Moment Estimation)
也就是集大成者:Momentum + RMSProp, 同时跟踪:
一阶动量(梯度的平均);
二阶动量(梯度平方的平均)。
收敛快;对超参数不敏感;适合深度网络。Adam 就像:Momentum 加速、RMSProp 控制方向,两者融合的混合动力引擎。
学习率调度
这里补充这个概念
即使有强优化器,学习率 η 仍是关键。固定学习率可能:
太大 → 震荡;
太小 → 收敛慢。
常见策略:
整体进化发展
正则化
当模型太强、参数太多、数据太少时,它会把训练集的噪声和偶然模式也当作“规律”去学。
我们就有这个正则化,
提前停止
不让模型“学太久”。 当验证集误差开始上升时,立即停止训练。
L1 / L2 正则化
在损失函数中加入对参数规模的惩罚项。
Dropout(随机失活)
在训练过程中随机“关闭”一部分神经元连接,防止它们彼此过度依赖(co-adaptation)。类似集成学习(ensemble);强制网络学出冗余表示;大大提升泛化能力
最大范数约束
限制每个神经元权重向量的长度(L2 范数上限),防止权重无限增大;稳定训练;常与 Dropout 搭配使用。
数据扩充
既然模型太会记,那就多给它“变化的题目”。图像:旋转、平移、缩放、翻转、加噪声;文本:同义词替换、随机删除;语音:变速、加背景噪音。可以增强样本多样性;减少模型记忆训练集细节;逼近“真实世界分布”。
现代神经网络
可以开始炼丹了!!!
现代神经网络的“黄金组合”是: He 初始化 + GELU 激活 + LayerNorm + AdamW + Cosine 调度 + Dropout + Weight Decay。是目前几乎所有主流架构(ResNet、Transformer、ViT、BERT、GPT)的基础。
卷积神经网络
为什么要卷积?
在全连接网络(MLP)中,每个神经元都与前一层所有神经元相连。 图像输入若是 256 \times 256,那就是 65,536 个特征, 一层 100 个神经元就有 650 万个参数——非常庞大。
而且图像像素之间是局部相关的(例如边缘、角、纹理),并不需要每个神经元都看全图。
于是我们引入 “局部感受野 + 权重共享”,这就是卷积层的核心思想。
卷积层
卷积层通过一个小滤波器(kernel)滑动在输入上,计算点积形成特征图(feature map)。
池化层
在保持主要特征的同时,降低维度和计算量,并提升模型的平移与尺度不变性。
通用架构
输入 → [卷积层 + 激活 + 池化]*N → 全连接层 → Softmax 输出
在深层网络中还会加:BatchNorm / LayerNorm, Dropout, 残差连接(ResNet)
发展过程
LeNet-5 ---> AlexNet ---> GoogLeNet ---> ResNet
ResNet 是分水岭,之后的设计都是“在它的肩膀上进化”。具体可以去查询了解
本质思想
局部感受野 → 捕捉空间相关性
权重共享 → 减少参数
层级抽象 → 从边缘到语义
多尺度融合 → Inception
跨层传梯 → ResNet
CNN 就像一个层层递进的“视觉系统”: 先看线条 → 再看形状 → 再看对象。
卷积层 负责“提特征”; 池化层 负责“压信息”; 全连接层 负责“判类别”;
循环神经网络
刚刚卷积是视觉王国,现在是序列的王国
传统神经网络(MLP、CNN)一次只能处理固定长度、独立样本。但许多现实任务都是时间相关、可变长的。所以RNN诞生了。
当前时刻的输出不仅取决于当前输入,还取决于上一个时刻的隐藏状态。
把循环结构展开就变成一个深层网络。其中同一个权重 W_{hh} 被重复使用——这叫 参数共享。 每个时间步都“继承”前一步的状态。
训练 RNN 时要反向传播跨越时间维度,这称为:BPTT(Backpropagation Through Time)。当权重或激活导数 < 1 → 梯度逐渐变小(梯度消失)当它们 > 1 → 梯度指数放大(梯度爆炸)。这正是原始 RNN 难以训练的核心问题。
RNN缺陷:
所以有人提出了LSTM,让网络自己决定哪些信息记住、哪些忘掉。
后有GRU简化了LSTM GRU把三个门合并为两个:
更新门 (Update Gate):控制记忆保留比例
重置门 (Reset Gate):控制遗忘旧信息的程度
公式更简单、计算更快,性能接近 LSTM。
GRU ≈ “LSTM 的小巧版”,更适合实时或小模型场景。
RNN架构
强化学习
它不是被动模仿(监督学习),也不是单纯发现规律(无监督学习),而是靠试错与奖励去摸索策略。 这让它在博弈、游戏、机器人控制、自动驾驶等任务上成为真正的“决策智能”核心。我这里也是简略讲一下
一、强化学习的基本构成
强化学习的世界可以抽象为一个交互循环:
智能体(Agent) ⇄ 环境(Environment)每个时间步:
Agent 观察环境状态 s_t
执行动作 a_t
环境反馈奖励 r_t,并转移到新状态 s_{t+1}
Agent 更新策略,让未来回报最大化
目标是学一个策略函数 π(a|s), 使得累计期望奖励最大化:
强化学习三大核心要素
策略;价值函数;奖励函数
进化阶段
其他大多数机器学习都是经验论,通过已有的数据去总结规律,我们从哲学角度来看强化学习,强化学习不是描述世界,而是行动于世界,以目的为导向地改变世界。
强化学习是一种基于奖励的自我改进机制: 它不依赖标签,而依赖后果; 它不模仿,而是探索; 它不追求“每步正确”,而追求“长期最优”。
“它学的不是答案,而是——怎么赢。”
评论