机器学习一些进阶知识

本文总结了机器学习中的贝叶斯决策、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
2
3
4
5
from sklearn.svm import SVC

# 使用 RBF 核
clf = SVC(kernel='rbf', gamma=0.5, C=1.0)
clf.fit(X_train, y_train)

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from sklearn.datasets import load_iris
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt

X, y = load_iris(return_X_y=True)

# 降到二维
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)

plt.scatter(X_pca[:,0], X_pca[:,1], c=y, cmap='viridis')
plt.xlabel("PC1")
plt.ylabel("PC2")
plt.title("Iris 数据集 PCA 降维")
plt.show()

卷积核(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)中:

  • 卷积核的参数是自动学习的;
  • 每个卷积核可以学会提取一种特征(如边缘、曲线、角点);
  • 多个卷积核层叠使用,可以提取越来越抽象的语义信息。

一个典型的卷积层包含:

  1. 多个卷积核(如 32 个 3×3 核)
  2. 激活函数(如 ReLU)
  3. 池化层(如 MaxPooling)

可视化感受野与特征图

当卷积核滑动时,它仅关注输入数据的一小块区域(感受野),并输出一个特征响应。多个卷积核叠加,可以形成特征图(Feature Map):

输入图像 —→ 卷积核提取边缘 —→ 特征图(如轮廓)


作者

Gary

发布于

2025-05-20

更新于

2025-05-25

许可协议

评论

:D 一言句子获取中...

加载中,最新评论有1分钟缓存...