西瓜书第十一章——降维与度量学习

文章目录

降维与度量学习

k近邻学习原理

KNN有什么显著的特征?

第一是Lazy Learning,没有显式的训练阶段,实现非常简单

第二是直接支持多分类,而一些二分类模型例如SVM需要借助OvO或者OvM训练多个模型来进行多分类
KNN需要注意的点?

超参数k的选择非常非常重要,过小则过拟合,过大则欠拟合,因此需要进行进行多折交叉验证确定最佳的k

最后是需要对特征进行归一化防止大数吃小数

k近邻(k-Nearest Neighbor, kNN)是一种基于实例的监督学习算法,其核心机制为局部相似性归纳。给定测试样本,算法通过度量空间中的距离函数,从训练集中选取与之最近的k个样本,利用这些邻居的类别标签进行预测。最关键的是选取合适的k,k过小即过拟合,过大则欠拟合

  1. 天然支持多分类!
  2. 原理实现简单

具体流程如下:

  1. 距离度量

    设样本空间为 X ⊆ R n \mathcal{X} \subseteq \mathbb{R}^n X⊆Rn,给定距离函数 d : X × X → R + d:\mathcal{X} \times \mathcal{X} \rightarrow \mathbb{R}^+ d:X×X→R+(如闵可夫斯基距离 d p ( x i , x j ) = ( ∑ u = 1 n ∣ x i u − x j u ∣ p ) 1 / p d_{p}(\boldsymbol{x}i,\boldsymbol{x}j) = (\sum{u=1}^n |x{iu}-x_{ju}|^p)^{1/p} dp(xi,xj)=(∑u=1n∣xiu−xju∣p)1/p),计算测试样本与所有训练样本的相似性。常见特例包括:

    • 曼哈顿距离 ( p = 1 p=1 p=1)
    • 欧氏距离 ( p = 2 p=2 p=2)
    • 切比雪夫距离 ( p → ∞ p \rightarrow \infty p→∞)
  2. 近邻选择

    根据距离排序,选择与测试样本距离最小的k个训练样本,构成邻域集合 N k ( x ) = { ( x i , y i ) ∈ D   ∣   d ( x , x i ) ≤ d ( x , x ( k ) ) } N_k(\boldsymbol{x}) = \{ (\boldsymbol{x}i,y_i) \in D \, | \, d(\boldsymbol{x},\boldsymbol{x}i) \leq d(\boldsymbol{x},\boldsymbol{x}{(k)}) \} Nk(x)={(xi,yi)∈D∣d(x,xi)≤d(x,x(k))},其中 D D D为训练集, d ( x , x ( k ) ) d(\boldsymbol{x},\boldsymbol{x}{(k)}) d(x,x(k))为第k小的距离值。

  3. 决策函数

    • 分类任务 :采用多数投票法 ,即
      y = arg ⁡ max ⁡ c ∈ Y ∑ ( x i , y i ) ∈ N k ( x ) I ( y i = c ) y = \arg\max_{c \in \mathcal{Y}} \sum_{(\boldsymbol{x}_i,y_i) \in N_k(\boldsymbol{x})} \mathbb{I}(y_i = c) y=argc∈Ymax(xi,yi)∈Nk(x)∑I(yi=c)
    • 回归任务 :采用均值法 ,即
      y = 1 k ∑ ( x i , y i ) ∈ N k ( x ) y i y = \frac{1}{k} \sum_{(\boldsymbol{x}_i,y_i) \in N_k(\boldsymbol{x})} y_i y=k1(xi,yi)∈Nk(x)∑yi
  4. 关键参数与优化

    • k值选择:通过交叉验证确定最优k值。较小k值易受噪声干扰(过拟合),较大k值导致决策边界模糊(欠拟合)。
    • 维度归一化:对特征进行标准化处理(如Z-score),消除量纲差异对距离度量的影响。
    • 距离加权 :引入权值函数(如 w i = 1 / d ( x , x i ) w_i = 1/d(\boldsymbol{x},\boldsymbol{x}_i) wi=1/d(x,xi)),使近邻对决策的贡献度随距离衰减。
  5. 算法特性

    • 懒惰学习(Lazy Learning):无显式训练阶段,计算延迟至预测时执行。
    • 维度敏感性:高维数据下,样本稀疏性与距离计算复杂度显著增加,需结合降维技术(如PCA、LDA)优化性能。
    • 决策边界:kNN生成的决策边界为非线性分段超平面,模型复杂度随k值增大而降低。

理论依据

kNN的泛化误差收敛性由Cover和Hart定理保证:当训练样本趋于无限且 k → ∞ k \rightarrow \infty k→∞、 k / n → 0 k/n \rightarrow 0 k/n→0时,分类错误率不超过贝叶斯最优错误率的两倍。该性质揭示了kNN在渐进意义下的统计合理性。

头歌实战-numpy实现KNN

python 复制代码
#encoding=utf8
import numpy as np
from collections import Counter

class kNNClassifier(object):
    def __init__(self, k):
        '''
        初始化函数
        :param k:kNN算法中的k
        '''
        self.k = k
        # 用来存放训练数据,类型为ndarray
        self.train_feature = None
        # 用来存放训练标签,类型为ndarray
        self.train_label = None


    def fit(self, feature, label):
        '''
        kNN算法的训练过程
        :param feature: 训练集数据,类型为ndarray
        :param label: 训练集标签,类型为ndarray
        :return: 无返回
        '''

        #********* Begin *********#
        self.train_feature=feature
        self.train_label=label

        #********* End *********#


    def predict(self, feature):
        '''
        kNN算法的预测过程
        :param feature: 测试集数据,类型为ndarray
        :return: 预测结果,类型为ndarray或list
        '''

        #********* Begin *********#
        #测试集中的feature也是多个的
        predict=[]
        #需要遍历测试集中的feature
        for sample in feature:
            distance=np.sum((sample-self.train_feature)**2,axis=1)**(1.0/2)#(samples,)
            #获取前k个近邻的索引
            index=np.argsort(distance)[:self.k]  
            #获取这几个索引的label
            pre_label=self.train_label[index]
            #统计每个标签的频次
            label_count=Counter(pre_label)
            #字典数据Counter({
                #label1: count1,
                #label2: count2,
                #...
            #})
            #找出次数最多的标签所对应的次数,因此这个max_count事实上是一个整数
            max_count = max(label_count.values())
            most_common_labels = [label for label , count in label_count.items() if count== max_count]

            #事实上,还需要处理频次相同的情况,但是此处只需要0.9的正确率就够了
            predict.append(most_common_labels[0])
        return predict
        #********* End *********#

sklearn实现KNN

python 复制代码
from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import StandardScaler

def classification(train_feature, train_label, test_feature):
    '''
    对test_feature进行红酒分类
    :param train_feature: 训练集数据,类型为ndarray
    :param train_label: 训练集标签,类型为ndarray
    :param test_feature: 测试集数据,类型为ndarray
    :return: 测试集数据的分类结果
    '''

    #********* Begin *********#
    # 实例化StandardScaler对象
    scaler = StandardScaler()
    after_scaler_train = scaler.fit_transform(train_feature)
    after_scaler_test = scaler.fit_transform(test_feature)

    #生成K近邻分类器
    clf=KNeighborsClassifier(n_neighbors=8,p=2) 
    #训练分类器
    clf.fit(after_scaler_train,train_label)
    #进行预测
    predict_result=clf.predict(after_scaler_test)
    return predict_result
    #********* End **********#

降维------多维缩放(Multidimensional Scaling, MDS,MDS)提出背景与原理重述

1.提出背景

在高维数据分析中,降维操作需满足拓扑不变性约束 :降维后的低维空间应保持 原始高维空间中样本间距离的全局几何关系。多维缩放(Multidimensional Scaling, MDS)的核心目标即通过数学变换,将原始样本投影至低维嵌入空间,使得任意两样本在低维空间中的欧氏距离与原始空间中的广义距离严格一致,从而避免降维导致的样本分布畸变。


2.数学建模与原理推导

设原始空间存在 m m m个样本,其距离矩阵为 D ∈ R m × m \boldsymbol{D} \in \mathbb{R}^{m \times m} D∈Rm×m,其中 D i j D_{ij} Dij表示样本 x i \boldsymbol{x}_i xi与 x j \boldsymbol{x}_j xj的原始距离(不限定欧氏距离)。MDS要求构造低维坐标矩阵 Z ∈ R m × d ′ \boldsymbol{Z} \in \mathbb{R}^{m \times d'} Z∈Rm×d′( d ′ ≪ d d' \ll d d′≪d),使得两样本在高维空间的距离等于投影之后在低位空间中的欧式距离
∥ z i − z j ∥ 2 = D i j , ∀ i , j ∈ { 1 , 2 , . . . , m } \|\boldsymbol{z}_i - \boldsymbol{z}_j\|2 = D{ij}, \quad \forall i,j \in \{1,2,...,m\} ∥zi−zj∥2=Dij,∀i,j∈{1,2,...,m}

3.关键推导步骤

  1. 中心化约束

    令低维坐标矩阵 Z \boldsymbol{Z} Z满足中心化条件: ∑ i = 1 m z i = 0 \sum_{i=1}^m \boldsymbol{z}i = \boldsymbol{0} ∑i=1mzi=0。此时,内积矩阵 B = Z Z ⊤ ∈ R m × m \boldsymbol{B} = \boldsymbol{Z}\boldsymbol{Z}^\top \in \mathbb{R}^{m \times m} B=ZZ⊤∈Rm×m的每行(列)和为0,即:
    ∑ i = 1 m B i j = ∑ j = 1 m B i j = 0 \sum
    {i=1}^m B_{ij} = \sum_{j=1}^m B_{ij} = 0 i=1∑mBij=j=1∑mBij=0

  2. 距离与内积的转换

    低维欧氏距离平方可展开为:
    D i j 2 = ∥ z i ∥ 2 + ∥ z j ∥ 2 − 2 z i ⊤ z j D_{ij}^2 = \|\boldsymbol{z}_i\|^2 + \|\boldsymbol{z}_j\|^2 - 2\boldsymbol{z}_i^\top \boldsymbol{z}_j Dij2=∥zi∥2+∥zj∥2−2zi⊤zj

    结合中心化条件,定义辅助变量:

    • 行内积均值: T i = 1 m ∑ j = 1 m B i j T_i = \frac{1}{m} \sum_{j=1}^m B_{ij} Ti=m1∑j=1mBij
    • 全局内积均值: T = 1 m 2 ∑ i = 1 m ∑ j = 1 m B i j T = \frac{1}{m^2} \sum_{i=1}^m \sum_{j=1}^m B_{ij} T=m21∑i=1m∑j=1mBij

    通过代数运算可得内积矩阵元素:
    B i j = − 1 2 ( D i j 2 − T i − T j + T ) B_{ij} = -\frac{1}{2} \left( D_{ij}^2 - T_i - T_j + T \right) Bij=−21(Dij2−Ti−Tj+T)

  3. 矩阵重构与特征分解

    对 B \boldsymbol{B} B进行特征值分解:
    B = V Λ V ⊤ \boldsymbol{B} = \boldsymbol{V} \boldsymbol{\Lambda} \boldsymbol{V}^\top B=VΛV⊤

    其中 Λ = diag ( λ 1 , λ 2 , . . . , λ m ) \boldsymbol{\Lambda} = \text{diag}(\lambda_1, \lambda_2, ..., \lambda_m) Λ=diag(λ1,λ2,...,λm)为特征值对角矩阵(降序排列), V \boldsymbol{V} V为对应特征向量矩阵。选取前 d ′ d' d′个正特征值及其特征向量,则低维坐标为:
    Z = V [ : , 1 : d ′ ] Λ [ 1 : d ′ , 1 : d ′ ] 1 / 2 \boldsymbol{Z} = \boldsymbol{V}{[:,1:d']} \boldsymbol{\Lambda}{[1:d',1:d']}^{1/2} Z=V[:,1:d′]Λ[1:d′,1:d′]1/2


算法流程

  1. 输入 :距离矩阵 D ∈ R m × m \boldsymbol{D} \in \mathbb{R}^{m \times m} D∈Rm×m,目标维度 d ′ d' d′
  2. 计算内积矩阵
    • 计算双中心化矩阵:
      B i j = − 1 2 ( D i j 2 − 1 m ∑ k = 1 m D i k 2 − 1 m ∑ k = 1 m D k j 2 + 1 m 2 ∑ k = 1 m ∑ l = 1 m D k l 2 ) B_{ij} = -\frac{1}{2} \left( D_{ij}^2 - \frac{1}{m} \sum_{k=1}^m D_{ik}^2 - \frac{1}{m} \sum_{k=1}^m D_{kj}^2 + \frac{1}{m^2} \sum_{k=1}^m \sum_{l=1}^m D_{kl}^2 \right) Bij=−21(Dij2−m1k=1∑mDik2−m1k=1∑mDkj2+m21k=1∑ml=1∑mDkl2)
  3. 特征分解
    • 对 B \boldsymbol{B} B进行特征分解,保留前 d ′ d' d′个最大正特征值及对应特征向量
  4. 输出 :低维坐标矩阵 Z ∈ R m × d ′ \boldsymbol{Z} \in \mathbb{R}^{m \times d'} Z∈Rm×d′

理论意义与局限性

  • 保距性:MDS严格保持样本间距离,适用于欧氏距离保持场景
  • 计算复杂度特征分解 复杂度为 O ( m 3 ) O(m^3) O(m3),不适用于大规模数据
  • 扩展性 :经典MDS假设原始距离为欧氏距离,对非度量型距离需采用非度量MDS变体

Principal Component Analysis, PCA 主成分分析

为什么PCA有效?

从最大可分性的角度理解,我们要求降维后的样本在低位空间上仍然能够做到坐标间的方差最大化,使得数据分布能尽可能分散以增强可分性。然而,以协方差矩阵的特征值最大的特征向量方向投影就是能够最大化可分性目标的做法两者是等价的。
PCA的过程是什么?

首先对每个样本点减去特征均值,然后 X X T XX^T XXT获得协方差矩阵。然后特征分解求得前d个最大的特征值,将这些特征值的特征向量作为投影的矩阵。达到降维的目的
PCA有什么局限?

只能捕捉线性结构的特征,对于非线性流形需要引入kernel PCA

1.提出背景与有效性基础

主成分分析(Principal Component Analysis, PCA)作为线性降维技术的代表,其有效性建立在统计最优性准则几何投影理论 的等价性上。面对高维数据中普遍存在的特征冗余与维度灾难问题,主成分分析(PCA)直接通过一个线性变换,将原始空间中的样本投影到新的低维空间中。简单来理解这一过程便是:PCA采用一组新的基来表示样本点,其中每一个基向量都是原来基向量的线性组合,通过使用尽可能少的新基向量来表出样本,从而达到降维的目的

  1. 最近重构性(Minimum Reconstruction Error)

    要求投影后的低维坐标能最大程度保留原始高维数据的拓扑结构,即样本点到投影超平面的垂直距离平方和最小:
    min ⁡ W ⊤ W = I ∑ i = 1 m ∥ x i − W W ⊤ x i ∥ 2 \min_{\boldsymbol{W}^\top\boldsymbol{W} = \boldsymbol{I}} \sum_{i=1}^m \|\boldsymbol{x}_i - \boldsymbol{W}\boldsymbol{W}^\top\boldsymbol{x}_i\|^2 W⊤W=Imini=1∑m∥xi−WW⊤xi∥2

    其中 W ∈ R d × d ′ \boldsymbol{W} \in \mathbb{R}^{d \times d'} W∈Rd×d′为投影矩阵,约束条件 W ⊤ W = I \boldsymbol{W}^\top\boldsymbol{W} = \boldsymbol{I} W⊤W=I保证基向量正交归一化。

  2. 最大可分性(Maximum Variance Projection)
    要求投影后样本在低维空间的坐标方差最大化,使数据分布尽可能分散以增强可分性
    max ⁡ W ⊤ W = I tr ( W ⊤ X ⊤ X W ) \max_{\boldsymbol{W}^\top\boldsymbol{W} = \boldsymbol{I}} \text{tr}\left( \boldsymbol{W}^\top\boldsymbol{X}^\top\boldsymbol{X}\boldsymbol{W} \right) W⊤W=Imaxtr(W⊤X⊤XW)

    此处 X ∈ R m × d \boldsymbol{X} \in \mathbb{R}^{m \times d} X∈Rm×d为数据中心化后的样本矩阵,协方差矩阵 Σ = 1 m X ⊤ X \boldsymbol{\Sigma} = \frac{1}{m}\boldsymbol{X}^\top\boldsymbol{X} Σ=m1X⊤X。因此事实上沿着协方差矩阵特征值较大的特征向量的方向投影就使得投影之后的方差较大

2.优化问题的等价性证明

通过代数变换可证上述两目标函数等价:
∑ i = 1 m ∥ x i − W W ⊤ x i ∥ 2 = tr ( X ⊤ X ) − tr ( W ⊤ X ⊤ X W ) \sum_{i=1}^m \|\boldsymbol{x}_i - \boldsymbol{W}\boldsymbol{W}^\top\boldsymbol{x}_i\|^2 = \text{tr}(\boldsymbol{X}^\top\boldsymbol{X}) - \text{tr}(\boldsymbol{W}^\top\boldsymbol{X}^\top\boldsymbol{X}\boldsymbol{W}) i=1∑m∥xi−WW⊤xi∥2=tr(X⊤X)−tr(W⊤X⊤XW)

因此,最小化重构误差等价于最大化投影方差。此等价性揭示了PCA在信息压缩与特征保持之间的根本一致性。

3.数学求解与有效性保障

对协方差矩阵 Σ \boldsymbol{\Sigma} Σ进行特征值分解:
Σ = V Λ V ⊤ \boldsymbol{\Sigma} = \boldsymbol{V} \boldsymbol{\Lambda} \boldsymbol{V}^\top Σ=VΛV⊤

其中特征向量矩阵 V = [ v 1 , v 2 , . . . , v d ] \boldsymbol{V} = [\boldsymbol{v}_1, \boldsymbol{v}_2, ..., \boldsymbol{v}_d] V=[v1,v2,...,vd]对应特征值降序排列 λ 1 ≥ λ 2 ≥ . . . ≥ λ d \lambda_1 \geq \lambda_2 \geq ... \geq \lambda_d λ1≥λ2≥...≥λd。选取前 d ′ d' d′个特征向量构成投影矩阵 W = [ v 1 , v 2 , . . . , v d ′ ] \boldsymbol{W} = [\boldsymbol{v}_1, \boldsymbol{v}2, ..., \boldsymbol{v}{d'}] W=[v1,v2,...,vd′],其有效性由以下理论保证:

  • Karhunen-Loève定理:正交投影下,PCA是保留样本二阶统计量(协方差)的最优线性降维方法。
  • 方差解释率 :主成分方差 λ i \lambda_i λi反映数据在该方向的信息量,累计贡献率 ∑ i = 1 d ′ λ i / ∑ i = 1 d λ i \sum_{i=1}^{d'}\lambda_i / \sum_{i=1}^d \lambda_i ∑i=1d′λi/∑i=1dλi量化降维后的信息保留程度。

算法优势与适用性

  1. 去相关特性:主成分坐标间协方差为0,消除特征冗余。
  2. 计算高效性 :基于协方差矩阵的特征分解,时间复杂度为 O ( d 3 ) O(d^3) O(d3),适合中等维度数据。
  3. 去噪能力:舍弃小特征值对应的成分,可滤除低方差方向的高频噪声。

局限性

  • 仅捕捉线性结构,对非线性流形需引入核方法(Kernel PCA)
  • 方差最大化可能忽略判别信息,分类任务中需结合LDA等监督降维方法。

通过最大化数据内在方差与最小化信息损失的双重优化,PCA构建了高维数据在低维空间的最优线性表征,其数学严密性与计算可行性奠定了其作为基础降维技术的核心地位。

相关推荐
知识分享小能手1 小时前
React学习教程,从入门到精通, React 属性(Props)语法知识点与案例详解(14)
前端·javascript·vue.js·学习·react.js·vue·react
茯苓gao4 小时前
STM32G4 速度环开环,电流环闭环 IF模式建模
笔记·stm32·单片机·嵌入式硬件·学习
是誰萆微了承諾4 小时前
【golang学习笔记 gin 】1.2 redis 的使用
笔记·学习·golang
DKPT5 小时前
Java内存区域与内存溢出
java·开发语言·jvm·笔记·学习
aaaweiaaaaaa5 小时前
HTML和CSS学习
前端·css·学习·html
看海天一色听风起雨落6 小时前
Python学习之装饰器
开发语言·python·学习
speop7 小时前
llm的一点学习笔记
笔记·学习
非凡ghost7 小时前
FxSound:提升音频体验,让音乐更动听
前端·学习·音视频·生活·软件需求
ue星空8 小时前
月2期学习笔记
学习·游戏·ue5
萧邀人8 小时前
第二课、熟悉Cocos Creator 编辑器界面
学习