机器学习一些进阶知识
本文总结了机器学习中的贝叶斯决策、Fisher、SVM、核函数以及PCA降维等推理和操作。
贝叶斯决策
最小错误贝叶斯决策
贝叶斯公式
我们希望根据观察到的特征向量 ( x ),判定其属于哪个类别 ( w_1 ) 或 ( w_2 )。使用贝叶斯定理计算后验概率:
$$
P(w_i|x) = \frac{P(x|w_i) \cdot P(w_i)}{P(x)} \quad (i = 1,2)
$$
其中:
- ( P(w_i) ):类别的先验概率
- ( P(x|w_i) ):在类别 ( w_i ) 下观察到 ( x ) 的概率(似然)
- ( P(x) ):边际概率,用于归一化
判别规则
为了最小化分类错误率,我们选择使后验概率最大的类别:
$$
\text{若 } P(w_1|x) > P(w_2|x) \Rightarrow x \in w_1;\quad \text{否则 } x \in w_2
$$
因为 ( P(x) ) 对所有类别相同,我们可以只比较分子部分:
$$
P(x|w_1) \cdot P(w_1) \quad \text{vs} \quad P(x|w_2) \cdot P(w_2)
$$
判别函数形式
定义判别函数:
$$
g_i(x) = P(x|w_i) \cdot P(w_i), \quad i = 1,2
$$
我们将样本 ( x ) 判为使 ( g_i(x) ) 最大的那一类。
最小风险贝叶斯决策
在某些应用中,不同分类错误带来的代价不同。我们用损失函数 $$( \lambda(\alpha_i | w_j) )$$ 表示当真实类别为 $$( w_j )$$时,采取决策$$( \alpha_i )$$的损失。
风险函数定义:
$$
R(\alpha_i | x) = \sum_{j=1}^{2} \lambda(\alpha_i | w_j) \cdot P(w_j | x)
$$
决策准则:
选择使期望风险最小的决策:
$$
\alpha^* = \arg\min_{\alpha_i} R(\alpha_i | x)
$$
0-1 损失函数:退化为最大后验概率
如果我们使用 0-1 损失:
$$
\lambda(\alpha_i|w_j) =
\begin{cases}
0, & i = j \
1, & i \ne j
\end{cases}
$$
则风险函数变为:
$$
R(\alpha_i | x) = 1 - P(w_i|x)
$$
因此,最小风险决策等价于最大后验概率分类:
$$
\alpha^* = \arg\max_i P(w_i | x)
$$
非对称损失示例
在某些应用中,分类错误的代价不对称。设:
- 错将 ( w_2 ) 判为 ( w_1 ) 的损失为 10,即 $$( \lambda(\alpha_1 | w_2) = 10 )$$
- 错将 $$( w_1 ) $$判为 $$( w_2 )$$ 的损失为 1,即$$ ( \lambda(\alpha_2 | w_1) = 1 )$$
- 分类正确时损失为 0
因此,损失函数为:
$$
\begin{cases}
\lambda(\alpha_1 | w_1) = 0, & \lambda(\alpha_1 | w_2) = 10 \\
\lambda(\alpha_2 | w_1) = 1, & \lambda(\alpha_2 | w_2) = 0
\end{cases}
$$
期望风险计算
对每一个观测 ( x ),期望风险分别为:
$$
\begin{aligned}
R(\alpha_1 | x) &= \lambda(\alpha_1 | w_1) \cdot P(w_1 | x) + \lambda(\alpha_1 | w_2) \cdot P(w_2 | x) \
&= 0 \cdot P(w_1 | x) + 10 \cdot P(w_2 | x) = 10 \cdot P(w_2 | x) \\
R(\alpha_2 | x) &= \lambda(\alpha_2 | w_1) \cdot P(w_1 | x) + \lambda(\alpha_2 | w_2) \cdot P(w_2 | x) \
&= 1 \cdot P(w_1 | x) + 0 \cdot P(w_2 | x) = P(w_1 | x)
\end{aligned}
$$
决策准则
选择期望风险较小的动作作为分类决策:
$$
\text{如果 } 10 \cdot P(w_2 | x) < P(w_1 | x) \Rightarrow x \in w_1;\quad \text{否则 } x \in w_2
$$
距离度量:欧式距离与马氏距离
在分类、聚类、降维等机器学习任务中,衡量样本之间的距离非常关键。下面介绍两种常见的距离度量方法:
欧式距离(Euclidean Distance)
欧式距离是最常见的距离度量,定义为两个点之间的直线距离。
若有两个 ( d ) 维向量 $$( \boldsymbol{x}, \boldsymbol{y} \in \mathbb{R}^d )$$,其欧式距离定义为:
$$
d_E(\boldsymbol{x}, \boldsymbol{y}) = \sqrt{ \sum_{i=1}^d (x_i - y_i)^2 } = | \boldsymbol{x} - \boldsymbol{y} |_2
$$
在二维空间下就是勾股定理,适合在特征方差接近、各维度独立同分布的场景。
马氏距离(Mahalanobis Distance)
马氏距离考虑了各个维度之间的相关性以及不同尺度,是一种“归一化协方差后”的距离。
其定义为:
$$
d_M(\boldsymbol{x}, \boldsymbol{y}) = \sqrt{ (\boldsymbol{x} - \boldsymbol{y})^T \mathbf{S}^{-1} (\boldsymbol{x} - \boldsymbol{y}) }
$$
其中:
- $$( \mathbf{S} )$$ 样本协方差矩阵
- $$( \mathbf{S}^{-1} )$$ 协方差矩阵的逆
- $$( \boldsymbol{x}, \boldsymbol{y} )$$ 样本向量
当特征之间存在强相关性或不同尺度时,马氏距离能更准确地衡量“统计上的相似性”。
Fisher降维
Fisher降维用途
Fisher降维主要是通过投影的方法,使得数据映射到一条直线上面,维度从n维降低到1维,解决高维数据难以处理的问题。
基本数学推导:
支持向量机
支持向量机(SVM)原理:
支持向量机(SVM)是一种监督学习模型,通过在特征空间中寻找一个最优超平面,以最大化不同类别样本之间的间隔(margin),从而实现分类。它利用少量关键样本点(即支持向量)来决定分类边界,并通过核函数将数据映射到高维空间,处理线性不可分问题,实现高效、准确的分类。
公式推导过程:
核函数:用低维输入来描述高维关系
在许多机器学习任务中,特别是支持向量机(SVM)与核主成分分析(KPCA)中,核函数(Kernel Function)是一种强大工具,能够用低维输入,隐式表达高维特征之间的非线性关系。
什么是核函数?
核函数的本质是一种相似性度量函数。它通过一种特殊的函数 $$( K(\boldsymbol{x}, \boldsymbol{y}) )$$ 将两个输入向量映射到某个高维空间中,在不显式计算高维映射的前提下,完成复杂特征之间的内积计算。
形式定义为:
$$
K(\boldsymbol{x}, \boldsymbol{y}) = \langle \phi(\boldsymbol{x}), \phi(\boldsymbol{y}) \rangle
$$
其中:
- $$( \phi(\cdot) )$$ 从输入空间到高维特征空间的映射
- $$( \langle \cdot, \cdot \rangle )$$ 在该空间中的内积
为什么需要核函数?
非线性数据在原始特征空间中无法通过线性模型进行分割,如下图所示:
- 原空间中无法线性分离
- 经过高维映射后,线性可分
通过核函数,我们可以在计算上保持低维,在线性结构上获得高维的表达能力。
常见核函数
下面是常见的几种核函数:
线性核:
$$
K(\boldsymbol{x}, \boldsymbol{y}) = \boldsymbol{x}^T \boldsymbol{y}
$$不映射,直接在原空间中使用。
多项式核:
$$
K(\boldsymbol{x}, \boldsymbol{y}) = (\boldsymbol{x}^T \boldsymbol{y} + c)^d
$$将数据映射到多项式特征空间。
高斯径向基核(RBF):
$$
K(\boldsymbol{x}, \boldsymbol{y}) = \exp\left( -\frac{|\boldsymbol{x} - \boldsymbol{y}|^2}{2\sigma^2} \right)
$$实现到无限维空间的隐式映射,衡量局部相似性。
Sigmoid 核:
$$
K(\boldsymbol{x}, \boldsymbol{y}) = \tanh(\alpha \boldsymbol{x}^T \boldsymbol{y} + c)
$$
核技巧(Kernel Trick)
核技巧是指:在训练算法中只依赖于输入样本的内积,我们可以用核函数替代原始内积,从而在无需显式进行高维映射的情况下,实现等效的线性建模。
例如,在 SVM 中的对偶形式中,模型依赖于所有支持向量的核函数:
$$
f(x) = \sum_{i=1}^{n} \alpha_i y_i K(\boldsymbol{x}_i, \boldsymbol{x}) + b
$$
这让非线性分类成为可能。
核函数如何使用
核函数的核心思想是:在不显式进行高维映射的前提下,完成高维空间的计算。这称为“核技巧(Kernel Trick)”。
1. 为什么使用核函数?
在某些问题中,数据在原始空间中是非线性不可分的,例如:
- 两类数据环绕分布(如圆环)
- 存在复杂曲线边界
我们希望将数据映射到一个更高维空间,在该空间中变得线性可分。但如果显式进行高维特征映射,会导致计算量急剧上升。
这时我们使用核函数 $$( K(x, x’) = \langle \phi(x), \phi(x’) \rangle )$$ 跳过显式映射,直接计算高维内积。
2. 在 SVM 中如何使用核函数?
支持向量机的对偶形式使用的是样本之间的内积:
$$
f(x) = \sum_{i=1}^n \alpha_i y_i \langle x_i, x \rangle + b
$$
使用核函数后变成:
$$
f(x) = \sum_{i=1}^n \alpha_i y_i K(x_i, x) + b
$$
你只需要选好一个核函数,SVM 就能处理非线性问题!
常见设置:
1 | from sklearn.svm import SVC |
PCA降维
什么是 PCA?
主成分分析(Principal Component Analysis, PCA) 是一种经典的无监督降维方法,它通过线性变换将原始数据投影到一个新的坐标系中,使得投影后的前几个维度保留数据中最多的信息(即方差最大)。
通俗讲:PCA 找到一组“最有代表性”的方向,将高维数据压缩到低维空间,同时尽量保留信息。
为什么需要降维?
- 可视化:将高维数据投影到二维/三维便于观察
- 减少冗余:剔除无效或共线特征
- 降噪:提高泛化能力,减少过拟合
- 加速模型训练:特征更少,计算更快
PCA 的数学原理
设原始数据集为 $$( X \in \mathbb{R}^{n \times d} ),有 ( n ) 个样本、( d ) $$ 个特征。
步骤 1:中心化
对每个特征去均值:
$$
X_{\text{centered}} = X - \mu
$$
步骤 2:计算协方差矩阵
$$
\Sigma = \frac{1}{n} X_{\text{centered}}^T X_{\text{centered}}
$$
步骤 3:特征值分解
求解协方差矩阵的特征值和特征向量:
$$
\Sigma \boldsymbol{v}_i = \lambda_i \boldsymbol{v}_i
$$
- $$( \boldsymbol{v}_i )$$ 第 ( i ) 个主成分方向
- $$( \lambda_i )$$ 对应的方差(解释力度)
步骤 4:选择前 ( k ) 个主成分
取前 ( k ) 个最大特征值对应的特征向量组成投影矩阵 $$( W \in \mathbb{R}^{d \times k} )$$
步骤 5:变换到新空间
$$
Z = X_{\text{centered}} \cdot W
$$
其中 $$( Z \in \mathbb{R}^{n \times k} )$$ 就是降维后的数据。
几何直觉
PCA 等价于寻找一个新的坐标系,使得数据投影后的第一主轴方向具有最大方差,第二主轴方向次之,且各主轴正交。
可以类比于把数据“压扁”到一块高信息密度的平面上。
Python 示例:2D 可视化降维
1 | from sklearn.datasets import load_iris |
卷积核(cov)
什么是卷积核?
卷积核(Convolution Kernel)也称为滤波器(filter),是一个小型权重矩阵,它在输入数据(如图像)上滑动,执行局部加权求和操作,从而提取图像特征(如边缘、纹理、角点等)。
卷积操作的数学定义
设有二维图像矩阵 ( I ) 和卷积核 ( K ),卷积操作记为:
$$
S(i, j) = (I * K)(i, j) = \sum_m \sum_n I(i+m, j+n) \cdot K(m, n)
$$
其中:
- $$( I(i+m, j+n) )$$ 图像上某个局部区域的像素值
- $$( K(m, n) )$$ 卷积核的对应位置权重
- $$( S(i, j) )$$ 输出特征图的位置值
说明:实际计算中通常会将卷积核翻转(严格数学意义上的卷积),但在深度学习中使用的是互相关(cross-correlation),不翻转核。
举例:3×3 卷积核计算示意
假设输入图像片段为:
$$
I =
\begin{bmatrix}
1 & 2 & 0 \
4 & 5 & 1 \
1 & 2 & 3
\end{bmatrix}
$$
卷积核为:
$$
K =
\begin{bmatrix}
0 & 1 & 0 \
1 & -4 & 1 \
0 & 1 & 0
\end{bmatrix}
$$
对应中心像素位置的卷积计算结果为:
$$
S = 1 \cdot 0 + 2 \cdot 1 + 0 \cdot 0 + 4 \cdot 1 + 5 \cdot (-4) + 1 \cdot 1 + 1 \cdot 0 + 2 \cdot 1 + 3 \cdot 0 = -9
$$
卷积核在 CNN 中的作用
在卷积神经网络(Convolutional Neural Network, CNN)中:
- 卷积核的参数是自动学习的;
- 每个卷积核可以学会提取一种特征(如边缘、曲线、角点);
- 多个卷积核层叠使用,可以提取越来越抽象的语义信息。
一个典型的卷积层包含:
- 多个卷积核(如 32 个 3×3 核)
- 激活函数(如 ReLU)
- 池化层(如 MaxPooling)
可视化感受野与特征图
当卷积核滑动时,它仅关注输入数据的一小块区域(感受野),并输出一个特征响应。多个卷积核叠加,可以形成特征图(Feature Map):
输入图像 —→ 卷积核提取边缘 —→ 特征图(如轮廓)
1.BP神经网络
2.Transformer基础
3.卷积神经网络(CNN)
4.YOLO原理
5.tensorRT基础操作
6.Cuda基础操作
7.MQTT 与 HTTP 通信协议对比及项目应用场景选择
8.机器学习基础知识总结