西瓜书学习笔记——流形学习(公式推导+举例应用)

news2024/11/28 4:36:12

文章目录

      • 等度量映射(仅保留点与其邻近点的距离)
        • 算法介绍
        • 实验分析
      • 局部线性嵌入(不仅保留点与其邻近点的距离还要保留邻近关系)
        • 算法介绍
        • 实验分析

等度量映射(仅保留点与其邻近点的距离)

算法介绍

等度量映射(Isomap)的基本思想是通过保持数据点之间的测地距离(沿着数据流形的最短路径测量的距离)来近似保持数据流形的局部几何结构。这与传统的多维缩放(MDS)不同,MDS通常保持点之间的欧几里德距离,而这可能在流形结构下失效。

而流形是指在高维空间中嵌入的低维结构,这种结构可能是非线性的、弯曲的,而不是简单的线性关系。

接着利用流行在局部上与欧式空间同胚这个性质,对每个点基于欧式距离找出其近邻点,然后将近邻点连接起来,构成一个无向图,接着使用DijkstraFloyd求解最短路径构成距离矩阵,最终使用MDS算法求解。

其中同胚是指,一个 n n n维流形是指每个点都有一个邻域,该邻域与 n n n维欧式空间中的开集同胚。这意味着在每个点的附近,流形的局部结构可以用欧式空间的坐标系统来描述。虽然整个流形可能是非欧式的,但在每个点处,我们可以找到一个局部的坐标系统,使得该点附近的结构与欧式空间中的结构相似。(这与微积分的定义很相似,都是在某一邻域上的近似)

下图是Isomap的算法流程图:

在这里插入图片描述

Isomap 只提供了训练样本在低维空间的坐标,对于新样本,一种通用的方法是使用回归学习器。通过将训练样本的高维空间坐标作为输入,相应的低维空间坐标作为输出,训练一个回归模型。该模型可用于对新样本的低维空间坐标进行预测,尽管这只是一种权宜之计,目前似乎还没有更好的方法来处理 Isomap 在新样本上的映射问题。

构建近邻图有两种常见方法:一是指定K近邻点,二是指定距离阈值得到d近邻图。但两者存在问题,过大的近邻范围可能导致“短路”,将远距离点误认为近邻;反之,过小的范围可能导致“断路”,某些区域与其他区域失去连接。这可能对后续最短路径计算产生误导。选择构建方法时需要权衡参数以避免这些问题。

实验分析
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 读取数据
data = pd.read_csv('data/correlated_dataset.csv')

# 计算欧氏距离
def euclidean_distance(point1, point2):
    return np.sqrt(np.sum((point1 - point2)**2))

# 计算近邻图
def compute_neighbors(data, k=5):
    num_samples = len(data)
    neighbors = np.zeros((num_samples, k), dtype=int)

    for i in range(num_samples):
        distances = [euclidean_distance(data.iloc[i], data.iloc[j]) for j in range(num_samples) if i != j]
        indices = np.argsort(distances)[:k]
        neighbors[i] = indices

    return neighbors

# 计算测地距离
def compute_geodesic_distances(neighbors, data):
    num_samples = len(data)
    geodesic_distances = np.zeros((num_samples, num_samples))

    for i in range(num_samples):
        for j in range(num_samples):
            if i != j:
                path_distance = 0
                current = i
                next_neighbor = neighbors[i, 0]

                while next_neighbor != j:
                    path_distance += euclidean_distance(data.iloc[current], data.iloc[next_neighbor])
                    current = next_neighbor
                    next_neighbor = neighbors[current, 0]

                geodesic_distances[i, j] = path_distance

    return geodesic_distances

# Isomap算法
def isomap(data, k_neighbors=5, low_dim=2):
    # 计算近邻图
    neighbors = compute_neighbors(data, k_neighbors)

    # 计算测地距离
    geodesic_distances = compute_geodesic_distances(neighbors, data)

    # 使用MDS算法降维
    n = len(data)
    H = np.eye(n) - np.ones((n, n)) / n
    B = -0.5 * H @ geodesic_distances**2 @ H
    eigvals, eigvecs = np.linalg.eigh(B)

    # 取最小的low_dim个特征值对应的特征向量
    indices = np.argsort(eigvals)[:low_dim]
    low_dim_eigvecs = eigvecs[:, indices]

    return low_dim_eigvecs

# 降维
low_dim_data = isomap(data.drop(columns=['Target']))

# 可视化降维结果
plt.scatter(low_dim_data[:, 0], low_dim_data[:, 1], c=data['Target'], cmap='viridis')
plt.title('Isomap降维结果')
plt.xlabel('主成分1')
plt.ylabel('主成分2')
plt.show()

在这里插入图片描述

局部线性嵌入(不仅保留点与其邻近点的距离还要保留邻近关系)

算法介绍

与Isomap算法不同,局部线性嵌入(LLE)算法是要保留邻近关系。

如下图所示:

在这里插入图片描述
假定样本点 x i x_i xi的坐标能通过它的领域内的样本 x j , x k , x l x_j,x_k,x_l xj,xk,xl的坐标通过线性组合而重构出来的,即:

x i = w i j x j + w i k x k + w i l x l (1) x_i=w_{ij}x_j+w_{ik}x_k+w_{il}x_l\tag{1} xi=wijxj+wikxk+wilxl(1)

而LLE算法希望式(1)这种关系能在低维空间中依然存在。

LLE算法先对每个样本 x i x_i xi找出其近邻的下标集合 Q i Q_i Qi,然后计算出基于 Q i Q_i Qi中的样本点对 x i x_i xi进行线性重构的系数 w i w_i wi
min ⁡ w 1 , w 2 , … , w m ∑ i = 1 m ∥ x i − ∑ j ∈ Q i w i j x j ∥ 2 2  s.t.  ∑ j ∈ Q i w i j = 1 (2) \begin{aligned} \min _{\boldsymbol{w}_1, \boldsymbol{w}_2, \ldots, \boldsymbol{w}_m} & \sum_{i=1}^m\left\|\boldsymbol{x}_i-\sum_{j \in Q_i} w_{i j} \boldsymbol{x}_j\right\|_2^2 \\ \text { s.t. } & \sum_{j \in Q_i} w_{i j}=1 \end{aligned} \tag{2} w1,w2,,wmmin s.t. i=1m xijQiwijxj 22jQiwij=1(2)

我们可以将式(2)进行恒等变形:

∑ i = 1 m ∥ x i − ∑ j ∈ Q i w i j x j ∥ 2 2 = ∑ i = 1 m ∥ ∑ j ∈ Q i w i j x i − ∑ j ∈ Q i w i j x j ∥ 2 2 = ∑ i = 1 m ∥ ∑ j ∈ Q i w i j ( x i − x j ) ∥ 2 2 = ∑ i = 1 m ∥ X i w i ∥ 2 2 = ∑ i = 1 m w i T X i T X i w i (3) \begin{aligned} \sum_{i=1}^m\left\|\boldsymbol{x_i}-\sum_{j \in Q_i} w_{i j} \boldsymbol{x}_j\right\|_2^2 & =\sum_{i=1}^m\left\|\sum_{j \in Q_i} w_{i j} \boldsymbol{x}_i-\sum_{j \in Q_i} w_{i j} \boldsymbol{x}_j\right\|_2^2 \\ & =\sum_{i=1}^m\left\|\sum_{j \in Q_i} w_{i j}\left(\boldsymbol{x}_i-\boldsymbol{x}_j\right)\right\|_2^2 \\ & =\sum_{i=1}^m\left\|\mathbf{X}_i \boldsymbol{w}_{\boldsymbol{i}}\right\|_2^2 \\ & =\sum_{i=1}^m \boldsymbol{w}_{\boldsymbol{i}}{ }^{\mathrm{T}} \mathbf{X}_i^{\mathrm{T}} \mathbf{X}_i \boldsymbol{w}_{\boldsymbol{i}} \end{aligned} \tag{3} i=1m xijQiwijxj 22=i=1m jQiwijxijQiwijxj 22=i=1m jQiwij(xixj) 22=i=1mXiwi22=i=1mwiTXiTXiwi(3)

其中 w i = ( w i q i 1 , w i q i 2 , … , w i q i n ) ∈ R n × 1 , X i = ( x i − x q i 1 , x i − x q i 2 , … , x i − x q i n ) ∈ R d × n \boldsymbol{w}_{\boldsymbol{i}}=\left(w_{i q_i^1}, w_{i q_i^2}, \ldots, w_{i q_i^n}\right) \in \mathbb{R}^{n \times 1}, \mathbf{X}_i=\left(\boldsymbol{x}_i-\boldsymbol{x}_{q_i^1}, \boldsymbol{x}_i-\boldsymbol{x}_{q_i^2}, \ldots, \boldsymbol{x}_i-\boldsymbol{x}_{q_i^n}\right) \in \mathbb{R}^{d \times n} wi=(wiqi1,wiqi2,,wiqin)Rn×1,Xi=(xixqi1,xixqi2,,xixqin)Rd×n。约束条件可进行如下恒等变形:

∑ j ∈ Q i w i j = w i T E = 1 (4) \sum_{j\in Q_i}w_{ij}=w_i^T\mathbf{E}=1\tag{4} jQiwij=wiTE=1(4)

其中 E = ( 1 , 1 , . . . , 1 ) ∈ R n × 1 \mathbf{E}=(1,1,...,1)\in \mathbb{R}^{n\times 1} E=(1,1,...,1)Rn×1 n n n行1列的单位向量。

故优化问题可重写成:
min ⁡ w 1 , w 2 , … , w m ∑ i = 1 m w i T X i T X i w i  s.t.  w i T E = 1 (5) \begin{aligned} \min _{\boldsymbol{w}_1, \boldsymbol{w}_2, \ldots, \boldsymbol{w}_m} & \sum_{i=1}^m \boldsymbol{w}_{\boldsymbol{i}}{ }^{\mathrm{T}} \mathbf{X}_i^{\mathrm{T}} \mathbf{X}_i \boldsymbol{w}_{\boldsymbol{i}} \\ \text { s.t. } & w_i^T\mathbf{E}=1 \end{aligned} \tag{5} w1,w2,,wmmin s.t. i=1mwiTXiTXiwiwiTE=1(5)

采用拉格朗日乘子法求解,有:

L ( w 1 , w 2 , … , w m , λ ) = ∑ i = 1 m w i T X i T X i w i + λ ( w i T E − 1 ) (6) L\left(\boldsymbol{w}_1, \boldsymbol{w}_2, \ldots, \boldsymbol{w}_m, \lambda\right)=\sum_{i=1}^m \boldsymbol{w}_{\boldsymbol{i}}^{\mathrm{T}} \mathbf{X}_i^{\mathrm{T}} \mathbf{X}_i \boldsymbol{w}_{\boldsymbol{i}}+\lambda\left(\boldsymbol{w}_{\boldsymbol{i}}^{\mathrm{T}} \boldsymbol{E}-1\right)\tag{6} L(w1,w2,,wm,λ)=i=1mwiTXiTXiwi+λ(wiTE1)(6)

式(6)对 w i w_i wi求偏导并令其为零,有:
∂ L ∂ w i = 2 X i T X i w i + λ E = 0 (8) \frac{\partial L}{\partial w_i}=2 \mathbf{X}_i^T \mathbf{X}_i w_i+\lambda \boldsymbol{E}=0 \tag{8} wiL=2XiTXiwi+λE=0(8)

则:

w i = − 1 2 λ ( X i T X i ) − 1 E (9) w_i=-\frac{1}{2}\lambda (\mathbf{X}_i^T\mathbf{X}_i)^{-1}\boldsymbol{E}\tag{9} wi=21λ(XiTXi)1E(9)

又因为 w i T E = E T w i = 1 w_i^T\mathbf{E}=\mathbf{E}^Tw_i=1 wiTE=ETwi=1,故式(9)两边同时左乘 E T \mathbf{E}^T ET,有:

E T w i = − 1 2 λ E T ( X i T X i ) − 1 E − 1 2 λ = 1 E T ( X i T X i ) − 1 E (10) \begin{aligned} \boldsymbol{E}^Tw_i&=-\frac{1}{2}\lambda \boldsymbol{E}^T(\mathbf{X}_i^T\mathbf{X}_i)^{-1}\boldsymbol{E}\\ -\frac{1}{2}\lambda&=\frac{1}{\boldsymbol{E}^T(\mathbf{X}_i^T\mathbf{X}_i)^{-1}\boldsymbol{E}} \end{aligned}\tag{10} ETwi21λ=21λET(XiTXi)1E=ET(XiTXi)1E1(10)

然后回代入式(9)中,有:

w i = ( X i T X i ) − 1 E E T ( X i T X i ) − 1 E (11) w_i=\frac{(\mathbf{X}_i^T\mathbf{X}_i)^{-1}\boldsymbol{E}}{\boldsymbol{E}^T(\mathbf{X}_i^T\mathbf{X}_i)^{-1}\boldsymbol{E}}\tag{11} wi=ET(XiTXi)1E(XiTXi)1E(11)

令矩阵 ( X i T X i ) − 1 (\mathbf{X}_i^T\mathbf{X}_i)^{-1} (XiTXi)1 i i i行第 k k k列的元素为 C j k − 1 C_{jk}^{-1} Cjk1,即 C j k = ( x i − x j ) T ( x i − x j ) C_{jk}=(x_i-x_j)^T(x_i-x_j) Cjk=(xixj)T(xixj),则:

w i j = w i q i j = ∑ k ∈ Q i C j k − 1 ∑ l , s ∈ Q i C l s − 1 (12) w_{i j}=w_{i q_i^j}=\frac{\sum_{k \in Q_i} C_{j k}^{-1}}{\sum_{l, s \in Q_i} C_{l s}^{-1}} \tag{12} wij=wiqij=l,sQiCls1kQiCjk1(12)

其中 w i j w_{ij} wij原始数据集中的某个数据点 x i \boldsymbol{x}_i xi的邻近集合 Q i Q_i Qi中的某个邻居点 x j \boldsymbol{x}_j xj对重构 x i \boldsymbol{x}_i xi的权重。

由于LLE在低维空间中保持 w i w_i wi不变,于是 x i x_i xi对应的低维空间坐标 z i z_i zi可通过下式求解:

min ⁡ w 1 , w 2 , … , w m ∑ i = 1 m ∥ z i − ∑ j ∈ Q i w i j z j ∥ 2 2 (13) \begin{aligned} \min _{\boldsymbol{w}_1, \boldsymbol{w}_2, \ldots, \boldsymbol{w}_m} & \sum_{i=1}^m\left\|\boldsymbol{z}_i-\sum_{j \in Q_i} w_{i j} \boldsymbol{z}_j\right\|_2^2 \\ \end{aligned} \tag{13} w1,w2,,wmmini=1m zijQiwijzj 22(13)

Z = ( z 1 , z 2 , … , z m ) ∈ R d ′ × m , ( W ) i j = w i j \mathbf{Z}=\left(\boldsymbol{z}_1, \boldsymbol{z}_2, \ldots, \boldsymbol{z}_m\right) \in \mathbb{R}^{d^{\prime} \times m},(\mathbf{W})_{i j}=w_{i j} Z=(z1,z2,,zm)Rd×m,(W)ij=wij
M = ( E − W ) T ( E − W ) (14) \mathbf{M}=\mathbf{(E-W)^T(E-W)}\tag{14} M=(EW)T(EW)(14)

故式(13)可重写为:
min ⁡ Z ∑ i = 1 m ∥ z i − ∑ j ∈ Q i w i j z j ∥ 2 2 = ∑ i = 1 m ∥ Z E i − Z W i ∥ 2 2 = ∑ i = 1 m ∥ Z ( E i − W i ) ∥ 2 2 = ∑ i = 1 m ( Z ( E i − W i ) ) T Z ( E i − W i ) = ∑ i = 1 m ( E i − W i ) T Z T Z ( E i − W i ) = tr ⁡ ( ( E − W ) T Z T Z ( E − W ) ) = tr ⁡ ( Z ( E − W ) ( E − W ) T Z T ) = tr ⁡ ( Z M Z T ) (15) \begin{aligned} \min _{\boldsymbol{Z}} \sum_{i=1}^m\left\|\boldsymbol{z}_i-\sum_{j \in Q_i} w_{i j} \boldsymbol{z}_j\right\|_2^2 & =\sum_{i=1}^m\left\|\boldsymbol{Z} \boldsymbol{E}_i-\boldsymbol{Z} \boldsymbol{W}_i\right\|_2^2 \\ & =\sum_{i=1}^m\left\|\boldsymbol{Z}\left(\boldsymbol{E}_i-\boldsymbol{W}_i\right)\right\|_2^2 \\ & =\sum_{i=1}^m\left(\boldsymbol{Z}\left(\boldsymbol{E}_i-\boldsymbol{W}_i\right)\right)^T \boldsymbol{Z}\left(\boldsymbol{E}_i-\boldsymbol{W}_i\right) \\ & =\sum_{i=1}^m\left(\boldsymbol{E}_i-\boldsymbol{W}_i\right)^T \boldsymbol{Z}^T \boldsymbol{Z}\left(\boldsymbol{E}_i-\boldsymbol{W}_i\right) \\ & =\operatorname{tr}\left((\boldsymbol{E}-\boldsymbol{W})^T \boldsymbol{Z}^T \boldsymbol{Z}(\boldsymbol{E}-\boldsymbol{W})\right) \\ & =\operatorname{tr}\left(\boldsymbol{Z}(\boldsymbol{E}-\boldsymbol{W})(\boldsymbol{E}-\boldsymbol{W})^T \boldsymbol{Z}^T\right) \\ & =\operatorname{tr}\left(\boldsymbol{Z} \boldsymbol{M} \boldsymbol{Z}^T\right)\\ \end{aligned}\tag{15} Zmini=1m zijQiwijzj 22=i=1mZEiZWi22=i=1mZ(EiWi)22=i=1m(Z(EiWi))TZ(EiWi)=i=1m(EiWi)TZTZ(EiWi)=tr((EW)TZTZ(EW))=tr(Z(EW)(EW)TZT)=tr(ZMZT)(15)

其约束条件为 Z T Z = E \mathbf{Z^TZ=E} ZTZ=E是为了得到标准化的低维数据。

整理一下可得:

min ⁡ Z tr ⁡ ( Z M Z T )  s.t.  Z T Z = E (16) \begin{aligned} \min _{\mathbf{Z}} & \operatorname{tr}\left(\boldsymbol{Z} \boldsymbol{M} \boldsymbol{Z}^T\right) \\ \text { s.t. } & \mathbf{Z^TZ=E} \end{aligned} \tag{16} Zmin s.t. tr(ZMZT)ZTZ=E(16)

最终可通过对 M \mathbf{M} M进行特征值分解,取 M \mathbf{M} M最小的 d ′ d^\prime d个特征值所对应的特征向量组成的矩阵即为 Z T \mathbf{Z^T} ZT

LLE算法流程图如下所示:

在这里插入图片描述

实验分析
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# 读取数据
data = pd.read_csv('data/correlated_dataset.csv')

# LLE算法实现
def lle(X, n_neighbors, n_components):
    m, d = X.shape
    W = np.zeros((m, m))

    # Step 1: 选择近邻
    for i in range(m):
        indices = find_neighbors(X[i], X, n_neighbors)
        W[i, indices] = compute_weights(X[i], X[indices], indices)

    # Step 2: 计算低维表示
    M = np.identity(m) - W
    eigenvalues, eigenvectors = np.linalg.eigh(M)
    idx = np.argsort(eigenvalues)[1:n_components + 1]
    embedding = eigenvectors[:, idx]

    return embedding

# 找到近邻
def find_neighbors(x, X, n_neighbors):
    distances = np.linalg.norm(X - x, axis=1)
    indices = np.argsort(distances)[:n_neighbors]
    return indices

# 计算权重
def compute_weights(x, X, indices):
    Z = X - x
    C = Z @ Z.T
    ones = np.ones(len(indices))
    w = np.linalg.solve(C + 1e-3 * np.identity(len(indices)), ones)
    w /= np.sum(w)
    return w

# 降维并可视化
embedding = lle(data.values[:, :-1], n_neighbors=10, n_components=2)

plt.scatter(embedding[:, 0], embedding[:, 1], c=data['Target'], cmap='viridis')
plt.title('LLE Visualization')
plt.show()

在这里插入图片描述

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

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

相关文章

vue中 日期选择--本日、本周、本月、本年选择器实现(基于elementui)

效果图&#xff1a; 由于项目需要图标统计展示&#xff0c;需要日期美观化选择如上图所示&#xff0c;代码如下&#xff1a; <template><div class"el-page body"><el-row><el-col class"statistic-analysis-report-style" :span&qu…

Elastic Search 6.x 版本 rollover 配置

背景 业务里有发送消息的请求&#xff0c;如短信、邮件、企信等&#xff0c;这些数据都会存储到 ES 中&#xff0c;用于数据的查询和问题排查等。每天都有几十万至几百万的数据&#xff0c;手动删除数据也比较繁琐&#xff0c;可以通过 ES 的 rollover 机制来实现根据条件自动…

PHP框架详解 - symfony框架

首先说一下为什么要写symfony框架&#xff0c;这个框架也属于PHP的一个框架&#xff0c;小编接触也是3年前&#xff0c;原因是小编接触Golang&#xff0c;发现symfony框架有PHP框架的东西也有Golang的东西&#xff0c;所以决定总结一下&#xff0c;有需要的同学可以参看小编的G…

【数据结构与算法】(7)基础数据结构之双端队列的链表实现、环形数组实现示例讲解

目录 2.6 双端队列1) 概述2) 链表实现3) 数组实现习题E01. 二叉树 Z 字层序遍历-Leetcode 103 2.6 双端队列 1) 概述 双端队列、队列、栈对比 定义特点队列一端删除&#xff08;头&#xff09;另一端添加&#xff08;尾&#xff09;First In First Out栈一端删除和添加&…

电脑上常见的绘图软件有哪些?

现在在电脑上绘图很流行&#xff0c;不仅可以随时更改&#xff0c;还可以提高绘图效率&#xff0c;绘图软件中有很多工具。市场上的计算机绘图软件种类繁多。包括艺术设计、工业绘图和3D绘图。那么每个绘图软件都有自己的特点。那么&#xff0c;哪个更适合计算机绘画软件呢&…

信任与创新 | 回顾通付盾的2023!

-END- 数信云&#xff0c;基于区块链与人工智能的数据安全应用与服务平台

基于SpringBoot的后端导出Excel文件

后端导出Excel&#xff0c;前端下载。 文章目录 后端导出Excel引入依赖写入响应 前端下载后端导出失败和成功返回的内容类型不同&#xff0c;因此需要分别判断。 工具类ServletUtils.javaFileUtils.javafile.js 后端导出Excel 引入依赖 poi 操作xls&#xff0c;doc…&#xff…

【Script】使用pyOpenAnnotate搭建半自动标注工具(附python源码)

文章目录 0. Background1. Method2. Code3. Example: 雄鹿红外图像标注3.1 选择色彩空间3.2 执行阈值3.3 执行形态学操作3.4 轮廓分析以找到边界框3.5 过滤不需要的轮廓3.6 绘制边界框3.7 以需要的格式保存Reference本文将手把手教你用Python和OpenCV搭建一个半自动标注工具(包…

Flutter开发模仿百度云盘创建文件夹功能Draggable和DragTarget的混合使用

使用LongPressDraggable和DragTarget写了个类似于百度云盘管理文件和文件夹的功能&#xff08;为了避免和列表的滑动手势冲突&#xff0c;所以采用LongPressDraggable而不是Draggable&#xff09;&#xff1a; 1、拖拽文件到文件夹中 2、拖拽两个文件可以合并成一个新的文件夹…

【linux】git和gdb调试工具

在linux下提交代码同步到gitee 1.创建一个新的仓库&#xff08;演示步骤&#xff09; 2.init 这两个步骤用于识别提交代码的身份&#xff0c;一个你的名字&#xff0c;一个你的邮箱 开启本地仓库 克隆本地仓库成功 我们将这个仓库拷到了111目录底下. 我们发现少了一个.gitig…

window 镜像---负载篇

前提&#xff1a;需要修改window的powershell执行脚本的策略 步骤&#xff1a;以管理员身份打开powershell&#xff0c;执行 Get-ExecutionPolicy查看当前执行策略&#xff0c;若返回值是Restricted&#xff0c;需执行Set-ExecutionPolicy RemoteSigned powershell 版本信息&am…

SpringMVC精简知识点

SpringMVC 数据格式化基本数据类型和字符串自动转换特殊数据类型和字符串自动转换 验证及国际化应用实例注意事项和使用细节注解的结合使用数据类型转换校验核心类-DatBinder取消某个属性的绑定中文乱码解决处理json和HttpMessageConverter<T>作业布置SpringMVC文件上传自…

笔记本电脑的WIFI模块,突然不显示了,网络也连接不上

问题复现&#xff1a; 早上&#xff0c;在更新完笔记本电脑的系统之后&#xff0c;连网之后&#xff0c;网络突然直接断开&#xff0c;一查看&#xff0c;WiFi模块居然不见了&#xff0c;开机重启也是如此&#xff0c;这种情况常常出现在更新系统之后&#xff0c;WiFi模块驱动就…

MySQL集群 1主1从 主从复制(原理 及配置命令)

CSDN 成就一亿技术人&#xff01; 今天分享一期 MySQL集群方案&#xff1a;主从集群 也是最常用的一种 CSDN 成就一亿技术人&#xff01; 目录 使用主从复制的原因&#xff08;优点&#xff09; 主从复制的过程&#xff08;原理&#xff09; 了解两大线程&#xff08; I/O…

7min到40s:SpringBoot 启动优化实践!

目录 背景 1 耗时问题排查 1.1 观察 SpringBoot 启动 run 方法 1.2 监控 Bean 注入耗时 2 优化方案 2.1 如何解决扫描路径过多&#xff1f; 2.2 如何解决 Bean 初始化高耗时&#xff1f; 3 新的问题 3.1 SpringBoot 自动化装配&#xff0c;让人防不胜防 3.2 使用 sta…

大带宽服务器托管的特点和考虑因素

很多公司和企业对于使用大带宽服务器的需求和存储不一样&#xff0c;为了满足不同的用户需求&#xff0c;大带宽服务器托管是个不错的选择&#xff0c;小编为您整理发布大带宽服务器托管的特点和要考虑的因素。 大带宽服务器托管是一种服务器托管服务&#xff0c;其主要特点是…

GLIP:零样本学习 + 目标检测 + 视觉语言大模型

GLIP 核心思想GLIP 对比 BLIP、BLIP-2、CLIP 主要问题: 如何构建一个能够在不同任务和领域中以零样本或少样本方式无缝迁移的预训练模型&#xff1f;统一的短语定位损失语言意识的深度融合预训练数据类型的结合语义丰富数据的扩展零样本和少样本迁移学习 效果 论文&#xff1a;…

JetPackCompose之Text使用指北

Jetpack Compose系列(6) - 文本组件 对应View体系中传统的TextView&#xff0c;Jetpack Compose中用Text组件来显示文本信息。跟其他组件一样&#xff0c;它在构造函数里就包含控制文本显示样式的一些属性&#xff0c;下面是其参数及解释&#xff1a; Composable fun Text(te…

从零开始手写mmo游戏从框架到爆炸(一)— 开发环境

一、创建项目 1、首先创建一个maven项目&#xff0c;pom文件如下&#xff1a; <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0…

力扣面试150 只出现一次的数字Ⅱ 哈希 统计数位 DFA有穷自动机

Problem: 137. 只出现一次的数字 II 文章目录 思路&#x1f496; 哈希&#x1f496; 位数统计&#x1f496; DFA 状态机 思路 &#x1f468;‍&#x1f3eb; 参考 &#x1f496; 哈希 ⏰ 时间复杂度: O ( n ) O(n) O(n) &#x1f30e; 空间复杂度: O ( n ) O(n) O(n) cl…