西瓜书学习笔记——主成分分析(公式推导+举例应用)

文章目录

      • 算法介绍
      • 实验分析

算法介绍

主成分分析(Principal Component Analysis,PCA)是一种常用的降维技术,用于在高维数据中发现最重要的特征或主成分。PCA的目标是通过线性变换将原始数据转换成一组新的特征,这些新特征被称为主成分,它们是原始特征的线性组合。

对于一个正交属性空间(各个属性之间是线性无关的)中的样本点,存在以下两个性质的超平面可对所有样本点进行恰当的表达:

  • 最近重构性:样本点到这个超平面的距离足够的近。
  • 最大可分性:样本点在这个超平面上的投影尽可能分开。

我们先从最近重构性的角度来进行推导:

  • 假定数据样本已进行中心化,即 ∑ i x i = 0 \sum_{i}x_i=0 ixi=0
  • 假定投影变换后得到的新坐标系为 { w 1 , 2 2 , . . . , w d } \{w_1,2_2,...,w_d\} {w1,22,...,wd},其中 w i w_i wi是标准正交基。
    • ∣ ∣ w i ∣ ∣ 2 = 1 ||w_i||_2=1 ∣∣wi2=1
    • w i T w j = 0 ( i ≠ j ) w_i^Tw_j=0(i \ne j) wiTwj=0(i=j)

若丢弃新坐标系中的部分坐标,即将维度降低到 d ′ < d d^\prime<d d<d,则样本点 x i x_i xi在低维坐标系下的投影是 z i = ( z i 1 ; z i 2 ; . . . ; z i d ′ ) z_i=(z_{i1};z_{i2};...;z_{id^\prime}) zi=(zi1;zi2;...;zid),其中 z i j = w j T x i z_{ij}=w_j^Tx_i zij=wjTxi x i x_i xi在低维坐标系下第 j j j维的坐标。若基于 z i z_i zi来重构 x i x_i xi,则会得到 x ^ i = ∑ j = 1 d ′ z i j w j \hat x_i=\sum_{j=1}^{d^\prime}z_{ij}w_j x^i=j=1dzijwj

考虑到整个训练集,原样本点 x i x_i xi与基于投影重构的样本点 x ^ i \hat x_i x^i之间的距离为:
∑ i = 1 m ∣ ∣ ∑ j = 1 d ′ z i j w j − x i ∣ ∣ 2 2 = ∑ i = 1 m ∑ j = 1 d ′ ( z i j w j − x i ) T ( z i j w j − x i ) = ∑ i = 1 m ∑ j = 1 d ′ ( z i j w j T − x i T ) ( z i j w j − x i ) = ∑ i = 1 m ( ( ∑ j = 1 d ′ z i j w j T ) ( ∑ j = 1 d ′ z i j w j ) − 2 ∑ j = 1 d ′ z i j w j T x i + x i T x i ) (1) \begin{aligned} \sum_{i=1}^m||\sum_{j=1}^{d^\prime}z_{ij}w_j-x_i||_2^2&=\sum_{i=1}^m\sum_{j=1}^{d^\prime}(z_{ij}w_j-x_i)^T(z_{ij}w_j-x_i)\\ &=\sum_{i=1}^m\sum_{j=1}^{d^\prime}(z_{ij}w_j^T-x_i^T)(z_{ij}w_j-x_i)\\ &=\sum_{i=1}^m\bigg((\sum_{j=1}^{d^\prime}z_{ij}w_j^T)(\sum_{j=1}^{d^\prime}z_{ij}w_j)-2\sum_{j=1}^{d^\prime}z_{ij}w_j^Tx_i+x_i^Tx_i\bigg) \end{aligned}\tag{1} i=1m∣∣j=1dzijwjxi22=i=1mj=1d(zijwjxi)T(zijwjxi)=i=1mj=1d(zijwjTxiT)(zijwjxi)=i=1m((j=1dzijwjT)(j=1dzijwj)2j=1dzijwjTxi+xiTxi)(1)

其中 w w w是标准正交基,故有 ∣ ∣ w i ∣ ∣ 2 = 1 ||w_i||_2=1 ∣∣wi2=1 w i T w j = 0 ( i ≠ j ) w_i^Tw_j=0(i \ne j) wiTwj=0(i=j),且 x i T x i x_i^Tx_i xiTxi是一个常数,令 x i T x i = const x_i^Tx_i=\text{const} xiTxi=const,所以(1)式可以简化为:
∑ i = 1 m ∣ ∣ ∑ j = 1 d ′ z i j w j − x i ∣ ∣ 2 2 = ∑ i = 1 m ( ( z i 1 w 1 T + z i 2 w 2 T + . . . + z i d ′ w d ′ T ) ( z i 1 w 1 + z i 2 w 2 + . . . + z i d ′ w d ′ ) − 2 z i T [ w 1 T w 2 T . . . w d ′ T ] x i ) + const = ∑ i = 1 m ( ∑ j = 1 d ′ z i j T z i j − 2 z i T w T x i ) + const = ∑ i = 1 m ( z i T z i − 2 z i T z i ) + const = − ∑ i = 1 m z i T z i + const = − ( z 1 T z 1 + z 2 T z 2 + . . . + z m T z m ) + const = − ∑ i = 1 m t r ( z i T z i ) + const (2) \begin{aligned} \sum_{i=1}^m||\sum_{j=1}^{d^\prime}z_{ij}w_j-x_i||_2^2&=\sum_{i=1}^m\bigg((z_{i1}w_1^T+z_{i2}w_2^T+...+z_{id^\prime}w_{d^\prime}^T)(z_{i1}w_1+z_{i2}w_2+...+z_{id^\prime}w_{d^\prime})-2z_i^T\begin{bmatrix} w_1^T \\ w_2^T \\ ...\\ w_{d^\prime}^T \\ \end{bmatrix}x_i\bigg)+\text{const}\\ &=\sum_{i=1}^m\bigg(\sum_{j=1}^{d^\prime}z_{ij}^Tz_{ij}-2z_i^Tw^Tx_i\bigg)+\text{const}\\ &=\sum_{i=1}^m\bigg(z_i^Tz_i-2z_i^Tz_i\bigg)+\text{const}\\ &=-\sum_{i=1}^m z_i^Tz_i+\text{const}\\ &=-(z_1^Tz_1+z_2^Tz_2+...+z_m^Tz_m)+\text{const}\\ &=-\sum_{i=1}^mtr(z_i^Tz_i)+\text{const} \end{aligned}\tag{2} i=1m∣∣j=1dzijwjxi22=i=1m((zi1w1T+zi2w2T+...+zidwdT)(zi1w1+zi2w2+...+zidwd)2ziT w1Tw2T...wdT xi)+const=i=1m(j=1dzijTzij2ziTwTxi)+const=i=1m(ziTzi2ziTzi)+const=i=1mziTzi+const=(z1Tz1+z2Tz2+...+zmTzm)+const=i=1mtr(ziTzi)+const(2)

又因为 t r ( A B ) = t r ( B A ) tr(AB)=tr(BA) tr(AB)=tr(BA)故(2)式可变为:
∑ i = 1 m ∣ ∣ ∑ j = 1 d ′ z i j w j − x i ∣ ∣ 2 2 = − ∑ i = 1 m t r ( z i z i T ) + const = − t r ( ∑ i = 1 m z i z i T ) + const = − t r ( ∑ i = 1 m w T x i x i T w ) + const = − t r ( w T ( ∑ i = 1 m x i x i T ) w ) + const ∝ − t r ( w T ( ∑ i = 1 m x i x i T ) w ) (3) \begin{aligned} \sum_{i=1}^m||\sum_{j=1}^{d^\prime}z_{ij}w_j-x_i||_2^2&=-\sum_{i=1}^mtr(z_iz_i^T)+\text{const}\\ &=-tr\bigg(\sum_{i=1}^m z_iz_i^T\bigg)+\text{const}\\ &=-tr\bigg(\sum_{i=1}^mw^Tx_ix_i^Tw\bigg)+\text{const}\\ &=-tr\bigg(w^T(\sum_{i=1}^mx_ix_i^T)w\bigg)+\text{const}\\ &\propto-tr\bigg(w^T(\sum_{i=1}^mx_ix_i^T)w\bigg) \end{aligned}\tag{3} i=1m∣∣j=1dzijwjxi22=i=1mtr(ziziT)+const=tr(i=1mziziT)+const=tr(i=1mwTxixiTw)+const=tr(wT(i=1mxixiT)w)+consttr(wT(i=1mxixiT)w)(3)

根据最近重构性,式(3)应该被最小化,有:

min ⁡ W − tr ⁡ ( W T X X T W )  s.t.  W T W = E . (4) \begin{aligned} & \min _{\mathbf{W}}-\operatorname{tr}\left(\mathbf{W}^{\mathrm{T}} \mathbf{X} \mathbf{X}^{\mathrm{T}} \mathbf{W}\right) \\ & \text { s.t. } \mathbf{W}^{\mathrm{T}} \mathbf{W}=\mathbf{E} . \end{aligned} \tag{4} Wmintr(WTXXTW) s.t. WTW=E.(4)

这就是PCA的最终优化目标。

接着我们从最大可分性出发,我们知道样本点 x i x_i xi在新空间中的超平面上的投影是 W T x i W^Tx_i WTxi,若所有的样本点的投影能尽可能的分开,则应该使投影后样本点的方差最大化。

在降维和投影中,我们通常不使用传统的方差定义,因为这里我们不涉及到随机变量和随机过程。相反,我们使用方差的术语来描述投影后样本点在新空间中的变异性,这更多地是一种几何上的直觉而非统计学中方差的定义。

方差的形式为 x i T W W T x i x_i^T W W^T x_i xiTWWTxi,可以从以下几何角度解释:

  • 投影方向: 投影矩阵 W W W 确定了投影的方向,每一列表示新空间的基向量。

  • 样本点变异性: x i x_i xi 是原始空间中的样本点, W T x i W^Tx_i WTxi 是投影到新空间后的样本点。 x i x_i xi W T x i W^Tx_i WTxi 之间的差异,即 x i − W T x i x_i - W^Tx_i xiWTxi,表示样本点在投影方向上的变异性。

  • 方差形式: 方差的形式 x i T W W T x i x_i^T W W^T x_i xiTWWTxi 表示了在投影方向上的样本点变异性的量度。这个形式的计算实际上考虑了样本点在投影方向上的平方和,类似于方差的直觉。

  • 最大化分离性: 当我们尝试最大化这个“方差”时,我们实际上是在尝试选择一个投影方向,使得在新空间中的样本点在投影方向上的变异性最大化。这有助于确保在新空间中,样本点能够尽可能地分开,提高了样本点在新空间中的可分性。

请注意,这种形式的“方差”并不是统计学中方差的定义,而更多是一种在降维和投影问题中用于描述样本点分布情况的术语。这种定义的目标是为了在新空间中找到一个有利于分离的方向,以便更好地实现降维和分类等任务。

故投影后样本点的方差是

V a r ( W T x i ) = V a r ( x i T W ) = ∑ i W T x i x i T W = W T ( ∑ i x i x i T ) W = W T ( x 1 x 1 T + x 2 x 2 T + . . . + x m x m T ) W = W T ( ∑ i t r ( x i x i T ) ) W = t r ( W T X X T W ) (5) \begin{aligned} Var(W^Tx_i)&=Var(x_i^TW)\\ &=\sum_iW^Tx_ix_i^TW\\ &=W^T(\sum_ix_ix_i^T)W\\ &=W^T\bigg( x_1x_1^T+x_2x_2^T+...+x_mx_m^T\bigg)W\\ &=W^T\bigg( \sum_itr(x_ix_i^T)\bigg)W\\ &=tr(W^TXX^TW) \end{aligned}\tag{5} Var(WTxi)=Var(xiTW)=iWTxixiTW=WT(ixixiT)W=WT(x1x1T+x2x2T+...+xmxmT)W=WT(itr(xixiT))W=tr(WTXXTW)(5)

于是优化目标可写成:
max ⁡ W tr ⁡ ( W T X X T W )  s.t.  W T W = E , (6) \begin{aligned} \max _{\mathbf{W}} & \operatorname{tr}\left(\mathbf{W}^{\mathrm{T}} \mathbf{X} \mathbf{X}^{\mathrm{T}} \mathbf{W}\right) \\ \text { s.t. } & \mathbf{W}^{\mathrm{T}} \mathbf{W}=\mathbf{E}, \end{aligned} \tag{6} Wmax s.t. tr(WTXXTW)WTW=E,(6)

显然式(4)和式(6)等价,故对式(4)或(6)使用拉格朗日乘子法,引入拉格朗日乘子矩阵 Λ \Lambda Λ,我们的目标是 :
L ( W , Λ ) = t r ( W T X X T W ) − t r ( Λ ( W T W − E ) ) (7) \mathcal{L}(\mathbf{W,\Lambda)}=tr(\mathbf{W^TXX^TW)}-tr(\mathbf{\Lambda(W^TW-E))} \tag{7} L(W,Λ)=tr(WTXXTW)tr(Λ(WTWE))(7)

现在我们分别对 W W W Λ \Lambda Λ求偏导,并令其为零有:

∂ L ∂ W = 2 X X T W − 2 Λ T W = 0 (8) \frac{\partial \mathcal{L}}{\partial \mathbf{W}}=2 \mathbf{X} \mathbf{X}^{\mathrm{T}} \mathbf{W}-2 \Lambda^{\mathrm{T}} \mathbf{W}=0 \tag{8} WL=2XXTW2ΛTW=0(8)

∂ L ∂ Λ = − ( W T W − E ) = 0 (9) \frac{\partial \mathcal{L}}{\partial \boldsymbol{\Lambda}}=-\left(\mathbf{W}^{\mathrm{T}} \mathbf{W}-\mathbf{E}\right)=0 \tag{9} ΛL=(WTWE)=0(9)

最终得到:

X X T W = Λ T W (10) \mathbf{XX^TW}=\mathbf{\Lambda^TW} \tag{10} XXTW=ΛTW(10)

W T W = E (11) \mathbf{W^TW=E} \tag{11} WTW=E(11)

其中 Λ = d i a g ( λ 1 , λ 2 , . . . , λ d ′ ) ∈ R d ′ × d ′ \Lambda=diag(\lambda_1,\lambda_2,...,\lambda_d^\prime) \in \mathbb{R}^{d^\prime\times d^\prime} Λ=diag(λ1,λ2,...,λd)Rd×d

将(10)式展开有:

X X T w i = λ i w i (12) \mathbf{XX^T}w_i=\lambda_iw_i\tag{12} XXTwi=λiwi(12)

最后我们只需要对 X X T \mathbf{XX^T} XXT进行特征值分解,其中 λ i \lambda_i λi是矩阵 X X T \mathbf{XX^T} XXT的特征值, w i w_i wi λ i \lambda_i λi所对应的单位特征向量。

最终我们选取前 d ′ d^\prime d个特征值所对应的特征向量构成的 W = ( w 1 , w 2 , . . . , w d ′ ) \mathbf{W}=(w_1,w_2,...,w_{d^\prime}) W=(w1,w2,...,wd),这就是我们所求的最终解。

其PCA算法流程图如下图所示:

在这里插入图片描述

这就出现了一个新的问题,低维空间维数 d ′ d^\prime d是由用户事先决定的,那么该如何确定 d ′ d^\prime d

我们可以从重构的角度来设置一个重构阈值,例如 t = 95 % t=95\% t=95%,然后选取使得下式成立的最小 d ′ d^\prime d值:

∑ i = 1 d ′ λ i ∑ i = 1 d λ i ⩾ t \frac{\sum_{i=1}^{d^{\prime}} \lambda_i}{\sum_{i=1}^d \lambda_i} \geqslant t i=1dλii=1dλit

对于式(8)和(9)求偏导过程如下:

∂ L ∂ W = ∂ (   t r ( W T X X T W ) − t r ( Λ ( W T W − E ) ) ) ∂ W = ∂   t r ( W T X X T W ) ∂ W − ∂   t r ( Λ ( W T W − E ) ) ∂ W (13) \begin{aligned} \frac{\partial \mathcal{L}}{\partial \mathbf{W}}&=\frac{\partial\bigg( \ tr(\mathbf{W^TXX^TW})-tr(\mathbf{\Lambda(W^TW-E))}\bigg)}{\partial \mathbf{W}}\\ &=\frac{\partial \ tr(\mathbf{W^TXX^TW})}{\partial \mathbf{W}}-\frac{\partial \ tr(\mathbf{\Lambda(W^TW-E))}}{\partial \mathbf{W}} \end{aligned} \tag{13} WL=W( tr(WTXXTW)tr(Λ(WTWE)))=W tr(WTXXTW)W tr(Λ(WTWE))(13)

对式(13)我们可以用迹的性质, t r ( A B ) = t r ( B A ) tr(AB)=tr(BA) tr(AB)=tr(BA),故我们可将 W T X X T W \mathbf{W^TXX^TW} WTXXTW Λ ( W T W − E ) \mathbf{\Lambda(W^TW-E)} Λ(WTWE)重新排列成 W W T X T X \mathbf{WW^TX^TX} WWTXTX Λ ( W W T − E ) \mathbf{\Lambda(WW^T-E)} Λ(WWTE),即:

∂ L ∂ W = ∂   t r ( W W T X T X ) ∂ W − ∂   t r ( Λ ( W W T − E ) ) ∂ W = ∂   t r ( W W T X T X ) ∂ ( W W T ) ⋅ ∂ ( W W T ) ∂ W − 2 Λ W = X T X ⋅ 2 W − 2 Λ W = 2 X X T W − 2 Λ T W (14) \begin{aligned} \frac{\partial \mathcal{L}}{\partial \mathbf{W}}&=\frac{\partial \ tr(\mathbf{WW^TX^TX})}{\partial \mathbf{W}}-\frac{\partial \ tr(\mathbf{\Lambda(WW^T-E))}}{\partial \mathbf{W}}\\ &=\frac{\partial\ tr(\mathbf{W W^T X^T X)}}{\partial \mathbf{(W W^T)}} \cdot \frac{\partial\mathbf{(W W^T)}}{\partial \mathbf{W}}-2\mathbf{\Lambda W}\\ &=\mathbf{X^TX}\cdot 2\mathbf{W}-2\mathbf{\Lambda W}\\ &=2 \mathbf{X} \mathbf{X}^{\mathrm{T}} \mathbf{W}-2 \Lambda^{\mathrm{T}} \mathbf{W} \end{aligned}\tag{14} WL=W tr(WWTXTX)W tr(Λ(WWTE))=(WWT) tr(WWTXTX)W(WWT)2ΛW=XTX2W2ΛW=2XXTW2ΛTW(14)

对于式(7)约束条件为什么可以写成迹的形式?

在这个问题中,我们要证明在优化问题中 t r ( Λ ( W T W − E ) ) tr(\mathbf{\Lambda(W^TW-E)}) tr(Λ(WTWE)) Λ ( W T W − E ) \mathbf{\Lambda(W^TW-E)} Λ(WTWE)是等价的,即它们对于最优解是相同的。下面我们来给出详细的证明!

为此,我们可以比较两者的梯度。考虑对拉格朗日函数 L ( W , Λ ) \mathcal{L}(\mathbf{W,\Lambda}) L(W,Λ)是关于 W W W的偏导数。首先计算 L \mathcal{L} L W \mathbf{W} W的梯度得到式(10),解出最优解 W ⋆ \mathbf{W^\star} W。现在我们比较两种形式对最优解的梯度。

  • 对于 t r ( Λ ( W T W − E ) ) tr(\mathbf{\Lambda(W^TW-E)}) tr(Λ(WTWE))
    ∂ t r ( Λ ( W T W − E ) ) ∂ W = 2 Λ W \frac{\partial tr(\mathbf{\Lambda(W^T W-E))}}{\partial \mathbf{W}}=2 \Lambda \mathbf{W} Wtr(Λ(WTWE))=W

  • 对于 Λ ( W T W − E ) \mathbf{\Lambda(W^TW-E)} Λ(WTWE)
    ∂ Λ ( W T W − E ) ∂ W = 2 Λ W \frac{\partial \mathbf{\Lambda(W^T W-E)}}{\partial \mathbf{W}}=2 \Lambda \mathbf{W} WΛ(WTWE)=W

从上面的梯度计算中,我们可以看到,两种形式的梯度在最优解处是相同的,因此在优化问题中 t r ( Λ ( W T W − E ) ) tr(\mathbf{\Lambda(W^TW-E)}) tr(Λ(WTWE)) Λ ( W T W − E ) \mathbf{\Lambda(W^TW-E)} Λ(WTWE)是等价。这意味着它们会产生相同的最优解。

我们将矩阵运算转化为迹(trace)形式在某些情况下具有优势,尤其是在涉及到矩阵的导数计算和优化问题时。以下是一些使用迹的好处:

  • 简化导数计算: 迹运算的导数计算相对简单,尤其是对于迹的线性性质,这可以简化复杂矩阵函数的导数计算。这种简化对于深度学习等领域中的梯度下降等优化问题很有用。

  • 矩阵的不可交换性: 在矩阵乘法中,矩阵的乘法是不可交换的,即 A B AB AB一般不等于 B A BA BA。但是,通过转化为迹形式,有时可以使计算更加简单。

  • 整合约束条件: 在优化问题中,通过引入拉格朗日乘子法,迹运算可以用于整合约束条件,使得问题的形式更加一致,更容易处理。

  • 向量化和矩阵形式: 将矩阵运算表示为迹形式有助于使用向量化和矩阵形式,从而更好地利用硬件加速(如GPU)来加速计算。

实验分析

数据集如下图所示:
在这里插入图片描述

读入数据集:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

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

# 提取特征列
features = data.drop('Target', axis=1)

计算协方差矩阵以及特征值分解:

# 计算协方差矩阵
cov_matrix = features.cov()

# 特征值分解
eigenvalues, eigenvectors = np.linalg.eig(cov_matrix)

选择最小 d ′ d^\prime d值:

# 选择重构阈值
reconstruction_threshold = 0.95

# 计算特征值的累积和
eigenvalue_cumsum = np.cumsum(eigenvalues) / np.sum(eigenvalues)

# 找到满足阈值条件的最小d'
selected_d_prime = np.argmax(eigenvalue_cumsum >= reconstruction_threshold) + 1

# 输出选择的最小d'
print("选择的最小降维维度 d' =", selected_d_prime)

选择的最小降维维度 d' = 7

重新计算特征值和特征向量:

# 根据选择的最小d'重新计算选取的特征值和特征向量
selected_indices_reconstructed = np.argsort(eigenvalues)[-selected_d_prime:][::-1]
selected_eigenvalues_reconstructed = eigenvalues[selected_indices_reconstructed]
selected_eigenvectors_reconstructed = eigenvectors[:, selected_indices_reconstructed]

# 投影数据到新的空间
reduced_data_reconstructed = features.dot(selected_eigenvectors_reconstructed)

可视化数据降维后的数据:

plt.scatter(reduced_data_reconstructed.iloc[:, 0], reduced_data_reconstructed.iloc[:, 1], c=data['Target'], cmap='viridis')
plt.xlabel('Principal Component 1')
plt.ylabel('Principal Component 2')
plt.title('PCA of Correlated Dataset (Reconstructed)')
plt.show()

在这里插入图片描述

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

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

相关文章

C++ OpenGL绘制三维立体skybox场景obj模型AABB碰撞检测旋转动画界面

程序示例精选 C OpenGL绘制三维立体skybox场景obj模型AABB碰撞检测旋转动画界面 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《C OpenGL绘制三维立体skybox场景obj模型AABB碰撞检测旋转动…

HBase 数据导入导出

HBase 数据导入导出 1. 使用 Docker 部署 HBase2. HBase 命令查找3. 命令行操作 HBase3.1 HBase shell 命令3.2 查看命名空间3.3 查看命名空间下的表3.4 新建命名空间3.5 查看具体表结构3.6 创建表 4. HBase 数据导出、导入4.1 导出 HBase 中的某个表数据4.2 导入 HBase 中的某…

从源代码看Chrome 版本号

一直以来都是用Chrome 浏览器&#xff0c;但是看到Chrome 点分4 组数据的表达方式&#xff0c;总是感觉怪怪的&#xff0c;遂深入源代码了解她的版本号具体表示的内容 chrome 浏览器中显示的版本号 源代码中的版本号标识 版本号文件位于 chrome/VERSION &#xff0c; 看到源代…

nginx初学者指南

一、启动、停止和重新加载配置 前提&#xff1a;先要启动nginx 在Windows上启动nginx的步骤如下&#xff1a; 1. 下载并安装nginx。可以从nginx官网下载适合自己操作系统的版本&#xff0c;一般是zip压缩包&#xff0c;解压到指定目录中。 2. 进入nginx的安装目录&#xff…

Shell脚本⑧免交互

目录 一.Here Document 1.定义 2.变量 &#xff08;1&#xff09;变量替换成实际值 &#xff08;2&#xff09;整行内容作为变量并输出结果 &#xff08;3&#xff09;多行注释 &#xff08;4&#xff09;自动划分磁盘免交互 二.Expect 1.定义 2.安装 3.免交互操作 …

微软的Copilot for Sales(销售助手)和Copilot for Service(服务助手)现已全面开放

深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领域的领跑者。点击订阅&#xff0c;与未来同行&#xff01; 订阅&#xff1a;https://rengongzhineng.io/ 。 微…

基于控制台的购书系统(Java 语言实现)

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》|《数据结构与算法》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &#x1f64f;小杨水平有限&#xff0c;欢…

Llama2大模型开源,大模型的Android时代来了?

就昨天凌晨,微软和Meta宣布Llama2大模型开源且进一步放开商用,一下朋友圈刷屏。要知道,开源界最强大的模型就是过去Meta开源的Llama,而现在Llama2更强大,又开放商用,更有微软大模型霸主企业撑腰(微软既投资大模型界的IOS——ChatGPT,又联合发布大模型的Android——Llam…

【DDD】学习笔记-什么是模型

从领域驱动的战略设计进入战术设计&#xff0c;简单说来&#xff0c;就是跨过系统视角的限界上下文边界进入它的内部&#xff0c;从分层架构的逻辑分层进入到每一层的内部。在思考内部的设计细节时&#xff0c;首先需要思考的问题就是&#xff1a;什么是模型&#xff08;Model&…

Leaf——美团点评分布式ID生成系统

0.普通算法生成id的缺点 1.Leaf-segment数据库方案 第一种Leaf-segment方案&#xff0c;在使用数据库的方案上&#xff0c;做了如下改变&#xff1a; - 原方案每次获取ID都得读写一次数据库&#xff0c;造成数据库压力大。改为利用proxy server批量获取&#xff0c;每次获取一…

x-shell安装、使用以及配置cuda、cudnn和conda

x-shell安装、使用以及安装最新版本conda x-shell安装远程连接服务器conda安装和环境配置 x-shell安装 x-shell是一款终端模拟软件&#xff0c;用于在Windows界面下远程访问和使用不同系统下的服务器。免费版本下载地址&#xff1a; https://www.xshell.com/zh/free-for-home-…

网络流数据集处理(深度学习数据处理基础)

一、数据集处理 处理数据集是一个文件夹 一个文件夹处理的&#xff0c;将原网络流数据集 放入一个文件夹 处理转换成 Json文件。&#xff08;数据预处理&#xff09;然后将这些文件处理成目标文件格式 再分割成训练集和测试集。每次运行只会处理一个文件夹。 运行train.py 导入…

070:vue中provide、inject的使用方法(图文示例)

第070个 查看专栏目录: VUE 本文章目录 示例背景示例效果图示例源代码父组件代码子组件代码孙组件代码 基本使用步骤 示例背景 本教程是介绍如何在vue中使用provide和inject。在 Vue 中&#xff0c;provide 和 inject 是用于实现祖先组件向后代组件传递数据的一种方式。 在这个…

分类预测 | Matlab实现GAF-PCNN-MATT格拉姆角场和双通道PCNN融合多头注意力机制的分类预测/故障识别

分类预测 | Matlab实现GAF-PCNN-MATT格拉姆角场和双通道PCNN融合多头注意力机制的分类预测/故障识别 目录 分类预测 | Matlab实现GAF-PCNN-MATT格拉姆角场和双通道PCNN融合多头注意力机制的分类预测/故障识别分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现G…

26条prompt规则应用于大模型

1、引入动机 llm大模型在回答一些问题上表现出了惊人的能力&#xff0c;例如数学逻辑推理&#xff0c;代码生成&#xff0c;问题答复等。提词工程是和大预言模型交流的一门艺术。 大模型的返回结合和用户的指令和输入直接相关prompts是用户和大模型沟通的一种编码方式 一般地…

python计算两个DataFrame的指定两列中,相同的数据有多少

目的&#xff1a;查询数据1和数据2中&#xff0c;red与red列相同 并且blue与blue列相同的&#xff0c;情况有多少。 &#xff08;备注&#xff1a;两个数据中格式不一致&#xff0c;需要经过json提取等处理步骤&#xff09; 思路步骤&#xff1a; 1、读取数据1&#xff0c;筛选…

12种算法优化CNN-BiLSTM-Attention多特征输入单步预测,机器学习预测全家桶,持续更新,MATLAB代码...

截止到本期&#xff0c;一共发了12篇关于机器学习预测全家桶MATLAB代码的文章。参考文章如下&#xff1a; 1.五花八门的机器学习预测&#xff1f;一篇搞定不行吗&#xff1f; 2.机器学习预测全家桶&#xff0c;多步预测之BiGRU、BiLSTM、GRU、LSTM&#xff0c;LSSVM、TCN、CNN&…

Vue工程引入Element-ui

npm 安装ELement-ui npm i element-ui -S 于package.json中发现有“element-ui”版本号即可 引入 Element 在 main.js 中写入以下内容&#xff1a; import element-ui/lib/theme-chalk/index.css; import ElementUI from element-ui;Vue.use(ElementUI);之后根据自己的需求设计…

《动手学深度学习(PyTorch版)》笔记6.1

注&#xff1a;书中对代码的讲解并不详细&#xff0c;本文对很多细节做了详细注释。另外&#xff0c;书上的源代码是在Jupyter Notebook上运行的&#xff0c;较为分散&#xff0c;本文将代码集中起来&#xff0c;并加以完善&#xff0c;全部用vscode在python 3.9.18下测试通过&…

考研/计算机二级数据结构刷题之顺序表

目录 第一题 顺序表的初始化&#xff0c;销毁&#xff0c;头插&#xff0c;尾插&#xff0c;头删&#xff0c;尾删&#xff0c;指定位置插入&#xff0c;指定删除以及打印 第二题 移除元素 题目链接&#xff1a; OJ链接 题目详解&#xff1a;移除元素 第三题&#xff1a;删…