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

文章目录

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

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

算法介绍

等度量映射(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()

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unity动画循环偏移的使用

最近项目中有一个需求是做煤矿中猴车的动画,动画本身不复杂,但是猴车很多,怎么能简化工作量呢? 首先单个猴车的动画循环是必须要做的,重点是怎么让不同的猴车动画按顺序错开,研究了以下,可以通过…

后端登录校验

文章目录 登录校验CookieSessionJWT生成JWT校验JWT基于JWT进行身份验证CSRF Cookie、Session、Token的区别?过滤器(Filter)配置过滤器过滤器链 登录校验 由于HTTP协议是无状态的,我们在进行登录后等一系列接口请求是无法直接区分是哪一个用户的发给服务…

电路设计(10)——超温报警电路的proteus仿真

1.题目背景 在现实生活中,常有一种工程技术,即带有自动温度补偿的设备,能在规定温度内正常工作。但是为了设备安全,需设定工作的上限温度,万一温控补偿失效,设备温度一旦超出上限温度时,便立即切…

ES高可用架构涉及常用功能整理

ES高可用架构涉及常用功能整理 1. es的高可用系统架构和相关组件2. es的核心参数2.1 常规配置2.2 特殊优化配置2.2.1 数据分片按ip打散2.2.2 数据分片机架感知2.2.3 强制要求数据分片机架感知2.2.4 写入线程池优化2.2.5 分片balance优化2.2.6 限流控制器优化 3. es常用命令3.1 …

项目中将sass更换成less(TypeError: this.getOptions is not a function已解决)

在更换之前,首先了解sass与less在用法上的区别有哪些(这里简单提几个): 变量区别:Less中用,Sass用$sass支持条件语句,可以使用if{}else{}、for循环等,而less不支持在定义变量时候&a…

PyTorch 2.2 中文官方教程(十八)

开始使用完全分片数据并行(FSDP) 原文:pytorch.org/tutorials/intermediate/FSDP_tutorial.html 译者:飞龙 协议:CC BY-NC-SA 4.0 作者:Hamid Shojanazeri,Yanli Zhao,Shen Li 注意…

如何获取和查找您的Android设备的序列号

Hello大家好!我是咕噜铁蛋!,我们经常会在文章中提及到各种各样的Android设备,而其中一个重要的标识就是设备的序列号。设备的序列号在很多情况下被用于唯一标识一个设备,例如在软件开发中进行设备的调试和测试&#xf…

Python统计分析——参数估计

参考资料:用python动手学统计学 所谓参数就是总体分布的参数。 1、导入库 # 导入用于数值计算的库 import numpy as np import pandas as pd import scipy as sp from scipy import stats # 导入用于绘图的库 from matplotlib import pyplot as plt import seabor…

FL Studio Producer Edition 21.2.2全插件版+Crack下载链接(亲测可用,非钓鱼)

不知道为什么现在钓鱼的这么多(有答案的请在评论区上告诉我),就一个学习版的编曲软件有必要这样子搞吗?我也是在各类博客上找了一大堆教程,根本没几个能用的,索性直接到海盗湾上找了一个,发现可…

学习ArtTs -- 初见ArkTs

作者:Uncle_Tom 原文链接:学习ArtTs -- 初见ArkTs-云社区-华为云 1. 前言 需要静态分析去检查一个语言,必须对这个语言有深刻的认识,才能有效的对这个语言进行有效的检查。 我常说:“作为一个程序分析员需要比一般的程序员考虑…

移动端基础-vw适配

什么是vw 相对单位 相对视口的尺寸 vw:viewport width 换算 1vw1/100视口宽度 vw不需要向rem一样检查视口宽度 若视口宽为375px 1vw3.75px vw与vmin的区别 vmin更照顾横竖屏问题 1vw是视口宽度的100%,而vmin是找宽度和高度中最小的那个,这样横屏…

Ansible自动化工具(1)

目录 ansible的特性:. 二.部署ansible 管理端安装 ansible: ansible 目录结构: 管理主机上配置主机清单: ​编辑 配置密钥对验证: ansible 命令行模块 : 1.command 模块 指定 ip 执行…

Python使用zdppy_es国产框架操作Elasticsearch实现增删改查

Python使用zdppy_es国产框架操作Elasticsearch实现增删改查 本套教程配套有录播课程和私教课程,欢迎私信我。 Docker部署ElasticSearch7 创建基本容器 docker run -itd --name elasticsearch -p 9200:9200 -e "discovery.typesingle-node" -e ES_JAVA_…

esp8266 步骤

安装驱动 http://arduino.esp8266.com/stable/package_esp8266com_index.json oled库 esp8266-oled-ssd1306

网络规划与部署实训

一 实训目的及意义 本周实训主要是了解网络规划与部署,熟悉三大厂商华为、思科、锐捷交换机路由器以及相关协议的原理和配置,提高学生的动手能力和分析规划部署能力。 实训主要针对计算机网络系统集成的设计与实现的实际训练,着重锻炼学生熟练…

网站不收录,与服务器不备案有关吗

随着互联网的快速发展,网站已经成为企业、个人和机构宣传和展示自己的重要平台。然而,许多网站在建设完成后却面临着不收录的问题,这给网站的管理者和拥有者带来了很大的困扰。其中,一些人认为,网站不收录的原因与服务…

什么是前端工程化,请举例说明

前端工程化 前端工程化的定义为什么需要前端工程化前端工程化的核心概念 模块化开发:组件化开发:规范化开发:自动化开发:持续集成 前端工程化的主要工具前端工程化的应用总结: 前端工程化 前端工程化的定义 前端工程…

百面嵌入式专栏(面试题)华为面试题

文章目录 题目:static有什么用途?(请至少说明两种)题目:引用与指针有什么区别?题目:描述实时系统的基本特性题目:全局变量和局部变量在内存中是否有区别?如果有,是什么区别?题目:什么是平衡二叉树?题目:堆栈溢出一般是由什么原因导致的?题目:什么函数不能声明为…

2020年通信工程师初级专业实务真题

文章目录 一、第1章 现代通信网概述:信令网、同步网、管理网。第10章 通信业务:通信产业链,通信终端的分类,通信业务的定义及分类二、第3章 接入网:无线接入网的优点,接入网的接口(UNI&#xff…

2024 Google Chrome 浏览器回退安装旧版本

2024 Google Chrome 浏览器回退安装旧版本 查看当前谷歌版本备份浏览器数据卸载浏览器双击重新安装旧版本浏览器 查看当前谷歌版本 详细参考:参考 笔记:最近谷歌浏览器更新后,用着总感觉别扭:不习惯 备份浏览器数据 &#xff…