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

news2025/6/3 22:02:50

请添加图片描述

文章目录

  • 降维与度量学习
    • k近邻学习原理
      • 头歌实战-numpy实现KNN
      • sklearn实现KNN
    • 降维——多维缩放(Multidimensional Scaling, MDS,MDS)提出背景与原理重述
      • 1.**提出背景**
      • 2.**数学建模与原理推导**
      • 3.**关键推导步骤**
    • Principal Component Analysis, PCA 主成分分析
      • 1.**提出背景与有效性基础**
      • 2.**优化问题的等价性证明**
      • 3.**数学求解与有效性保障**

降维与度量学习

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 XRn,给定距离函数 d : X × X → R + d:\mathcal{X} \times \mathcal{X} \rightarrow \mathbb{R}^+ d:X×XR+(如闵可夫斯基距离 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=1nxiuxjup)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)Dd(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=argcYmax(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/n0时,分类错误率不超过贝叶斯最优错误率的两倍。该性质揭示了kNN在渐进意义下的统计合理性。

头歌实战-numpy实现KNN

#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

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} DRm×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'} ZRm×d d ′ ≪ d d' \ll d dd),使得两样本在高维空间的距离等于投影之后在低位空间中的欧式距离
∥ 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\} zizj2=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=ZZRm×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=1mBij=j=1mBij=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=zi2+zj22zizj
    结合中心化条件,定义辅助变量:

    • 行内积均值: T i = 1 m ∑ j = 1 m B i j T_i = \frac{1}{m} \sum_{j=1}^m B_{ij} Ti=m1j=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=m21i=1mj=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(Dij2TiTj+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} DRm×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(Dij2m1k=1mDik2m1k=1mDkj2+m21k=1ml=1mDkl2)
  3. 特征分解
    • B \boldsymbol{B} B进行特征分解,保留前 d ′ d' d最大正特征值及对应特征向量
  4. 输出:低维坐标矩阵 Z ∈ R m × d ′ \boldsymbol{Z} \in \mathbb{R}^{m \times d'} ZRm×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 WW=Imini=1mxiWWxi2
    其中 W ∈ R d × d ′ \boldsymbol{W} \in \mathbb{R}^{d \times d'} WRd×d为投影矩阵,约束条件 W ⊤ W = I \boldsymbol{W}^\top\boldsymbol{W} = \boldsymbol{I} WW=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) WW=Imaxtr(WXXW)
    此处 X ∈ R m × d \boldsymbol{X} \in \mathbb{R}^{m \times d} XRm×d为数据中心化后的样本矩阵,协方差矩阵 Σ = 1 m X ⊤ X \boldsymbol{\Sigma} = \frac{1}{m}\boldsymbol{X}^\top\boldsymbol{X} Σ=m1XX因此事实上沿着协方差矩阵特征值较大的特征向量的方向投影就使得投影之后的方差较大

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=1mxiWWxi2=tr(XX)tr(WXXW)
因此,最小化重构误差等价于最大化投影方差。此等价性揭示了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构建了高维数据在低维空间的最优线性表征,其数学严密性与计算可行性奠定了其作为基础降维技术的核心地位。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2395470.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Portainer安装指南:多节点监控的docker管理面板-家庭云计算专家

背景 Portainer 是一个轻量级且功能强大的容器管理面板,专为 Docker 和 Kubernetes 环境设计。它通过直观的 Web 界面简化了容器的部署、管理和监控,即使是非技术用户也能轻松上手。Portainer 支持多节点管理,允许用户从一个中央控制台管理多…

vscode实用配置

前端开发安装插件: 1.可以更好看的显示文件图标 2.用户快速打开文件 使用步骤:在html文件下右键点击 open with live server 即可 刷力扣: 安装这个插件 还需要安装node.js即可

React 项目中封装 Excel 导入导出组件:技术分享与实践

文章目录 前言一、为什么需要封装 Excel 组件?二、技术选型三、核心实现1. 安装依赖2. 封装Excel导出3. 封装导入组件 (UploadExcel) 总结 前言 在 React 项目中,处理 Excel 文件的导入和导出是常见的业务需求。无论是导出报表数…

【2025CCF中国开源大会】RISC-V 开源生态的挑战与机遇分论坛重磅来袭!共探开源芯片未来

点击蓝字 关注我们 CCF Opensource Development Committee 开源浪潮正从软件席卷硬件领域,RISC-V作为全球瞩目的开源芯片架构,正在重塑计算生态的版图!相较于成熟的x86与ARM,RISC-V生态虽处爆发初期,却蕴藏着无限可能。…

python完成批量复制Excel文件并根据另一个Excel文件中的名称重命名

import openpyxl import shutil import os # 原始文件路径 original_file "C:/Users/Administrator/Desktop/事业联考面试名单/郑州.xlsx" # 读取包含名称的Excel文件 # 修改为您的文件名 wb openpyxl.load_workbook( "C:/Users/Administrator/Desktop/事…

Vue-2-前端框架Vue基础入门之二

文章目录 1 计算属性1.1 计算属性简介1.2 计算属性示例 2 侦听器2.1 简单的侦听器2.2 深度监听2.3 监听对象单个属性 3 vue-cli3.1 工程化的Vue项目3.2 Vue项目的运行流程 4 vue组件4.1 Vue组件的三个部分4.1.1 template4.1.2 script4.1.3 style 4.2 组件之间的关系4.2.1 使用组…

CPT208 Human-Centric Computing 人机交互 Pt.7 交互和交互界面

文章目录 1. 界面隐喻(Interface metaphors)1.1 界面隐喻的应用方式1.2 界面隐喻的优缺点 2. 交互类型2.1 Instructing(指令式交互)2.2 Conversing(对话式交互)2.3 Manipulating(操作式交互&…

[网页五子棋][匹配模块]前后端交互接口(消息推送机制)、客户端开发(匹配页面、匹配功能)

让多个用户,在游戏大厅中能够进行匹配,系统会把实力相近的两个玩家凑成一桌,进行对战 约定前后端交互接口 消息推送机制 匹配这样的功能,也是依赖消息推送机制的 玩家 1 点击开始匹配按钮,就会告诉服务器&#xff1…

【数据分析】Matplotlib+Pandas+Seaborn绘图

【数据分析】MatplotlibPandasSeaborn绘图 (一)Matplotlib绘图1.1 matplotlib绘图方式1: 状态接口1.2 matplotlib绘图方式2: 面向对象1.3 通过安斯科姆数据集, 说明可视化的重要性1.4 MatPlotlib绘图-单变量-直方图1.5 MatPlotlib绘图-双变量-散点图1.6 …

NLP学习路线图(十五):TF-IDF(词频-逆文档频率)

在自然语言处理(NLP)的浩瀚宇宙中,TF-IDF(词频-逆文档频率) 犹如一颗恒星,虽古老却依然璀璨。当ChatGPT、BERT等大模型光芒四射时,TF-IDF作为传统方法的代表,其简洁性、高效性与可解…

[Redis] Redis命令在Pycharm中的使用

初次学习,如有错误还请指正 目录 String命令 Hash命令 List命令 set命令 SortedSet命令 连接pycharm的过程见:[Redis] 在Linux中安装Redis并连接桌面客户端或Pycharm-CSDN博客 redis命令的使用见:[Redis] Redis命令(1&#xf…

openpnp - 给M4x0.7mm的直油嘴加油的工具选择

文章目录 openpnp - 给M4x0.7mm的直油嘴加油的工具选择概述如果换上带卡口的M4x0.7直油嘴END openpnp - 给M4x0.7mm的直油嘴加油的工具选择 概述 X导轨用了一个HG15的滑块 滑块上的注油口的黄油嘴是M4x0.7mm的直油嘴。 外表面是6边形的柱子,没有可以卡住加油嘴工…

EasyExcel复杂Excel导出

效果图展示 1、引入依赖 <!-- easyExcel --> <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>4.0.2</version> </dependency>2、实体类 import com.alibaba.excel.annotatio…

1,QT的编译教程

目录 整体流程: 1,新建project文件 2,编写源代码 3,打开QT的命令行窗口 4,生成工程文件(QT_demo.pro) 5,生成Make file 6,编译工程 7,运行编译好的可执行文件 整体流程: 1,新建project文件 新建文本文件,后缀改为.cpp 2,编写源代码

【笔记】在 MSYS2(MINGW64)中安装 Python 工具链的记录

#工作记录 &#x1f4cc; 安装背景 操作系统&#xff1a;MSYS2 MINGW64当前时间&#xff1a;2025年6月1日Python 版本&#xff1a;3.12&#xff08;默认通过 pacman 安装&#xff09;目标工具链&#xff1a; pipxnumpypipsetuptoolswheel &#x1f6e0;️ 安装过程与结果记录…

Linux 学习-模拟实现【简易版bash】

1、bash本质 在模拟实现前&#xff0c;先得了解 bash 的本质 bash 也是一个进程&#xff0c;并且是不断运行中的进程 证明&#xff1a;常显示的命令输入提示符就是 bash 不断打印输出的结果 输入指令后&#xff0c;bash 会创建子进程&#xff0c;并进行程序替换 证明&#x…

【中国・珠海】2025 物联网与边缘计算国际研讨会(IoTEC2025)盛大来袭!

2025 物联网与边缘计算国际研讨会&#xff08;IoTEC2025&#xff09;盛大来袭&#xff01; 科技浪潮奔涌向前&#xff0c;物联网与边缘计算已成为驱动各行业变革的核心力量。在此背景下&#xff0c;2025 物联网与边缘计算国际研讨会&#xff08;IoTEC2025&#xff09;即将震撼…

中国高分辨率高质量地面CO数据集(2013-2023)

时间分辨率&#xff1a;日空间分辨率&#xff1a;1km - 10km共享方式&#xff1a;开放获取数据大小&#xff1a;9.83 GB数据时间范围&#xff1a;2013-01-01 — 2023-12-31元数据更新时间&#xff1a;2024-08-19 数据集摘要 ChinaHighCO数据集是中国高分辨率高质量近地表空气污…

GO——内存逃逸分析

一、可能导致逃逸的5中情况 package mainimport "fmt"func main() {f1()f2()f3()f4()f5() }type animal interface {run() }type dog struct{}func (d *dog) run() {fmt.Println("狗在跑") }// 指针、map、切片为返回值的会发生内存逃逸 func f1() (*int,…

MinVerse 3D触觉鼠标的技术原理与创新解析

MinVerse3D触觉鼠标通过三维交互和触觉反馈技术&#xff0c;彻底颠覆了传统二维鼠标的操作方式。用户在操作虚拟物体时&#xff0c;可以真实感知表面质感、重量和阻力。这种技术不仅为数字环境注入了深度与临场感&#xff0c;还在3D设计、游戏开发和工程仿真等领域展现了广泛潜…