人工智能与机器学习复习汇总
考试题型为:简答题,论述题,计算题。针对复习提纲中涉及的一些知识点,在这里我们做一个简单的快速回顾。
观前提示:针对于会出计算题的知识点,我会在其他文件中给出具体算法和相应解题示例。
MLPR-第2讲 机器学习基本方法入门
K近邻法(K-Nearest Neighbors, 简称 KNN)是一种最基础且直观的监督学习算法。
基本原理
当需要对一个新的数据样本进行预测时:
- 计算距离:计算该新样本与训练集中所有样本之间的距离(常用的如欧氏距离)。
- 寻找邻居:根据距离排序,找出距离最近的 K 个样本。
- 做出决策如下:
- 分类任务:采用多数表决法(Voting)。K个邻居中,哪个类别的数量最多,新样本就被归为哪一类。
- 回归任务:采用平均法(Averaging)。计算K个邻居的标签值的平均值,作为新样本的预测值。
关键要素
KNN算法的效果主要取决于以下三个方面:
- K值的选择:
- K太小(如K=1):模型太复杂,容易受噪声干扰,发生过拟合。
- K太大:模型太简单,忽略了局部特征,容易发生欠拟合。
- 通常通过交叉验证来选择最优的K值。
- 距离度量:衡量样本相似度的方法。最常用的是欧氏距离(Euclidean Distance),此外还有曼哈顿距离、闵可夫斯基距离等。
- 分类决策规则:通常是多数表决,也可以根据距离远近进行加权投票(距离越近权重越大)。
- K值的选择:
主要特点:KNN属于懒惰学习(Lazy Learning),也就是说KNN 没有显式的“训练”过程。它只是把训练数据存起来,直到有新数据来预测时才开始计算。因此训练时间为0,但预测时间较长。
优缺点分析
- 优点:
- 原理简单,直观易懂,易于实现。
- 对异常值(Outliers)不敏感(当K值适中时)。
- 既能用于分类,也能用于回归。
- 缺点:
- 计算量大:每次预测都要计算与所有训练样本的距离,速度慢,不适合大数据集。
- 内存开销大:需要存储所有训练数据。
- 对数据尺度敏感:如果不同特征的数值范围差异很大(例如身高以米为单位,体重以克为单位),必须先进行数据归一化,否则数值大的特征会主导距离计算。
线性回归(Linear Regression)
核心概念
定义:一种利用回归方程(函数)对一个或多个自变量(特征)和因变量(目标值)之间的关系进行建模的监督学习算法。
核心思想:试图找到一条直线(或超平面),使得所有样本点到这条直线的欧氏距离之和(误差)最小。
一元线性回归
假设只有一个自变量 x 和一个因变量 y,则我们可以设x, y服从如下方程: y = wx + b + ϵ 其中,w是回归系数,b是截距,ϵ是随机误差(通常假设服从正态分布)。进而,我们做出预测,预测模型为: ŷ = wx + b 那么我们也面临着一个问题,也就是如何评价这个预测模型的好坏,我们需要引入一个指标来定量刻画。这个指标就是均方误差 (MSE)和残差平方和(RSS),为了使模型具有更好的预测能力,我们的目标就是最小化残差平方和(RSS),即使如下式子值最小: $$ J(w, b) = \sum_{i=1}^{m} (y_i - \hat{y}_i)^2 = \sum_{i=1}^{m} (y_i - (wx_i + b))^2 $$ 显然,学过高等数学的同学知道,这是对一个二元连续函数在约束条件下求最值的问题,利用偏导等于零即可解决,这里便不过多赘述推导过程,读者自证不难。由此,我们可以得到当参数取如下值时,模型效果最好。 $$ w = \frac{\sum_{i=1}^{m} (y_i - \bar{y})(x_i - \bar{x})}{\sum_{i=1}^{m} (x_i - \bar{x})^2}\\ b = \bar{y} - w\bar{x} $$ 其中,ȳ, x̄是对应取值集合的平均数。
多元线性回归
假设有 n 个特征(自变量),一个因变量 y,设其回归方程为: ŷ = w1x1 + w2x2 + ⋯ + wnxn + b 利用线性代数中学习的矩阵,我们进一步简化表示形式。 Ŷ = XW 其中,$\hat{Y}=(\hat{y_1},\hat{y_2},\cdots,\hat{y_m})^T,W=(b, w_1, w_2,\cdots, w_n)^T=(w_0, w_1, w_2,\cdots, w_n)^T$,这里我们将b替换为w0,统一符号风格。X为增广矩阵,扩展了一列1,具体表示如下: $$ X = \begin{pmatrix} 1 & x_{1}^{(1)} & x_{1}^{(2)} & \cdots & x_{1}^{(n)} \\ 1 & x_{2}^{(1)} & x_{2}^{(2)} & \cdots & x_{2}^{(n)} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 1 & x_{m}^{(1)} & x_{m}^{(2)} & \cdots & x_{m}^{(n)} \end{pmatrix} $$ 每一行代表一个样本,每一列代表一个特征。第一列的1是为了和权重向量中的截距项相乘。与一元线性回归类似,我们的目标也是最小化残差平方和(RSS),即使如下式子值最小: J(W) = (Y − XW)T(Y − XW) 简单来说,就是求矩阵偏导,然后令梯度为零。同样,由于篇幅原因具体推导过程略去,直接给出结论。
通过正规方程 (Normal Equation)直接求解最优 W,易得: Ŵ = (XTX)−1XTY 显然,使用正规方程求解时,要求矩阵 (XTX) 是可逆的(满秩矩阵)。
不可逆的情况:
- 特征数量多于样本数量 (n > m)。
- 特征之间存在严重的多重共线性(Multicollinearity),即某个特征可以由其他特征线性表示。
如果数据量巨大(X 很大),计算 (XTX)−1 非常耗时,我们通常改用梯度下降法 (Gradient Descent)进行迭代求解。
因为计算机计算矩阵的逆是比较费时的,尤其是在数据量非常庞大的情况下。
方法 正规方程 (Normal Equation) 梯度下降 (Gradient Descent) 原理 解析解,一步到位 迭代解,逐步逼近 学习率 不需要 需要选择 (α) 复杂度 O(n3),计算量大 O(n2) 或更低 适用场景 小数据量 (n < 10000) 大数据量 在求解对应回归方程之前,我们会计算样本相关系数r(Pearson Correlation Coefficient),判断相关性,具体计算方式如下: $$ r = \frac{\sum_{i=1}^{n} (x_i - \bar{x})(y_i - \bar{y})}{\sqrt{\sum_{i=1}^{n} (x_i - \bar{x})^2} \sqrt{\sum_{i=1}^{n} (y_i - \bar{y})^2}} $$ r的符号与绝对值含义如下:
- r > 0 (正相关):X 增大,Y 也倾向于增大(散点图呈左下到右上趋势)。
- r < 0 (负相关):X 增大,Y 倾向于减小(散点图呈左上到右下趋势)。
- r = 0 (无相关):X 和 Y 之间不存在线性关系。
- |r|的值越接近于1,表明相关性越强。
数据模型的泛化能力、过拟合与欠拟合
总而言之,这三个概念描述了模型在训练数据和未知数据上的表现状态,核心在于“模型复杂度”与“预测误差”之间的权衡。
- 泛化能力 (Generalization Ability)
- 定义:模型对未见过的新数据(测试集/真实场景数据)的预测能力。
- 核心目标:机器学习的目的不是为了在训练集上得满分,而是为了获得最强的泛化能力。
- 泛化误差:模型在测试集上的误差。泛化误差越小,模型越好。
- 欠拟合 (Underfitting)
- 表现特征:训练集表现差,测试集表现也差。
- 根本原因:模型复杂度过低,无法捕捉数据中的特征关系。
- 解决方案:
- 增加模型复杂度:例如从线性模型换成多项式回归、决策树、神经网络。
- 增加特征:挖掘更多的输入特征,添加多项式特征。
- 减小正则化系数:如果用了正则化,尝试减小 λ,让模型更自由地拟合。
- 过拟合 (Overfitting)
- 表现特征:训练集表现极好,误差极低,甚至为0;但是测试集表现很差。
- 根本原因:模型复杂度过高,参数太多,数据量太少。
- 解决方案:
- 增加数据量:最有效的方法,让模型见到更多样本。
- 降低模型复杂度:简化网络结构,减少决策树深度等。
- 正则化 (Regularization):加入 L1 或 L2 正则项(惩罚参数过大)。
- 特征选择:去掉无关特征,减少维度。
- 早停法 (Early Stopping):在训练误差还在下降但验证误差开始上升时,停止训练。
- Dropout(深度学习特有):随机让部分神经元失活。
MLPR-第3讲 线性判别分析
判别函数
判别函数的定义(直接用来对模式进行分类的决策函数):若分属于ω1, ω2两类的n维模式在空间中的分布区域,可以用一代数方程d(X) = 0决定的超平面作为分隔面,两类样本分布在分隔面的两侧,那么就称d(X)为判别函数(discriminant function)或称决策函数(decision function)。代数方程d(X) = 0表示的是n维空间的(n-1)维判决面 (或超平面(hyperplane)或超曲面(hypersurface) ,视d(X)形式而定)。
正如定义中所说的,我们将所有模式(样本)映射为n维空间的坐标点,判别函数就是找到一个分界面,能够将分属不同类别的样本区分开。由于这门课面向全校学生开设,所以之后我们将主要讨论线性分类算法,线性分类算法所找到的判别函数即为超平面(hyperplane)。
线性可分概念与线性分类算法:一个分类问题是否属于线性可分,取决于是否有可能找到一个点、直线、平面或超平面来分离开两个相邻的类别。如果每个类别样本的分布范围本身是全连通的单一凸集,且互不重叠,则这两个类别一定是线性可分的。
线性分类算法主要有线性判别函数、Fisher判别分析、单层感知器、逻辑回归等。
举个例子吧,一个二维的两类判别问题,共有ω1, ω2两类模式。显而易见,我们可以用二维平面的一条直线来划定不同类别的分界线,所以这个例子中的判别函数为: d(X) = w1x1 + w2x2 + w3 式中的x1, x2即为模式的特征,w1, w2, w3为判别函数的待定参数。
判别函数正负值的设定:判别面的正负侧,是在训练判别函数的权值时人为设定的。但是一旦设定后,训练好的模型(分隔面)的正负侧就是确定的,而且由判别函数的梯度向(矢)量确定。
还是用上面的那个二维两类判别问题来举例分析,我们确定判别函数后,规定d(X) > 0, X ∈ ω1,d(X) < 0, X ∈ ω2。
那万一刚好d(X) = 0呢?也就是说,一个待分类的样本直接落在了判别函数上。这个时候有两种处理方法:一是X ∈ ω1或X ∈ ω2;二是拒绝对X分类。
确定判别函数的两个因素:
判决函数d(X)的函数形式:它可以是特征的线性或非线性的函数。
判别函数的不同类别:
线性判别函数:包括了线性判别函数,广义线性判别函数和分段线性判别函数。
广义线性判别函数:是指把非线性判别函数映射到另外一个空间变成线性判别函数。
非线性判别函数
判决函数d(X)的系数:用所给的模式样本,通过优化准则确定。
我们主要介绍线性判别函数。一个一般的n元线性函数应该具有什么的性质才适合做两分类和多分类的判别函数
线性判别函数
这个部分我们将对两类问题和多类问题进行讨论。
两类问题,即ωi ∈ {ω1, ω2}
二维情况:特征向量为二维向量,即X = (x1, x2)T, n = 2。由上可知,这种情况下的线性判别函数为 g(x1, x2) = w1x1 + w2x2 + w3 在二类别情况下,判别函数g(x1, x2)具有以下性质: $$ g(x_1,x_2)\begin{cases} >0 & X\in \omega_1 \\ =0 & X不定 \\ <0 & X\in \omega_2 \end{cases} $$
n维情况:现提取n个特征,特征向量为n维向量,X = (x1, x2, ⋯, xn)T。与上类似,这种情况下的线性判别函数为 g(x1, x2, ⋯, xn) = w1x1 + w2x2 + ⋯ + wnxn + wn + 1 这个判别函数看起来比较长,所以我们可以利用线性代数中矩阵的运算来进一步简化表达式。
我们设权向量为W0 = (w1, w2, ⋯, wn)T,模式向量为X = (x1, x2, ⋯, xn)T,则判别函数可改写为: g(X) = W0TX + wn + 1 更进一步地,设增广权向量为W = (w1, w2, ⋯, wn, wn + 1)T,增广模式向量为X = (x1, x2, ⋯, xn, 1)T,则判别函数可改写为: g(X) = WTX 与二维情况类似,判别函数同样具有类似性质,在此便不过多赘述。
g(x) = WTX = 0为判别边界/决策边界(decision boundary)。当n = 2时,二维情况的判别边界为一直线;当n = 3时,判别边界为平面;当n > 3时,则判别边界称为超平面(Hyperplane)。
多类问题,即ωi ∈ {ω1, ω2, ⋯, ωm}
对于多类问题,我们可以分为三种情况讨论:
$\omega_i/\overline{\omega_i}$是非两分法:每一模式类与其他模式类间可用单个判别函数把一个类分开。这种情况,m类可有m个判别函数,且具有以下性质: $$ g_i(X)=W_i^TX\begin{cases} >0 & X\in \omega_i \\ =0 & X不定 \\ <0 & X\in \omega_j,j\neq i \end{cases} $$ 式中Wi = (wi1, wi2, ⋯, win, wi(n + 1))T为第i个判别函数的增广权向量。
这种分类方法还是基于两类问题的推广,具体来说就是,在具体对某个模式进行分类时,我们只关注这个模式是属于当前与之比较的类别ωi还是不属于这个类别。所以我们可以将不是当前考虑类别ωi之外的所有类别划分为一个类别,即$\overline {\omega_i}$。我们只需要对所有类别做一次遍历,就可以得到待分类样本X的类别了。
ωi/ωj成对两分法:每两个模式类间可用判别平面分开(即模式类成对可分)。
这样的话,我们就有$C_m^2=\frac{m(m-1)}{2}$个判别平面。比如,两类问题就会有一个判别平面,三类问题就会有三个判别平面。
具体的判别函数为: $$ g_{ij}(X)=W_{ij}^TX\begin{cases} >0 & X\in \omega_i \\ =0 & X不定 \\ <0 & X\in \omega_j \\ \end{cases} $$ 式中Wij = (wij1, wij2, ⋯, wijn, wij(n + 1))T为ωi/ωj之间判别函数的增广权向量。
不加证明地,显然有gij(X) = −gji(X), Wij = −Wji成立,读者自证不难。
ωi/ωj成对两分法(无IR区):每类都有一个判别函数, 存在m个判别函数。
就是说,要判别模式X属于哪一类,先把X代入m个判别函数中,判别函数最大的那个类别就是X所属类别。类与类之间的边界可由gi(x) = gj(x)或gi(x) − gj(x) = 0来确定。具体的判别函数为: $$ g_{i}(X)=W_{i}^TX\begin{cases} 最大 & X\in \omega_i \\ 小 & X\in \omega_j,j\neq i \\ \end{cases} $$
线性判别函数的性质
模式空间与加权空间:线性判别函数的一般形式如下 g(X) = W0TX + wn + 1 = WTX 模式空间是指由X = (x1, x2, ⋯, xn)T构成的n维欧式空间;加权空间是指由W = (w1, w2, ⋯, wn, wn + 1)T构成的(n + 1)维欧氏空间。
超平面的几何性质:g(X) = W0TX + wn + 1 = WTX = 0代表了一个n维欧式空间中的超平面H(Hyperplane),借由三维空间平面方程类比可超平面的一些几何性质。
- W0与H正交,即权向量W0为该超平面的法向量。
- 样本x到超平面H的正交投影数量∥r⃗∥正比于g(x)的绝对值。
- 坐标原点到超平面H的距离与wn + 1的绝对值成正比。
线性分类器设计
前面我们讨论了线性判别函数形式:g(X) = WTX,其中X = (x1, x2, ⋯, xn, 1)T, W = (w1, w2, ⋯, wn, wn + 1).
通常通过特征提取可以获得模式的n维特征向量。对于线性判别函数,当模式的维数已知时,判别函数的形式实际上就已确定,剩下的问题就是确定权向量W,只要求出权向量,分类器(Classifier)设计即告完成。求解权向量的过程就是分类器的训练过程,使用已知类别的有限学习样本来获得分类器的权向量W被称为有监督分类/学习(Supervised classification/learning)。
结合具体实例进行分析,对二类判别函数g(x1, x2) = w1x1 + w2x2 + w3,已知训练集{Xa, Xb, Xc, Xd},样本为二维特征向量。且X ∈ ω1时,g(X) > 0;X ∈ ω2时,g(X) < 0,现在我们已知Xa, Xb ∈ ω1, Xc, Xd ∈ ω2,所以将其代入判别函数之中,得到如下不等式:
$$ \begin{cases} w_1x_{a1}+w_2x_{a2}+w_3>0\\ w_1x_{b1}+w_2x_{b2}+w_3>0\\ w_1x_{c1}+w_2x_{c2}+w_3<0\\ w_1x_{d1}+w_2x_{d2}+w_3<0\\ \end{cases} $$
好的,我们的目标是从上述不等式组中求出符合条件的增广权向量W = (w1, w2, w3)T。
具体求解过程如下:
首先我们对不等式正规化: $$ \begin{cases} w_1x_{a1}+w_2x_{a2}+w_3>0\\ w_1x_{b1}+w_2x_{b2}+w_3>0\\ -w_1x_{c1}-w_2x_{c2}-w_3>0\\ -w_1x_{d1}-w_2x_{d2}-w_3>0\\ \end{cases} $$ 其次,借由线性代数知识,简化上述不等式组,得到XW > 0,其中W为增广权向量,X为各模式增广矩阵,具体如下: $$ X=\begin{pmatrix} x_{a1}&x_{a2}&1\\ x_{b1}&x_{b2}&1\\ -x_{c1}&-x_{c2}&-1\\ -x_{d1}&-x_{d2}&-1\\ \end{pmatrix} $$ 一般情况下,各模式增广矩阵为N × (n + 1)矩阵,N为样本数,n为特征数。我们的目标就是求解符合条件的增广权向量W = (w1, w2, w3)T。
但是,联立方程的解是非单值,在不同条件下,有不同的解,所以就产生了求最优解问题。求解W的过程就是训练的过程。训练/学习方法的共同点是,先给出准则函数(Criterion function),再寻找使准则函数趋于极值的优化算法(Optimization algorithm),不同的算法有不同的准则函数。算法可以分为迭代法和非迭代法。
梯度下降法
首先我们快速回顾一下梯度的概念:对于一个一般形式的多元函数f(x1, x2, ⋯, xn),它的梯度为如下表达 $$ \nabla f = (\frac{\partial f}{\partial x_1},\frac{\partial f}{\partial x_2},\cdots,\frac{\partial f}{\partial x_n})^T $$ 在高等数学的学习中,我个人理解梯度代表了函数值增长最快的自变量方向。这句话有点绕,不妨举个具体例子分析一下。
假设现在我们有一个二元函数:z = f(x, y) = x + y。对其求梯度得到向量∇f = (1, 1),表明当自变量组成的向量(x, y)在这个方向上的函数值增长的最大,沿着相反方向自然就是函数值减少越快了。
根据梯度的这点性质,我们可以得到:当某点梯度为0时,该点很有可能是极值点,对应的函数值很有可能是极值。
前置知识回顾结束,我们开始正式求解增广权向量的最优解。
对于解决问题的思路,我们考虑:将联立求解不等式W的问题,转换为求准则函数极小值的问题。用负梯度的值对权向量W进行修正,从而实现准则函数达到极小值的目的。
所以我们需要人为构造一个函数,即准则函数J(W)。我们将W增广权向量作为函数自变量,在每一次迭代中,参数的更新规则如下: $$ W_{new} = W_{old} - \eta \cdot \frac{\partial J}{\partial W} $$ 学习率的选择 (η)
- 太大: 步子太大,可能会越过最低点,甚至导致损失函数发散(越来越大)。
- 太小: 步子太小,收敛速度极慢,需要极长的训练时间。
- 策略: 可以使用学习率衰减(随着迭代次数增加减小学习率)或自适应学习率算法(如 Adam, RMSprop)。
Fisher 线性判别分析
Fisher 线性判别分析是线性分类器设计中与梯度下降法完全不同的一条思路。
Fisher 法的直观思想是:降维。我们希望找到一个投影方向(向量 w),把所有高维数据点投影到这条直线上。
好的投影方向必须满足两个条件(Fisher 准则): 1. 类间距离最大化 (Maximize Between-Class Scatter): 不同类别的中心点离得越远越好。 2. 类内方差最小化 (Minimize Within-Class Scatter): 同一类别的数据点越紧凑(聚在一起)越好。
数学推导
假设我们有两类数据,类别 1 的均值为 μ1,类别 2 的均值为 μ2。
我们要找到向量 w,使得投影后的数据满足上述两个条件。定义目标函数 J(w): $$ J(w) = \frac{(\tilde{\mu}_1 - \tilde{\mu}_2)^2}{\tilde{s}_1^2 + \tilde{s}_2^2} $$
- 分子 (μ̃1 − μ̃2)2:投影后两类均值的距离(越大越好)。
- 分母 s̃12 + s̃22:投影后两类的方差之和(越小越好)。
为了求解,我们将上述公式转化为矩阵形式: * 类内散度矩阵 (Within-class Scatter Matrix) Sw: 衡量数据在各自类内部的离散程度。 * 类间散度矩阵 (Between-class Scatter Matrix) SB: 衡量两类中心之间的距离。
目标函数重写为: $$ J(w) = \frac{w^T S_B w}{w^T S_W w} $$ 这是一个广义瑞利商问题。通过求导并令导数为 0,我们可以直接得到闭式解 (Closed-form Solution),而不需要像梯度下降那样迭代求解: w* ∝ SW−1(μ1 − μ2) 公式含义: 最佳投影方向 w 等于 (类内散度矩阵的逆) 乘以 (两类均值之差)。
- 如果 SW 是单位矩阵(意味着数据分布是球状的),那么 w 就是简单的连接两个中心点的连线。
- SW−1 的作用是“修正”数据的分布形状(考虑协方差),消除数据相关性的影响。
虽然 Fisher 法数学上很优美,但在现代机器学习(特别是深度学习)中,梯度下降法占据了统治地位,原因如下:
- 矩阵求逆太慢: 当特征维度很高(例如图像有 10,000 个像素)时,计算 10000 × 10000 矩阵的逆 (SW−1) 非常耗时且耗内存。
- 非凸与非线性: Fisher 法主要针对线性问题。虽然可以通过核函数 (Kernel LDA) 扩展,但在处理复杂的非线性神经网络时,梯度下降法(配合反向传播)更加灵活通用。
- 在线学习 (Online Learning): 梯度下降可以来一个数据学一个 (SGD),适应数据流;Fisher 法通常需要一次性拿到所有数据来计算全局的均值和方差。
MLPR-第4讲 概率分类
贝叶斯决策的引入
贝叶斯决策理论的引入,本质上是在不确定性环境下,提供一种将先验知识、观测数据与决策代价统一融合的理性决策框架。它解决了频率学派方法在小样本、高代价、需解释性场景下的根本局限。
这里涉及到了概率统计中的两个常见学派:频率学派和贝叶斯学派。
频率学派认为,概率是客观的“频率”,即在无限次重复实验中,某个事件发生的相对频率的极限。
贝叶斯学派认为,概率表示我们对某件事发生的信任程度。概率是主观的,换个说法是基于现有信息的逻辑推断,它随着我们获取新的信息而不断更新。
所以,我们引入贝叶斯决策就是让模型可以结合已知的信息不断地动态更新,从而做出在当前情况下的理性决策,而非是单纯的数据拟合。
为了更好的论述后面的贝叶斯决策过程,我们在这里简述一下贝叶斯学派的核心数学工具,核心的公式如下所示。这个部分有的同学高中数学应该接触过了。 $$ P(A\mid B)=\frac{P(AB)}{P(B)}=\frac{P(B\mid A)\times P(A)}{P(B)} $$ 对于这个公式的解读是多种多样的,网上有较多的相关文章论述,在此只表明一下我个人的理解:贝叶斯公式代表着是一种“执果溯因”的思想,我们可以直接观察到P(A ∣ B),也就是A在B发生的条件下发生的概率,这是果。我们追溯的因是由B导致A发生的概率是多少,即P(B ∣ A)。
最小错误率贝叶斯决策
该决策的核心目标是:我们在做分类(决策)时,目的是让总的平均错误率(Average Probability of Error)降到最低。
- 决策规则
假设有一个样本 x,我们要判断它属于哪一个类别ωi,其中ωi ∈ {ω1, ω2, ⋯, ωn}。
规则: 计算样本 x 属于各个类别的条件概率 P(ωi|x),然后选择概率最大的那个类别作为样本所属的类别。
证明过程
条件概率 P(ωi|x) 的含义是:在观测到 x 的情况下,它真实属于类别 ωi 的概率。对应而言,如果我们判定 x 属于 ω1,那么犯错的概率就是$P( | x) = 1 - P( _i| x) 。为了使错误率最小,自然就要让决策正确的概率最大,也就是P(_ix)$最大。
实际计算
在实际应用中,我们通常无法直接得到后验概率,而是通过先验概率和似然算出来的。根据贝叶斯公式,我们有: $$ P(\omega_i \mid x) = \frac{P(x \mid \omega_i) \cdot P(\omega_i)}{P(x)} $$ 因为对于所有类别来说,分母 P(x)(证据)都是一样的,所以在比较大小时可以忽略。决策规则转化为比较分子大小: P(x ∣ ωi)P(ωi) > P(x ∣ ωj)P(ωj) 其中,先验概率 P(ωi): 在没看样本之前,这个类别出现的概率;似然 P(x|ωi): 如果属于这个类,出现这个样本 x 的可能性。
最小风险贝叶斯决策 最小风险贝叶斯决策是在最小错误率贝叶斯决策基础上的推广,我们不但要考虑降低错误率,还要考虑犯错付出的代价。这也比较好理解,因为并非每种错误的代价是等同的。
损失函数
因为我们需要考虑犯错所付出的代价,所以我们需要引入一个可以量化评估的指标,这个指标就是损失函数,通常记为λij 或 λ(αi, ωj)。
含义:当真实类别是 ωj,但我做出了决策 αi ,即判断所属为ωi时,我需要付出的代价。
通常情况下,当i = j的时候,此时我们的判断正确,故损失最小,代价为0(或者收益为负代价);当i ≠ j时,此时我们判断出错,代价为正值,且根据出错代价,大小需要设定。
决策逻辑
我们要计算每一个决策带来的“期望损失”,然后选风险最小的那个。假设观测到样本 x,如果我们决定把 x 归为 ωi 类(做出决策 αi),我们要承担的条件风险 R(αi|x) 是: $$ R(\alpha_i \mid x) = \sum_{j=1}^{n} \lambda_{ij} \cdot P(\omega_j \mid x) $$ 计算所有可能的决策 α 的风险,选择 R 最小 的那个。即$ _k R(k | x) = {i} R(_i | x) $
与“最小错误率决策”的关系
最小错误率决策,其实就是最小风险决策的一个特例。我们令损失函数为: $$ \lambda_{ij}=\begin{cases} 0&i=j\newline 1&i\neq j \\ \end{cases} $$ 把这个代入风险公式,你会发现:$ R P(_i | x) $,这就退化为之前学习的最小错误率决策。
朴素贝叶斯决策
前面我们介绍的两种决策方式,在理论分析上不存在什么困难,但在具体工程实现中具有一定的困难。所以我们提出朴素贝叶斯决策,该决策方式在之前提到的“最小错误率贝叶斯决策”的基础上,引入了一个大胆的“朴素”假设,从而极大地简化了计算复杂度。它常用于垃圾邮件分类、情感分析等文本处理领域。
朴素贝叶斯决策(Naive Bayes Classifier) 是贝叶斯决策论在工程应用中最简单、最经典的一种实现方法。
它在之前提到的“最小错误率贝叶斯决策”的基础上,引入了一个大胆的“朴素”假设,从而极大地简化了计算复杂度。它常用于垃圾邮件分类、情感分析等文本处理领域。
引入过程
在标准的贝叶斯公式中:$ P(_i ) P( _i) P(_i) $。如果样本 x 只有一个特征,这很好算。但在实际问题中,样本 x 通常是一个高维向量 x = (x1, x2, ..., xn)。比如在垃圾邮件检测中,x 包含几千个单词的出现情况。
这会带来一个很大的麻烦,计算联合概率密度 P(x1, x2, ..., xn ∣ ωi) 是很困难的。这是因为,特征之间可能会存在复杂的关联,所以统计所有特征组合的概率所需的数据量十分庞大,开销几乎是我们不可接受的。
所以,我们必须找到一个方法去加快计算过程。
朴素假设
我们不妨设所有的特征 x1, x2, ...xn 之间是相互独立的,从实际情况来看,这显然是不可能的,现实中特征通常是有关联。但从统计学出发,这个假设可以帮助我们简化公式,从而加快计算。
数学简化
基于上述我们做出的朴素假设,联合条件概率可以展开为如下形式: P(x1, x2, ⋯, xn ∣ ωi) = P(x1 ∣ ωi)P(x2 ∣ ωi)⋯P(xn ∣ ωi) 但是从实际情况出发,我们严谨地应该表示为如下式: P(x1, x2, ⋯, xn ∣ ωi) ≈ P(x1 ∣ ωi)P(x2 ∣ ωi)⋯P(xn ∣ ωi) 进一步地,将简化后得到的联合条件概率代入决策式后得到: $$ g(\mathbf{x}) = \text{argmax}_{\omega_i} \left( P(\omega_i) \cdot \prod_{j=1}^{n} P(x_j | \omega_i) \right) $$ 即选择某个ωi,使得上式得到的函数值最大,将其作为样本所属的类别。
MLPR-第6讲 支持向量机
支持向量机概述
支持向量机(Support Vector Machine, 简称 SVM) 是一种非常经典且强大的监督学习算法。尽管深度学习近年来非常流行,但 SVM 在中小规模数据集、高维数据分类问题上依然表现出色。SVM 的基本目标非常直观:在不同类别的数据之间,找到一个决策边界(超平面),使得这个边界距离最近的样本点尽可能远。
为了后面的讲述,这里先解释几个关键概念:
- 超平面 (Hyperplane): 在二维空间是线,三维空间是面,高维空间称为超平面。它是区分不同类别的决策边界。
- 支持向量 (Support Vectors): 离超平面最近的那些数据点。它们是“支撑”起这个边界的关键点。如果删除了其他数据点,边界不会变;但如果移动了支持向量,边界就会改变。
- 间隔 (Margin): 支持向量到超平面的距离。SVM 的数学目标就是最大化这个间隔(Max Margin)。间隔越大,模型的泛化能力通常越强(越不容易过拟合)。
优点:
- 高维数据表现好: 即使特征数量比样本数量还多(例如文本分类、基因数据),SVM 依然有效。
- 泛化能力强: 通过最大化间隔,能有效避免过拟合。
- 内存高效: 最终模型只由少数“支持向量”决定,不需要存储所有数据。
- 理论完备: 基于凸优化理论,保证能找到全局最优解(不像神经网络容易陷入局部最优)。
缺点:
- 大规模数据集慢: 计算复杂度较高,当样本量(N)非常大(如几十万以上)时,训练时间长且消耗大量内存。
- 对噪声敏感: 如果数据重叠严重或噪声很多,SVM 的效果会下降。
- 概率解释困难: SVM 直接输出类别,不直接提供概率值(虽然可以用 Platt Scaling 等方法估算)。
- 参数调节: 核函数的选择以及参数(C, Gamma)的调节对结果影响很大。
支持向量机分类思想
- 直观思想: 假设有两类数据,我们可以画出无数条线把它们分开(如下图中的感知机算法)。但是,有些线紧贴着数据点,如果新来的数据稍微有一点偏差(噪声),就会被分错。
- SVM 的策略: 只有位于两类数据正中间、距离两边最近样本都最远的那条线(超平面),才是最“稳健”的。这个距离被称为“间隔”。
- 物理意义: 间隔越宽,模型的容错能力越强,泛化能力越好。
通俗来讲,上述即为 SVM 的分类思想。
支持向量机理论基础
一言以蔽之,SVM 的理论构建在凸优化、拉格朗日对偶性和核函数理论之上。根据上述的分类思想,我们做如下的数学分析。但需要说明的是,这个部分如果直接对一般形式分析所涉及到的数学理论较为困难,所以我们从最简单的二维平面出发得到结论。
我们做如下假设:
- 数据是二维的: 纸上有红点和蓝点。
- 数据是“完美”的: 你可以用一把直尺画一条线,把红蓝点分得干干净净(线性可分)。
- 目标: 找出那条“最好”的直线。
显然,在二维平面上,一条直线的方程通常写成 Ax + By + C = 0,在向量形式下,我们写成: w1x1 + w2x2 + b = wTx + b = 0 其中,x 是样本点的坐标 (x1, x2),w 是法向量(w1, w2),b是截距。根据高中所学的点到直线距离公式,我们得距离为: $$ d = \frac{|w_1x_1+w_2x_2+b|}{||w||} = \frac{|w^T x + b|}{||w||} $$ 其中 ||w|| 是向量 w 的模。
接下来我们用到了数学上的小技巧:缩放。比如,直线 wTx + b = 0 和 2wTx + 2b = 0 其实是同一条直线(就像 x + y − 1 = 0 和 2x + 2y − 2 = 0 画出来是一样的)。
所以,为了方便计算,SVM 强制规定:离线最近的那几个点(支持向量),让它们的函数值 |wTx + b| 刚好等于 1。
进而,我们得到实际上得间隔为: $$ \text{Margin} =2d= \frac{2}{||w||} $$ 为了使间隔最大,我就要使 ||w|| 最小。为了方便求解,通常写成最小化 $\frac{1}{2}||w||^2$。同时,我们不要忘了约束条件,数学表示为: yi(wTxi + b) ≥ 1 综上所述,这是一个典型的凸二次规划问题。它的重要意义在于:凸优化问题保证有唯一的全局最优解。
具体求解,我们需要使用高等数学中的拉格朗日乘数法,接着使用序列最小优化算法(SMO)得到结果。具体推导过程,这里略去。
线性可分支持向量机
这是 SVM 的“理想状态”,非常基础与简单
前提条件
- 假设训练数据集是严格线性可分的。
- 这意味着:存在一个超平面,能将正类和负类样本完美地、无错误地分开(没有任何噪声或重叠)。
局限性
- 太理想化: 现实世界的数据往往充满噪声或异常点(Outliers)。
- 对噪声极其敏感: 如果有一个红点不小心跑到了蓝点堆里(异常值),为了满足“硬间隔”条件(必须分对),整个决策边界可能会发生剧烈偏移,导致间隔变得很窄,模型泛化能力大跌。
线性支持向量机
线性支持向量机 (Linear Support Vector Machine),通常指的是线性软间隔支持向量机 (Linear Soft Margin SVM)。
引入背景
上一节的“硬间隔”模型有两个致命弱点: 1. 无解: 如果数据稍微有一点重叠(线性不可分),硬间隔模型完全算不出来,直接报错。 2. 过拟合: 即使数据能分开,如果有一个噪声点(Outlier)跑得很远,硬间隔为了迁就它,会让决策边界变得很奇怪,导致间隔变得极窄。
线性支持向量机通过引入软间隔 (Soft Margin) 机制解决了这两个问题。
应对方法
我们允许一部分样本:跑到间隔带里面(不安全,但分对了),甚至跑到分界线的另一边(分错了)。
数学表示
但是,我们的宽容不是无限度的,我们需要引入指标来定量刻画。为了实现这种“宽容”,数学上引入了两个变量:
松弛变量ξi 对于每一个样本点 xi,我们引入一个非负变量 ξi:
- 如果样本点很乖(在间隔外),ξi = 0。
- 如果样本点在间隔内(虽然分对了但不安全),0 < ξi < 1。
- 如果样本点分错了(越过中线),ξi > 1。
约束条件从原来的 ≥ 1 变成了 ≥ 1 − ξi(标准降低了)。
惩罚参数 C
这是 SVM 中最重要的超参数(由人来设定),C 代表了你对错误的容忍程度(或者说惩罚力度)。现在我们的优化目标变为: $$ \min_{w,b,\xi}{\frac{1}{2}||w||^2} + C \sum_{i=1}^{N} \xi_i $$ 参数 C 的物理意义
- C 很大 (如 C = 1000):
- 含义: 惩罚项权重极大,对错误零容忍。
- 结果: 模型会拼命把所有点分对,甚至不惜让间隔变得很窄。
- 风险: 像“硬间隔”一样,容易过拟合 (Overfitting)。
- C 很小 (如 C = 0.01):
- 含义: 惩罚项权重很小,不在乎个别点分错。
- 结果: 模型会追求更宽的间隔,哪怕分错几个点也无所谓。
- 风险: 容易欠拟合 (Underfitting)(路太宽了,把正常样本都包进去了)。
非线性支持向量机
非线性支持向量机 (Non-linear Support Vector Machine) 是 SVM 家族中最强大、应用最广泛的形式。它让 SVM 拥有了处理复杂数据(如图像、非线性分布数据)的能力。
升维打击 (Cover 定理)
面对二维平面上数据混杂、非线性的情况,比如红球在圆心,蓝球包围着红球,你在二维平面上画不出一条直线把它们分开。
SVM 的解决思路是: 如果低维空间分不开,那就把数据映射到高维空间去.
直观比喻: 想象桌子上平铺着一堆豆子(红豆在中间,绿豆在四周)。你用笔(直线)怎么画都分不开。这时,你猛拍一下桌子,利用力的作用,让豆子弹起来。如果红豆比较轻,弹得高;绿豆比较重,弹得低。 在豆子飞在空中的那一瞬间(三维空间),你就可以用一块平板(二维超平面)插入红豆和绿豆之间,把它们完美分开了。
数学原理: 这就是 Cover 定理 的启示:将复杂的非线性模式投射到足够高维的空间中,它们变为线性可分的概率会趋向于 1。
核技巧
要实现“升维”,理论上我们需要找一个映射函数 ϕ(x),把原始数据 x 变成高维数据 ϕ(x),然后在高维空间算内积 ϕ(xi)Tϕ(xj)。
但这有个巨大的问题:维度灾难! 如果把数据映射到无限维空间,计算量会大到计算机爆炸。为了解决这个问题,SVM 引入了“核函数” (Kernel Function)。
SVM 发现,在求解对偶问题时,我们并不需要知道数据映射后的具体坐标 ϕ(x) 长什么样,我们只需要知道两个向量映射后的内积是多少。
核函数 K(xi, xj) 定义为: K(xi, xj) = ϕ(xi)Tϕ(xj)
它的魔力在于: 我们在低维空间直接计算 K(xi, xj)(计算量很小),得到的结果直接等于在高维空间计算内积的结果。
常用的核函数
- 线性核 (Linear Kernel)
- K(x, z) = xTz
- 实质: 就是不升维,直接算。
- 适用: 特征维度本来就很高(如文本分类),或者数据明显线性可分。
- 多项式核 (Polynomial Kernel)
- K(x, z) = (xTz + 1)d
- 实质: 显式地利用多项式特征(如 x12, x1x2 等)升维。
- 缺点: 参数多,不稳定,现在用得比较少。
- 高斯核 / 径向基核 (RBF Kernel) —— 最常用
- K(x, z) = exp (−γ||x − z||2)
- 实质: 它能将数据映射到无限维空间。
- 几何直观: 它是根据样本之间的“距离”来衡量相似度。就像是在每个样本点上盖了一个“高斯分布”的小山包。
- 适用: 几乎所有不知道该用什么核的时候,都选 RBF。
关键参数
- C (惩罚系数):与线性 SVM 相同
- C 大:这是个严厉的老师,不允许分错,容易过拟合(边界很扭曲)。
- C 小:这是个宽容的老师,容忍分错,容易欠拟合(边界很平滑)。
- Gamma (γ): RBF 核所独有
- γ 控制了高斯分布的“宽度”(影响范围)。
- γ 很大: 也就是高斯分布很“尖”。每个支持向量只影响它周围极小的区域。结果:决策边界变得支离破碎,像是一个个孤岛包围住样本,极度过拟合。
- γ 很小: 高斯分布很“平”。一个样本能影响很远的距离。结果:决策边界非常平滑。
非线性支持向量机是 SVM 的完全体。总的来说,就是利用核函数进行隐式升维,在高维空间寻找最优线性超平面,最后映射回低维空间变成复杂的非线性边界。
- 优点: 只要选对了核函数(通常是 RBF),它能解决几乎所有复杂的分类问题,且不需要手动构造新特征。
- 缺点: 随着样本量 N 的增加,计算核矩阵(N × N)的成本会平方级增长,所以不适合几十万以上的大规模数据。
MLPR-第8讲 决策树
决策树的概念 决策树(Decision Tree)是一种模仿人类决策过程的、基于树状结构的监督学习算法。它既可以用于分类,也可以用于回归。简单来说,决策树就是通过一系列的“是/否”问题(即特征判断),将数据一步步进行拆分,最终得出一个确定的预测结果。
决策树与数据结构中的树类似,主要包含三个部分: * 根节点 (Root Node):树的最顶端,包含所有的样本数据。 * 内部节点 (Internal/Decision Node):代表一个特征或属性的判断条件。 * 叶节点 (Leaf Node):树的末端,代表最终的决策结果或分类类别。
决策树的学习过程就是“如何最好地分割数据”的过程: 1. 特征选择:算法会遍历所有特征,寻找一个能够让数据划分得最“纯净”的特征(即让同类数据尽可能聚在一起)。常用的衡量指标包括信息增益(Information Gain)、基尼系数(Gini Impurity)等。 2. 分裂:根据选定的特征将数据分成子集。 3. 递归:对生成的子集重复上述过程,直到满足停止条件(如节点纯度极高、树达到最大深度等)。
常用的一些经典算法如下:
- ID3:使用信息增益(基于熵)来选择特征。
- C4.5:ID3的改进版,使用信息增益率,解决了ID3偏向于选择取值较多特征的问题。
- CART (Classification and Regression Tree):使用基尼系数(分类)或均方误差(回归),是目前最常用的算法。
优点: * 可解释性强:逻辑清晰,类似流程图,非技术人员也能看懂(White-box model)。 * 数据预处理要求低:不需要太多的数据归一化或标准化。 * 处理非线性关系:能很好地处理特征间的复杂关系。
缺点: * 容易过拟合 (Overfitting):如果树长得太深太复杂,就会“死记硬背”训练数据,导致在从未见过的新数据上表现不佳(通常通过剪枝或限制树深来解决)。 * 不稳定性:数据的一点小变化可能会导致生成完全不同的树。
由于单个决策树容易过拟合且不够稳定,现代机器学习中常用基于决策树的集成学习(Ensemble Learning)算法,例如: * 随机森林 (Random Forest):通过多棵树“投票”来决定结果,更稳健。 * GBDT / XGBoost / LightGBM:通过不断修正前一棵树的错误来提升预测精度。
决策树学习
决策树学习(Decision Tree Learning) 是指从带标签的训练数据中自动构建出一棵决策树的过程。简单来说,它的核心思想是:分治法(Divide and Conquer)。算法通过不断地寻找“最佳分割点”,将原本混乱的数据集切割成越来越纯净的小子集,直到无法分割或满足停止条件为止。、
特征选择
这是最关键的一步。算法需要决定在当前节点使用哪个特征、以及该特征的哪个值来进行分裂。
- 目标:让分裂后的子节点数据尽可能“纯”(即同一类别的样本聚在一起)。
- 评估指标:为了量化“纯度”,算法使用数学指标:
- 信息增益 (Information Gain):基于“熵”的概念。熵越大,数据越乱。分裂后熵减少得越多,增益越大(ID3算法使用)。
- 信息增益率 (Gain Ratio):引入惩罚项,防止算法偏向选择取值过多的特征(C4.5算法使用)。
- 基尼系数 (Gini Impurity):衡量随机抽取两个样本类别不一致的概率。基尼系数越小,纯度越高(CART算法使用)。
- 方差 (Variance):用于回归树,目标是让子节点内的数据方差最小。
决策树生成
这是一个递归(Recursive)的过程:
- 从根节点开始,包含所有训练数据。
- 计算所有特征的评估指标,选择最优特征。
- 根据该特征将数据划分为若干子集,生成子节点。
- 对每个子节点重复上述步骤,直到满足停止条件。
注意:这通常是一个贪心算法(Greedy Algorithm),即每一步都只考虑当前状态下的最优解,而不保证全局最优。
停止条件
为了防止树无限生长,必须设置停止条件。常见的条件包括:
- 当前节点包含的样本属于同一类别(纯度100%)。
- 没有剩余特征可供划分。
- 树达到了预设的最大深度 (Max Depth)。
- 节点包含的样本数量少于预设的最小样本数 (Min Samples Split)。
剪枝操作
如果不加限制,决策树会“疯狂生长”,直到把训练数据的所有细节(包括噪声)都记住,导致过拟合。剪枝就是为了简化模型,提高泛化能力。
- 预剪枝 (Pre-Pruning):在生成过程中就提前停止。例如,限制树深、限制叶节点最小样本数。虽然简单,但可能导致“欠拟合”。
- 后剪枝 (Post-Pruning):先让树长到最大,然后自底向上地把对预测贡献不大的枝条剪掉(替换为叶节点)。这种方法通常效果更好,但计算代价较高。
总的来说,决策树学习的本质就是在一个巨大的假设空间中,寻找一个能够最好地拟合训练数据的树状逻辑结构。它试图通过最小化不确定性(熵或基尼系数),将复杂的数据分类问题转化为一系列简单的逻辑判断。
结点最佳划分特征的选择
在决策树中,选择最佳划分特征(Feature Selection) 是构建树的核心步骤。其根本目标是:找到一个特征,使得根据该特征分裂后的子节点,比分裂前的父节点更“纯净”(Purity更高)。所谓“纯净”,就是指一个节点内的样本尽可能属于同一个类别。
算法会遍历当前节点的所有特征,尝试用每一个特征去划分数据,然后计算划分后的“混乱程度”。 * 如果划分后,子节点的数据非常整齐(比如左边全是A类,右边全是B类),说明这个特征很好。 * 如果划分后,子节点里还是很乱(A类B类混杂),说明这个特征不好。
“混乱程度”的减少量,就是衡量特征好坏的标准。根据不同的算法,衡量“混乱程度”的具体数学公式不同:
- 信息增益 (Information Gain) —— ID3算法
- 基础概念:熵 (Entropy)。熵是衡量系统混乱程度的指标。熵越大,数据越乱;熵越小,数据越纯。
- 计算方法: 信息增益 = 父节点熵 − 所有子节点的加权平均熵
- 含义:我看这个特征能让系统的混乱程度下降多少。下降得越多(增益越大),特征越好。
- 缺点:偏向于选择取值较多的特征。例如,如果有“身份证号”这个特征,每个样本都不一样,熵直接降为0,增益最大,但这对预测毫无意义(过拟合)。
- 基尼指数 (Gini Index/Impurity) —— CART算法(分类)
- 基础概念:衡量从数据集中随机抽取两个样本,其类别不一致的概率。
- 计算方法:基尼指数越小,纯度越高(0表示所有样本属于同一类)。
- 选择标准:选择分裂后基尼指数最小的特征。
- 优势:相比于熵(需要计算对数 log),基尼指数只涉及平方运算,计算速度更快,是目前最主流的选择(如sklearn默认使用Gini)。
选择最佳划分特征的过程就是:遍历所有特征 -> 假设分裂 -> 计算指标(熵/基尼/方差) -> 找到能让数据最“纯”的那个特征和切分点。
决策树生成
决策树生成(Decision Tree Generation) 是决策树算法中最核心的构建过程。它采用自顶向下(Top-Down)、分而治之(Divide and Conquer) 的策略,通过递归(Recursion) 的方式将数据不断细分,直到生成一棵完整的树。简单来说,生成过程就是一个不断重复的“判断-分裂-再判断”的循环。以下是通用的决策树生成算法流程(通常基于经典的 ID3、C4.5 或 CART 算法逻辑):
- 输入
- 训练数据集 D:包含特征和标签。
- 特征集 A:可用于划分的属性列表。
- 递归函数 GenerateTree(D, A)过程如下
- 创建一个新的节点
node。 - 在以下三种情况之一,停止生长,将
node标记为叶节点(Leaf Node),并确定其类别(通常取 D 中样本最多的类别):- 样本纯净:D 中所有样本都已经属于同一类别(没必要再分了)。
- 特征用尽:特征集 A 为空,或者所有样本在 A 上的取值都相同(没法再分了)。
- 达到限制:达到了预设的最大深度、或者样本数量太少(防止过拟合的预剪枝)。
- 如果没停止,就从特征集 A 中选择一个最优特征 a*(根据信息增益、信息增益率或基尼指数)。
- 根据特征 a*
的取值,将数据集 D
切分成若干个子集 D1, D2, ..., Dk。
- CART算法:严格生成二叉树(Yes/No)。
- ID3/C4.5算法:可能生成多叉树(根据特征有多少个离散值就分多少叉)。
- 对每一个子集 Di,重复调用
GenerateTree(Di, A \ {a*})(即在子集上继续生成树,通常会剔除已使用的离散特征),并将生成的子树连接到当前节点
node上。
- 创建一个新的节点
- 当递归结束后,输出一棵包含根节点、内部判断节点和叶节点的完整决策树。
虽然流程相似,但生成的树形结构略有不同:
| 特性 | ID3 / C4.5 | CART (常用) |
|---|---|---|
| 树的形状 | 多叉树 (Multi-way) | 二叉树 (Binary) |
| 离散特征 | 一个取值对应一个分支(如:红、绿、蓝 -> 3个分支) | 也是二分(如:是红色 vs 非红色) |
| 连续特征 | C4.5可处理(转为二分阈值) | 可处理(转为二分阈值) |
决策树生成中的常见算法
ID3 (Iterative Dichotomiser 3) 和 CART (Classification and Regression Tree) 是决策树生成中最著名的两种算法。
ID3 是决策树算法的“鼻祖”,由 Ross Quinlan 在 1986 年提出。
- 核心指标:信息增益 (Information Gain)
- 它是基于信息论中“熵”(Entropy)的概念。
- 算法逻辑:优先选择那个能让数据变得最不混乱(熵减少最多)的特征进行分裂。
- 公式逻辑:
信息增益 = 父节点熵 - 子节点加权平均熵。
- 树的结构:多叉树 (Multi-way Tree)
- 对于离散特征,该特征有多少个取值,节点就会分裂出多少个分支。
- 例如:特征是“天气”,取值为[晴, 阴, 雨],ID3会直接生成3个分支。
- 局限性:
- 偏好多值特征:信息增益倾向于选择取值较多的特征(如“身份证号”),因为分得越细,熵降得越快,但这通常会导致过拟合且无意义。
- 不能处理连续值:原生ID3只能处理离散变量(如颜色、布尔值)。
- 不能处理缺失值:数据必须完整。
- 只能做分类:无法用于回归预测。
CART 是目前应用最广泛的决策树算法(如 sklearn 默认使用 CART),由 Breiman 等人在 1984 年提出。
- 核心指标:基尼指数 (Gini) 或 均方误差 (MSE)
- 分类任务:使用基尼指数 (Gini Impurity)。基尼指数越小,纯度越高。相比熵的对数运算,基尼指数只涉及平方运算,计算速度更快。
- 回归任务:使用均方误差 (MSE) 或方差。寻找能让子节点数据最紧凑(方差最小)的切分点。
- 树的结构:二叉树 (Binary Tree)
- CART 严格规定每个节点只能分裂成两个子节点(“是”或“否”)。
- 对于多值离散特征(如[晴, 阴, 雨]),它会尝试组合,例如划分成 {晴} 和 {阴, 雨} 两组。
- 优势:
- 通用性强:既能做分类,也能做回归。
- 处理连续值:通过排序找切分点(如 身高 < 170),能够很好地处理连续数据。
- 自动剪枝:CART 算法体系中包含了基于代价复杂度(Cost-Complexity Pruning)的剪枝策略。
| 维度 | ID3 算法 | CART 算法 |
|---|---|---|
| 全称 | Iterative Dichotomiser 3 | Classification and Regression Tree |
| 应用场景 | 仅分类 (Classification) | 分类 & 回归 (Class & Reg) |
| 特征选择指标 | 信息增益 (基于熵,计算慢) | 基尼指数 (分类,计算快) / 方差 (回归) |
| 树的形状 | 多叉树 (根据特征值数量分叉) | 二叉树 (严格二分) |
| 特征类型 | 仅离散特征 | 离散 & 连续 特征 |
| 缺陷 | 偏向取值多的特征、易过拟合 | 对数据中的异常值较敏感 |
| 后继演变 | 进化为 C4.5 (解决了多值偏好和连续值问题) | 是 Random Forest 和 GBDT 的基石 |
MLPR-第9讲 集成学习与随机森林
简单来说,集成学习是一种“思想”,而随机森林是这种思想下的一个具体“算法”。
集成学习方法 集成学习通过构建并结合多个机器学习器(称为“基学习器”或“弱学习器”)来完成学习任务。它的目的是通过组合多个模型,来获得比单一模型更好的预测性能和更强的泛化能力(抗过拟合能力)。
主要的三种流派:
- Bagging (Bootstrap Aggregating):
- 特点: 并行训练。模型之间相互独立,互不影响。
- 做法: 随机采样训练数据,训练出多个模型,最后通过投票(分类问题)或平均(回归问题)得出结果。
- 代表算法: 随机森林 (Random Forest)。
- 作用: 主要为了降低方差(减少过拟合)。
- Boosting:
- 特点: 串行训练。模型之间有依赖关系。
- 做法: 后一个模型专门用来修正前一个模型的错误。就像学生考试,第一次考完后,重点复习做错的题,再考第二次。
- 代表算法: AdaBoost, GBDT, XGBoost, LightGBM。
- 作用: 主要为了降低偏差(提高准确率)。
- Stacking:
- 特点: 堆叠。
- 做法: 用多个不同的模型做初级预测,然后把这些预测结果作为新特征,输入给第二层的模型(元模型)去得出一个最终结果。
随机森林
定义:随机森林是 Bagging 集成学习思想的典型代表。它由许多棵决策树(Decision Tree)组成。为了保证每棵树都不一样(多样性),随机森林引入了两个随机过程:
- 样本随机 (Bootstrap Sampling): 从原始数据集中,有放回地随机抽取样本来训练每一棵树。这意味着有的样本可能在一棵树中出现多次,有的则一次都不出现。
- 特征随机: 在分裂决策树的节点时,不是在所有特征中选最优的,而是随机选取一部分特征,再从中选最优的。
工作流程:
- 生成 N 棵树(基于上述的两个随机性)。
- 输入新数据,让这 N 棵树分别进行预测。
- 汇总结果:
- 如果是分类任务:少数服从多数(投票)。
- 如果是回归任务:计算所有树预测值的平均值。
随机森林的优点:
- 准确率高: 集成方法通常比单一决策树准。
- 抗过拟合: 因为引入了随机性且取了平均,比单棵决策树更稳健。
- 易于并行: 每棵树互不干扰,可以同时训练,速度快。
- 处理高维数据: 不需要做特征筛选也能处理大量特征。
- 特征重要性: 训练完后,可以告诉你哪些特征(变量)对结果最重要。
MLPR-第10讲 模型评估与选择
模型选择的基本概念
简单来说,模型选择的目标是:在保证模型能够很好地拟合训练数据的同时,使其在未知的测试数据上也能表现良好。关键在于平衡过拟合与欠拟合,使模型拥有强大的泛化能力。
模型评估方法
为了选出最好的模型,我们不能只看训练集,我们通常将数据集划分如下:
- 训练集 (Training Set): 用来训练模型参数(学习)。
- 验证集 (Validation Set): 用来做模型选择(调节超参数)。我们看模型在验证集上的表现来决定选哪个。
- 测试集 (Test Set): 最终用来评估模型效果。绝对不能用来训练或选择模型,否则算“作弊”。
可供采用的评估方法如下:
- 留出法 (Hold-out Method):
- 最简单的方法。直接把数据按比例(如 7:3 或 8:2)切分成“训练集”和“测试集”。
- 缺点: 评估结果受划分方式影响大,如果数据少,结果不可靠。
- 交叉验证法 (Cross-Validation, CV):
- k-折交叉验证 (k-fold CV): 最主流方法。把数据分 k 份,轮流做测试集,其余做训练集。最终取 k 次结果的平均值。
- 优点: 结果稳定,最大限度利用了数据。
- 自助法 (Bootstrapping):
- 每次有放回地采样。适合数据量非常小的情况。
- 缺点: 改变了数据的分布,目前使用较少(随机森林中用于构建基学习器)。
偏差-方差
偏差-方差权衡 (Bias-Variance Tradeoff) 是机器学习中用来分析模型预测误差的核心理论。它揭示了模型复杂度与泛化能力之间的深层矛盾。
简单来说,一个模型的总误差可以分解为三部分:偏差、方差 和 不可避免的噪声。 总误差 = 偏差2 + 方差 + 噪声
- 偏差 (Bias)
- 含义: 模型在训练集上的拟合能力。它反映了模型对真实关系的假设是否偏离了实际。
- 高偏差表现 (Underfitting - 欠拟合):
- 模型太简单(如用直线去拟合抛物线)。
- 模型“太死板”,学不会数据中的规律。
- 后果: 训练误差高,测试误差也高。
- 方差 (Variance)
- 含义: 模型对训练数据变化的敏感程度。如果换一组训练数据,模型的预测结果变化是否很大?
- 高方差表现 (Overfitting - 过拟合):
- 模型太复杂(如用高阶多项式强行穿过所有点)。
- 模型“太敏感”,把训练数据里的噪声和偶然细节都记住了(死记硬背)。
- 后果: 训练误差极低,但测试误差很高。
- 噪声 (Noise)
- 含义: 数据本身自带的干扰(如测量误差、不完整的特征)。
- 特点: 这是不可约减的误差。无论模型多好,都无法消除这部分误差。
这是模型选择中最痛苦的地方:我们很难同时让偏差和方差都变小。
- 模型越简单(如线性回归):
- 方差小(很稳定,换点数据直线也不会变太多)。
- 偏差大(容易欠拟合,无法捕捉复杂规律)。
- 模型越复杂(如深度神经网络):
- 偏差小(拟合能力强,训练集准确率高)。
- 方差大(容易过拟合,对数据波动极其敏感)。
我们希望找到总误差(偏差+方差)最低的那个点,这就是最优模型的复杂度。了解偏差和方差,是为了指导我们优化模型:
- 高偏差(欠拟合)怎么办? → 增加复杂度
- 增加特征(挖掘更多信息)。
- 选用更复杂的模型(如从线性模型换到非线性模型、神经网络)。
- 减小正则化系数。
- Boosting 类算法(如 GBDT, XGBoost)主要是在降低偏差。
- 高方差(过拟合)怎么办? → 降低复杂度 / 增加数据
- 增加训练数据(最有效,让模型见多识广)。
- 特征选择/降维(去掉无关噪声特征)。
- 增加正则化(L1/L2,限制模型参数)。
- Bagging 类算法(如随机森林)主要是在降低方差(通过平均多个模型来平滑结果)。
模型性能度量
混淆矩阵 (Confusion Matrix) 是评估分类模型(尤其是二分类)性能最基础、最直观的工具。混淆矩阵是一个 2 × 2 的表格,用来对比“真实情况”与“模型预测”。
- 行 (Rows): 代表真实的类别 (Actual)。
- 列 (Columns): 代表预测的类别 (Predicted)。
| 预测为正 (Positive) | 预测为负 (Negative) | |
|---|---|---|
| 真实为正 (Positive) | TP (真阳性) | FN (假阴性) |
| 真实为负 (Negative) | FP (假阳性) | TN (真阴性) |
四个核心元素: * TP (True Positive): 真的有病,模型也说有病。(正确检测) * TN (True Negative): 真的没病,模型也说没病。(正确排除) * FP (False Positive): 真的没病,模型却说有病。(误报 / 虚警) * FN (False Negative): 真的有病,模型却说没病。(漏报 / 漏诊)
基于上面这四个数,我们可以计算出不同维度的性能指标:
- 准确率 (Accuracy)
- 公式: $\frac{TP + TN}{总样本数}$
- 含义: 模型总共猜对了多少?
- 缺点: 在样本不平衡时(例如99个负样本,1个正样本),准确率会骗人(全猜负也有99%准确率),因此不能单独使用。
- 精确率 (Precision) / 查准率
- 公式: $\frac{TP}{TP + FP}$
- 含义: “在模型预测为正的样本中,有多少是真的正?”
- 关注点: 抗干扰能力。如果不希望模型误报,就要看这个指标。
- 召回率 (Recall) / 查全率
- 公式: $\frac{TP}{TP + FN}$
- 含义: “在所有原本就是正的样本中,模型找出来多少?”
- 关注点: 覆盖能力。如果不希望模型漏报,就要看这个指标。
- F1度量
- 公式: $2 \times \frac{Precision \times Recall}{Precision + Recall}$
- 含义: 精确率和召回率的调和平均数。
- 作用: Precision 和 Recall 往往是矛盾的(一个高另一个通常会变低)。F1-Score 用于寻找两者的平衡点。当 F1 值较高时,说明模型比较稳健。
MLPR-第11讲 特征提取与选择
特征提取 (Feature Extraction) 和 特征选择 (Feature Selection) 都是机器学习中降维 (Dimensionality Reduction) 的核心手段。
它们的目标一致:减少特征数量,去除冗余和噪声,防止过拟合,提高模型训练速度。但它们的核心区别在于:
- 特征选择是做减法(保留原汁原味,只选一部分)。
- 特征提取是做化学反应(融合生成新特征,改变了原样)。
特征选择 (Feature Selection)
定义:从原始特征集合中,按照某种标准,筛选出一个子集作为最终的特征输入。选出来的特征依然是原来的特征,物理含义保持不变(可解释性强)。
主流方法如下:
- 过滤法 (Filter):
- 做法: 在训练模型之前,通过统计指标给每个特征打分,把分低的扔掉。
- 指标: 方差(方差小的说明大家取值都一样,没区分度)、相关系数(皮尔逊相关系数)、卡方检验、互信息。
- 特点: 速度快,与具体模型无关。
- 包裹法 (Wrapper):
- 做法: 把特征选择看作是一个搜索问题。直接用最终要用的模型(如SVM)去评估不同的特征组合,看哪个组合效果好。
- 代表: 递归特征消除 (RFE)。
- 特点: 效果通常最好,但计算量极大(因为要训练很多次模型),容易过拟合。
- 嵌入法 (Embedded):
- 做法: 特征选择过程与模型训练过程融为一体。模型训练完了,特征也就选出来了。
- 代表: Lasso 回归(L1 正则化会让系数变为0)、决策树/随机森林(可以输出特征重要性 Feature Importance)。
- 特点: 效率和效果的平衡点。
特征提取 (Feature Extraction)
定义:通过数学变换,将原始的高维空间映射到一个新的低维空间,从而生成全新的特征。生成的新特征是旧特征的线性或非线性组合,失去了原始的物理含义(可解释性变差)。
代表算法:
- PCA (主成分分析 - Principal Component Analysis):
- 类型: 无监督。
- 原理: 寻找数据方差最大的方向。通过线性变换,把数据投影到新的坐标系中,保留包含信息量(方差)最大的前 k 个维度。
- 核心: 降维的同时尽可能保留原始数据的信息。
- LDA (线性判别分析 - Linear Discriminant Analysis):
- 类型: 有监督(需要标签)。
- 原理: 寻找一个投影方向,使得同类样本尽可能紧凑,异类样本尽可能分开(类内方差小,类间方差大)。
- 核心: 降维的同时是为了更好地分类。
- 非线性方法(流形学习 & 深度学习):
- t-SNE / UMAP: 主要用于高维数据的可视化。
- 自编码器 (Autoencoder): 利用神经网络进行压缩和解压,中间层就是提取出的非线性特征。
MLPR-第12讲 聚类分析
聚类分析的概念
聚类分析 (Cluster Analysis) 是机器学习中无监督学习 (Unsupervised Learning) 的核心技术。简单来说,它的目的是:在没有标签(答案)的情况下,自动将数据分成若干个组(簇,Clusters),使得同一个组内的数据尽可能相似,而不同组之间的数据尽可能不同。
聚类分析本质上是在寻找数据内部的自然结构。 * 输入: 一堆杂乱无章的数据(没有标签,只知道他们的特征)。 * 输出: 若干个类别(簇)。
好坏标准: * 簇内相似度高 (High Intra-class Similarity): 同一个圈子里的人越像越好(高内聚)。 * 簇间相似度低 (Low Inter-class Similarity): 不同圈子的人差别越大越好(低耦合)。
与一般分类的区别,这是最容易混淆的两个概念:
| 维度 | 分类 (Classification) | 聚类 (Clustering) |
|---|---|---|
| 学习方式 | 有监督学习 (Supervised) | 无监督学习 (Unsupervised) |
| 数据标签 | 有 (训练数据里告诉了你这是猫还是狗) | 无 (只有数据,不知道是什么) |
| 目标 | 学会预测新数据的标签 | 发现数据潜在的分布规律 |
| 例子 | 垃圾邮件识别 (已知哪些是垃圾) | 用户分群 (不知道有哪些类型的用户,试着分分看) |
不同的算法对“簇”的定义不同:
- 基于划分的方法 (Partitioning Methods):
- 代表:K-Means (K-均值)。
- 原理: 你先告诉我分几类 (k),我随机选 k 个中心,然后反复迭代,把点分给最近的中心。
- 特点: 简单、快,但需要预先指定 k 值,且对异常值敏感,只能分球形的簇。
- 基于密度的方法 (Density-based Methods):
- 代表:DBSCAN。
- 原理: 只要点够密,就连成一片。中间空的地方就是边界。
- 特点: 不需要指定簇的个数,能发现任意形状的簇(比如弯弯曲曲的形状),还能自动识别出噪声点(不属于任何簇的点)。
- 基于层次的方法 (Hierarchical Methods):
- 代表:AGNES (自底向上)。
- 原理: 开始时每个点都是一类,然后两两合并,像树一样长起来。
- 特点: 不需要指定簇个数,能生成谱系图(树状图),但计算慢。
层次聚类
层次聚类 (Hierarchical Clustering),在统计学中常被称为系统聚类,是聚类分析中一种非常直观且重要的方法。它的核心思想是:不一次性定死类别,而是构建一个像“家谱树”一样的层级结构,让数据点一步步聚在一起,从而分离开。
与 K-Means 直接把数据分成 k 堆不同,层次聚类的结果是一棵树状图 (Dendrogram)。 * 根部:所有数据被归为一个大类。 * 叶子:每一个数据点自己就是一个类。 * 选择分类数:不需要预先指定 k 值。你可以在树的任意高度“横切一刀”,切断几根树枝,就得到几个簇。
根据构建树的方向,分为两类:
凝聚法——自底向上
过程如下:
- 初始: 把每个样本看作一个独立的簇(如果有 N 个样本,就有 N 个簇)。
- 寻找: 找到距离最近的两个簇。
- 合并: 把它们合并成一个新的簇。
- 循环: 重复步骤 2 和 3,直到所有样本都被合并到一个大簇中。
分裂法—— 自顶向下
过程如下:
- 初始: 所有样本都在一个大簇里。
- 分裂: 找到最不合群的一组数据,把它切分出去。
- 循环: 递归地切分,直到每个样本都独立。
这是层次聚类中最关键的参数。我们知道如何计算两个“点”之间的距离,但如何计算两个“簇”之间的距离呢?
- 最短距离法 (Single Linkage):
- 两个簇中最近的两个点的距离。
- 特点: 容易产生“长链”效应(细长的簇)。
- 最长距离法 (Complete Linkage):
- 两个簇中最远的两个点的距离。
- 特点: 倾向于生成球形的、紧凑的簇。
- 平均距离法 (Average Linkage):
- 两个簇中所有点对距离的平均值。
- 特点: 折中方案,比较稳健。
- Ward 方法 (Ward’s Method / 离差平方和法):
- 合并两个簇后,看会让整体的方差增加多少。增加得越少越好。
- 特点: 效果通常最好,类似于 K-Means 的优化目标,倾向于产生大小相等的簇。
优点: * 无需预设 K 值: 可以在生成树状图后,根据图形直观地决定分几类。 * 结果信息丰富: 展示了数据之间的层级关系和亲疏远近。 * 确定性: 只要距离度量确定,结果通常是固定的(不像 K-Means 受初始点影响)。
缺点: * 计算复杂度高: 凝聚聚类通常是 O(N3) 或 O(N2),分裂聚类理论上是O(2N − 1),采用启发式算法后可接受。不适合大规模数据集(比如超过几万条数据就会很慢)。 * 不可逆 (Greedy): 一旦合并(或分裂),就不能后悔。如果某一步合错了,后面无法修正。
动态聚类
动态聚类 (Dynamic Clustering),在很多教材和文献中也常常被称为基于划分的聚类 (Partitioning Methods) 或 迭代聚类。它的核心并不是像层次聚类那样一次性画出一棵树,而是“知错能改”。它通过反复迭代(Iterative)的方式,不断调整样本所属的类别和聚类中心,直到找到最优解。其中最典型的代表就是 K-Means 及其升级版 ISODATA。
与层次聚类(一旦合并就不能分开)不同,动态聚类的过程是可逆的、流动的。
- 初始状态: 随机指定几个中心(或随机划分)。
- 中间过程:
- 如果发现某个点离现在的聚类中心太远,离隔壁的聚类中心更近,就把它划给隔壁。
- 因为点变了,“老大”的位置(中心点)也要跟着移动。
- 动态调整: 甚至可以根据情况,把一个大簇分裂成两个,或者把两个靠得近的簇合并成一个。
- 终止条件: 直到所有的点都不再改变划分,或者误差满足要求为止。
K-Means (K-均值算法)
这是最著名的动态聚类算法。 * “动态”体现在哪里? 聚类中心(Centroids)在不断移动,样本的归属权在不断变化。 * 工作流程: 1. 选中心: 随机选 K 个点做初始中心。 2. 分队伍: 计算每个样本离哪个中心最近,就站到哪一队去。 3. 换中心: 每一队重新计算平均值,作为新的中心。 4. 循环: 重复步骤 2 和 3,直到中心不再移动。 * 局限性: K 值是固定的。必须预先告诉它分几类,它不能自动增减类别的数量。
ISODATA 算法
全称是“迭代自组织数据分析技术”。这才是狭义上真正的“动态”聚类,因为它不仅中心在动,连簇的个数 (K) 也在动。
- “动态”体现在哪里? 它引入了“分裂”和“合并”机制。
- 核心机制:
- 分裂 (Split): 如果某个簇的方差太大(说明样本太散,或者包含了异类),就把它一分为二。(簇数量 +1)
- 合并 (Merge): 如果两个簇的中心距离太近(说明它们其实是一伙的),就把它俩合并。(簇数量 −1)
- 丢弃: 如果某个簇里的样本太少(比如只有1-2个),就认为它是噪声,直接去掉。
- 优点: 不需要预先死定 K 值,算法会根据数据分布自动调整到最合理的类别数。
- 缺点: 参数非常多(分裂阈值、合并阈值、最小样本数等),调参比较麻烦。
| 维度 | 层次聚类 (Hierarchical) | 动态聚类 (Dynamic / Partitioning) |
|---|---|---|
| 过程 | 贪心算法 (Greedy) | 迭代优化 (Iterative) |
| 可逆性 | 不可逆 (一步走错,满盘皆输) | 可逆 (这一轮分错了,下一轮还能改回来) |
| 计算量 | 大 (通常 O(N2) 或 O(N3)) | 小 (通常 O(N × K × 迭代次数)),适合大数据 |
| 聚类数 | 不需要预设,事后看图决定 | K-Means 需预设,ISODATA 可自动调整 |
| 结果形式 | 树状图 (Dendrogram) | 具体的 K 个簇 |
| 适用场景 | 小样本、探索层级结构 | 大样本、追求计算速度 |
MLPR-第13讲 神经网络
神经网络基本知识
神经网络 (Neural Networks),全称为人工神经网络 (Artificial Neural Networks, ANNs),是现代人工智能(尤其是深度学习)的基石。它是一种模仿生物神经系统(即人脑)结构和功能的数学模型。简单来说,它是通过模拟大量神经元之间的相互连接,来让机器学会“思考”和“判断”。
基本单元:神经元
神经网络的最小组成单位是神经元(也叫感知机),输出 = 激活函数(∑(输入 × 权重) + 偏置)。
- 输入 (Inputs, x): 接收来自外界或上一层神经元的信息。
- 权重 (Weights, w): 衡量输入信号的重要性。如果某个输入很重要,对应的权重就大。
- 偏置 (Bias, b): 类似于一个“门槛”或校准值。
- 加权求和: 将所有输入乘以权重并加上偏置,汇总是多少 (z = w1x1 + w2x2 + ... + b)。
- 激活函数 (Activation Function): 这是灵魂。它决定了神经元是否被“激活”(点火)。如果没有它,神经网络就只是一堆线性方程,无法解决复杂问题。
网络结构:层级架构
将成百上千个神经元按层级连接起来,就构成了神经网络。通常分为三类层:
- 输入层 (Input Layer): 接收原始数据。不进行计算。
- 隐藏层 (Hidden Layers):
夹在中间的层,负责提取特征。
- 浅层网络: 只有1-2个隐藏层。
- 深度学习 (Deep Learning): 有很多个隐藏层(“Deep” 指的就是层数多)。层数越多,能学到的特征越抽象、越高级。
- 输出层 (Output Layer): 输出最终结果(如分类概率、预测数值)。
神经网络的学习过程,本质上就是“不断试错,自动调整权重 (w) 和偏置 (b)”的过程。
这个过程分为四步循环:
- 前向传播 (Forward Propagation):
- 数据从输入层进入,经过一层层隐藏层的计算,最后得到一个预测值。
- 也就是:瞎猜(初始阶段) → 有依据的猜。
- 计算损失 (Loss Calculation):
- 用损失函数 (Loss Function) 对比“预测值”和“真实标签”。
- 算出差距有多大(误差)。
- 反向传播 (Backpropagation, BP) —— 最关键的算法:
- 这是神经网络的“杀手锏”。
- 系统将误差从后往前传导,计算每一层神经元对这个错误“贡献”了多少(计算梯度)。
- 参数更新 (Optimization / Gradient Descent):
- 根据反向传播回来的信息,利用优化器(如 SGD, Adam)微调每一个神经元的权重和偏置。
- 目标是让下一次预测的误差小一点点。
为什么需要激活函数?为了引入非线性 (Non-linearity)。现实世界的数据(如图像、声音)都不是简单的直线关系。常用的激活函数有:
- Sigmoid/Tanh: 以前常用,把输出压缩到 (0,1) 或 (-1,1)。容易出现“梯度消失”问题。
- ReLU (Rectified Linear Unit): 目前最主流。x > 0 时保持原样,x < 0 时变为0。计算快,效果好。
- Softmax: 通常用于多分类任务的输出层,将输出转化为概率分布。
根据结构不同,神经网络衍生出了“三巨头”,分别处理不同类型的数据:
- 全连接神经网络 (DNN / MLP):
- 最普通的结构,每个神经元都和下一层所有神经元相连。
- 适用: 简单的表格数据。
- 卷积神经网络 (CNN):
- 引入了“卷积核”来提取局部特征。
- 适用: 图像识别、视频处理(因为它能看懂图片的空间结构)。
- 循环神经网络 (RNN) 及其变体 (LSTM, Transformer):
- 具有记忆功能,这一刻的输出依赖于上一刻的输入。
- 适用: 自然语言处理 (NLP)、语音识别、时间序列预测(因为它能理解上下文和先后顺序)。
感知器神经网络模型与 BP 神经网络模型
感知器 (Perceptron) 是神经网络的基础的形式,而 BP 神经网络 是在感知器遇到瓶颈后,通过引入新结构和新算法而诞生的改进(多层前馈网络)。
感知器 (Perceptron) —— 线性分类器
定义: 它是最简单的人工神经网络,由美国学者 Rosenblatt 于 1957 年提出。它通常只有两层:输入层和输出层(有些定义中不把输入层算作计算层,所以也叫单层感知器)。
工作原理: 1. 输入加权: 接收多个输入信号,进行加权求和。 2. 激活(阶跃函数): 结果通过一个阶跃函数(Step Function,通常是非黑即白的,如 > 0 输出 1, < 0 输出 -1)。 3. 输出: 得到分类结果。
能力与局限: * 能力: 能处理简单的线性分类问题(如逻辑“与”、“或”门)。也就是能在纸上画一条直线把两类数据分开。 * 致命缺陷(XOR 问题): 1969 年 Minsky 指出,单层感知器无法解决异或 (XOR) 问题。因为异或问题是线性不可分的(画一条直线分不开),这直接导致了神经网络研究进入了第一个“寒冬”。
BP 神经网络 (Back Propagation Network) —— 非线性映射
定义: 为了解决感知器的缺陷,人们引入了隐藏层和非线性激活函数,构成了多层前馈神经网络 (MLP)。而 BP (Back Propagation,误差反向传播) 则是专门用来训练这种网络的算法。通常大家口中的“BP神经网络”指的就是“用BP算法训练的多层前馈神经网络”。
核心改进: 1. 多层结构: 在输入和输出之间加入了隐藏层。这使得网络具备了处理复杂逻辑的能力。 2. 非线性激活函数: 抛弃了生硬的“阶跃函数”,改用 Sigmoid 或 Tanh 等平滑、可导的函数。这让网络能拟合各种弯弯曲曲的非线性边界。
BP 算法的工作流程(训练过程): 这是 BP 网络的灵魂,分为两个阶段:
- 前向传播 (信号向前走): 数据输入 → 隐藏层处理 → 输出预测值 → 计算误差(Loss)。
- 反向传播 (误差往回传): 根据误差,利用链式法则,从后往前推导每一层、每一个神经元对这个误差负多大责任(计算梯度),然后利用梯度下降法修改权重。
两者的关键区别
| 维度 | 感知器 (Perceptron) | BP 神经网络 |
|---|---|---|
| 结构 | 单层(无隐藏层) | 多层(至少含有一个隐藏层) |
| 激活函数 | 阶跃函数 (Step,不连续、不可导) | Sigmoid/ReLU 等 (连续、可导) |
| 解决问题 | 只能解决线性可分问题 | 可以解决非线性问题 (如 XOR) |
| 能力上限 | 相当于画一条直线 | 理论上可以逼近任意连续函数 (万能逼近定理) |
| 学习算法 | 简单的误差修正规则 | 梯度下降 + 链式法则 (BP算法) |
MLPR-第15讲 深度学习
深度学习 (Deep Learning) 是机器学习的一个分支,也是近年来人工智能爆发的核心驱动力。
1. 定义:深度学习是包含多个隐藏层的人工神经网络。
- “Deep” (深): 传统的神经网络可能只有 1-2 个隐藏层,而深度学习可能有几十层甚至上百层(如 ResNet)。
- 核心能力 —— 表征学习 (Representation Learning):
这是它与传统机器学习(如 SVM、随机森林)最大的区别。
- 传统 ML: 需要人工设计特征(Feature Engineering),比如告诉模型“猫有尖耳朵”。
- 深度学习: 自动化提取特征。输入原始像素,网络会自动从低级特征(线条、颜色)学到高级特征(眼睛、耳朵、猫的整体)。
2. 三大驱动力: * 大数据: 喂得越多,效果越好。 * 算力 (GPU): 英伟达显卡的并行计算能力加速了矩阵运算。 * 算法改进: 解决了深层网络难以训练的问题(如梯度消失)。
根据处理的数据类型不同,深度学习衍生出了几种主流架构:
卷积神经网络 (CNN)
- 适用场景: 图像识别、视频分析、医学影像。
- 核心机制:
- 卷积层 (Convolution): 用一个小窗口(卷积核)在图片上滑动,提取局部特征。
- 池化层 (Pooling): 压缩图片,减少参数,保留主要特征。
- 代表模型:
- LeNet/AlexNet: 开山鼻祖。
- ResNet (残差网络): 通过“跳跃连接”解决了网络太深导致无法训练的问题,让网络可以深达上千层。
- YOLO: 实时目标检测(一眼看出一张图里哪里有人、哪里有车)。
循环神经网络 (RNN) 及其变体
- 适用场景: 自然语言处理 (NLP)、语音识别、股票预测。
- 核心机制: 拥有“记忆”。当前的输出不仅取决于当前的输入,还取决于上一时刻的状态。
- 代表模型:
- LSTM (长短期记忆网络): 引入了“门控机制”(遗忘门、输入门),解决了传统 RNN 记不住长距离信息的问题。
- GRU: LSTM 的简化版,速度更快。
Transformer架构
- 适用场景: NLP(机器翻译、ChatGPT)、甚至开始取代 CNN 用于图像。
- 核心机制: 自注意力机制
(Self-Attention)。
- 抛弃了 RNN 的循环结构,可以并行计算。
- 它能让模型直接看到句子中所有词之间的关系(比如“它”指代前面哪个词),不管距离多远。
- 代表模型:
- BERT: 理解能力强(编码器),适合做阅读理解、分类。
- GPT 系列: 生成能力强(解码器),适合写文章、对话。
生成模型 (Generative Models)
- 适用场景: AI 画图、DeepFake(换脸)、生成语音。
- 代表模型:
- GAN (生成对抗网络): 一个生成器(造假钞的)和一个判别器(验钞机)互相博弈,最后生成逼真的图像。
- Diffusion Models (扩散模型): 目前 AI 绘画(如 Stable Diffusion, Midjourney)的主流。通过把图片变成噪点再逆向还原的过程来生成图像。
有了模型结构还不够,深度学习之所以能训练成功,离不开以下算法思路:
优化算法 (Optimization)
- SGD (随机梯度下降): 基础版,每次只看一个样本来更新。
- Momentum (动量法): 下坡时带点惯性,不容易卡在小坑里。
- Adam: 目前最常用的优化器。它能自适应地调整每个参数的学习率,训练速度快且收敛效果好。
正则化与抗过拟合 (Regularization)
深度模型参数极多,非常容易陷入过拟合。 * Dropout: 在训练时,随机“关掉”一部分神经元。强迫网络不依赖某几个特定的神经元,增强鲁棒性。 * Early Stopping: 训练时监控验证集误差,一旦验证集误差开始上升,就提前停止训练。 * 数据增强 (Data Augmentation): 对图片进行旋转、裁剪、变色,人为制造更多数据。
训练稳定性:Batch Normalization (批归一化): 强行把每一层的输入拉回到标准的正态分布。这极大地加速了训练速度,防止梯度消失。
迁移学习 (Transfer Learning)
这是工业界最常用的方法。
- 思想: 不要从零开始训练(Random Initialization)。
- 做法: 拿别人在超大数据集(如 ImageNet)上训练好的模型(预训练模型),保留它的特征提取层,只微调最后几层来适应你自己的任务。