当前位置: 首页 > news >正文

【人工智能数学基础篇】——深入详解矩阵分解:奇异值分解(SVD)与主成分分析(PCA)在数据降维与特征提取中的应用

目录

1. 引言

2. 矩阵分解概述

2.1 矩阵分解的意义

 3. 奇异值分解(SVD)

3.1 定义与数学基础

3.2 SVD 的性质

3.3 SVD 在数据降维中的应用

3.4 示例代码:使用 SVD 进行图像压缩

3.5 结果分析

4. 主成分分析(PCA)

4.1 定义与数学基础

4.2 PCA 与协方差矩阵

4.3 PCA 与 SVD 的关系

4.4 PCA 在特征提取中的应用

4.5 示例代码:使用 PCA 进行手写数字分类

4.6 结果分析

 5. SVD 与 PCA 的比较

6. 其他矩阵分解方法简介

 6.1 LU分解

 6.2 QR分解

 6.3 非负矩阵分解(NMF)

 6.4 矩阵近似

7. 实践中的注意事项

7.1 数据预处理

7.2 选择适当的 \( k \) 值

7.3 处理高维稀疏数据

 7.4 评估降维效果

7.5 扩展方法

8. 结论

 9. 参考资料


1. 引言

        在现代数据分析与机器学习领域,数据的维度通常非常高,这不仅增加了计算复杂度,还可能导致“维度灾难”(Curse of Dimensionality)。为了高效处理和理解高维数据,数据降维与特征提取技术显得尤为重要。矩阵分解作为一种强大的数学工具,在数据降维与特征提取中扮演着关键角色。本文将深入探讨两种经典的矩阵分解方法——奇异值分解(Singular Value Decomposition, SVD)和主成分分析(Principal Component Analysis, PCA),并详细介绍它们在数据降维和特征提取中的应用与实现。

2. 矩阵分解概述

        矩阵分解是将一个复杂的矩阵表示为多个简单矩阵的乘积。不同的分解方法适用于不同的应用场景,能够揭示矩阵的内在结构和特征。常见的矩阵分解方法包括LU分解、QR分解、特征值分解、奇异值分解(SVD)和主成分分析(PCA)等。本文将重点介绍SVD和PCA,并阐述它们在数据降维和特征提取中的应用。

2.1 矩阵分解的意义

降维:通过减少数据的维度,可以降低计算复杂度,减少存储空间,提高算法的效率。
特征提取:提取数据中的主要特征,有助于发现数据的潜在模式和结构。
数据压缩:利用矩阵分解的低秩近似,实现对数据的有效压缩。
噪声过滤:通过保留主要成分,去除数据中的噪声,提高数据的质量。


 3. 奇异值分解(SVD)

3.1 定义与数学基础

奇异值分解(Singular Value Decomposition, SVD)是线性代数中一种重要的矩阵分解方法。它将任意形状的矩阵分解为三个特定矩阵的乘积,揭示了原矩阵的许多重要性质。

定义:给定一个任意的 \( m \times n \) 矩阵 \( A \),其奇异值分解为:

\[
A = U \Sigma V^T
\]

其中:
 \( U \) 是一个 \( m \times m \) 的正交矩阵,称为左奇异向量矩阵。
 \( \Sigma \) 是一个 \( m \times n \) 的对角矩阵,其对角线元素为奇异值,按降序排列。
 \( V \) 是一个 \( n \times n \) 的正交矩阵,称为右奇异向量矩阵。
 \( V^T \) 表示 \( V \) 的转置。

3.2 SVD 的性质

1. 正交性:矩阵 \( U \) 和 \( V \) 都是正交矩阵,即 \( U^T U = I \) 和 \( V^T V = I \)。
2. 奇异值性质:奇异值 \( \sigma_i \) 满足 \( \sigma_1 \geq \sigma_2 \geq \dots \geq \sigma_p \geq 0 \),其中 \( p = \min(m, n) \)。
3. 稀疏性:原矩阵的秩等于非零奇异值的数量。
4. 最低误差近似:截断的 SVD 提供了最佳的低秩近似,即对于给定的 \( k \),通过保留最大的 \( k \) 个奇异值及对应的奇异向量,可以得到最小的误差近似。

3.3 SVD 在数据降维中的应用

奇异值分解在数据降维中的主要应用包括:
数据压缩:利用低秩近似减少数据的存储空间。
降噪:通过去除较小的奇异值,过滤掉数据中的噪声。
特征提取:提取数据的主要特征,用于后续的机器学习算法。

3.4 示例代码:使用 SVD 进行图像压缩

以下是一个使用 Python 和 NumPy 实现 SVD 图像压缩的示例。我们将对一张灰度图像进行 SVD 分解,并通过保留前 \( k \) 个奇异值实现图像的压缩与重构。

import numpy as np
import matplotlib.pyplot as plt
from PIL import Imagedef load_image(image_path):"""加载灰度图像并转换为 NumPy 数组"""img = Image.open(image_path).convert('L')  # 转为灰度图return np.array(img, dtype=np.float64)def svd_compression(image_matrix, k):"""对图像矩阵进行 SVD 分解,并保留前 k 个奇异值进行重构"""U, S, VT = np.linalg.svd(image_matrix, full_matrices=False)S_k = np.diag(S[:k])U_k = U[:, :k]VT_k = VT[:k, :]compressed_matrix = np.dot(U_k, np.dot(S_k, VT_k))return compressed_matrixdef plot_images(original, compressed, k):"""绘制原始图像和压缩后图像的比较"""plt.figure(figsize=(10, 5))plt.suptitle(f'SVD Compression with k={k}')plt.subplot(1, 2, 1)plt.imshow(original, cmap='gray')plt.title('Original Image')plt.axis('off')plt.subplot(1, 2, 2)plt.imshow(compressed, cmap='gray')plt.title(f'Compressed Image\nk={k}')plt.axis('off')plt.show()def main():image_path = 'path_to_grayscale_image.jpg'  # 替换为你的图像路径original_image = load_image(image_path)ks = [5, 20, 50, 100]  # 不同的 k 值for k in ks:compressed_image = svd_compression(original_image, k)plot_images(original_image, compressed_image, k)if __name__ == "__main__":main()

代码说明:

1. 加载图像
   使用 `PIL` 库加载图像,并将其转换为灰度图像。
   将图像转换为 NumPy 数组,数据类型为 `float64` 以提高计算精度。

2. SVD 压缩
    对图像矩阵进行奇异值分解,得到 \( U \)、\( S \) 和 \( VT \)。
    选择前 \( k \) 个奇异值及对应的奇异向量,构建低秩近似矩阵。
    通过矩阵乘法重构压缩后的图像矩阵。

3. 绘图展示:
    使用 `matplotlib` 绘制原始图像和压缩后图像的对比。
    通过不同的 \( k \) 值展示压缩效果与质量的权衡。

3.5 结果分析

通过调整 \( k \) 值,可以观察到图像压缩的效果。较小的 \( k \) 值会导致图像失真较严重,但压缩率较高;较大的 \( k \) 值则保留更多的细节信息,但压缩率降低。选择合适的 \( k \) 值需要在压缩效率和图像质量之间进行权衡。


4. 主成分分析(PCA)

4.1 定义与数学基础

主成分分析(Principal Component Analysis, PCA)是一种经典的统计方法,用于将高维数据投影到低维空间,同时尽可能保留数据的主要变异信息。PCA通过线性变换找到数据中的主成分(主轴),这些主轴是数据方差最大的方向,彼此正交。

定义:给定一个 \( n \times p \) 的数据矩阵 \( X \)(其中 \( n \) 为样本数量,\( p \) 为特征数量),PCA的目标是找到一个 \( p \times k \) 的转换矩阵 \( W \),将数据映射到 \( k \) 维空间:

\[
Y = XW
\]

其中,\( Y \) 是降维后的 \( n \times k \) 数据矩阵。

4.2 PCA 与协方差矩阵

PCA 通过最大化数据在新坐标系下的方差来寻找主成分,这可以转化为求解协方差矩阵的特征值和特征向量的问题。

1. 数据中心化:首先对数据进行中心化处理,即减去每个特征的均值,使得数据的均值为零。
2. 协方差矩阵:计算中心化后数据的协方差矩阵 \( C \):

\[
C = \frac{1}{n-1} X^T X
\]

3. 特征值分解:对协方差矩阵进行特征值分解,得到特征值和对应的特征向量。
4. 选择主成分:选取前 \( k \) 个最大的特征值所对应的特征向量,组成转换矩阵 \( W \)。

4.3 PCA 与 SVD 的关系

PCA 和 SVD 在数学上密切相关。事实上,PCA 可以通过 SVD 直接计算实现,无需显式计算协方差矩阵。

具体来说,假设 \( X \) 是经过中心化的数据矩阵,则:

\[
X = U \Sigma V^T
\]

其中,\( V \) 的列向量就是协方差矩阵的特征向量,且相应的奇异值 \( \sigma_i \) 满足:

\[
\lambda_i = \frac{\sigma_i^2}{n-1}
\]

因此,PCA 的主成分可以通过 SVD 直接获得。

4.4 PCA 在特征提取中的应用

PCA 在特征提取中的主要应用包括:
数据降维:减少特征数量,降低存储和计算成本。
去噪:通过保留主要成分,去除数据中的噪声。
可视化:将高维数据投影到2D或3D空间,便于可视化和理解数据结构。
特征提取:提取数据的主要变异方向,作为后续机器学习算法的输入。

4.5 示例代码:使用 PCA 进行手写数字分类

以下是一个使用 Python 和 scikit-learn 实现 PCA 进行手写数字分类的示例。我们将对 MNIST 数据集应用 PCA 进行降维,并使用降维后的特征进行分类。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import classification_report, accuracy_scoredef load_data():"""加载手写数字数据集"""digits = load_digits()X = digits.datay = digits.targetreturn X, y, digits.imagesdef plot_digits(images, labels, n_row=2, n_col=5):"""绘制数字图像"""plt.figure(figsize=(n_col, n_row))for index, (image, label) in enumerate(zip(images, labels)):plt.subplot(n_row, n_col, index + 1)plt.imshow(image, cmap='gray')plt.title(f'Label: {label}')plt.axis('off')plt.show()def apply_pca(X_train, X_test, n_components=0.95):"""对数据应用 PCA,保留 95% 的方差"""pca = PCA(n_components=n_components, whiten=True, random_state=42)X_train_pca = pca.fit_transform(X_train)X_test_pca = pca.transform(X_test)print(f'Original number of features: {X_train.shape[1]}')print(f'Reduced number of features after PCA: {X_train_pca.shape[1]}')return X_train_pca, X_test_pca, pcadef classify(X_train, y_train, X_test, y_test):"""使用支持向量机(SVM)进行分类"""clf = SVC(kernel='rbf', class_weight='balanced', random_state=42)clf.fit(X_train, y_train)y_pred = clf.predict(X_test)acc = accuracy_score(y_test, y_pred)print(f'Classification Accuracy: {acc:.4f}')print('Classification Report:')print(classification_report(y_test, y_pred))return clfdef main():# 加载数据X, y, images = load_data()# 可视化部分样本plot_digits(images[:10], y[:10], n_row=2, n_col=5)# 划分训练集和测试集X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, stratify=y)# 应用 PCA 进行降维X_train_pca, X_test_pca, pca = apply_pca(X_train, X_test, n_components=0.95)# 使用 SVM 进行分类classifier = classify(X_train_pca, y_train, X_test_pca, y_test)# 可视化降维后的数据(前两个主成分)plt.figure(figsize=(8,6))scatter = plt.scatter(X_train_pca[:, 0], X_train_pca[:, 1], c=y_train, cmap='viridis', alpha=0.5)plt.legend(*scatter.legend_elements(), title="Classes")plt.xlabel('Principal Component 1')plt.ylabel('Principal Component 2')plt.title('PCA of MNIST Dataset')plt.show()if __name__ == "__main__":main()

代码说明:

1. 数据加载与可视化:
    使用 `sklearn.datasets` 加载手写数字数据集(8x8灰度图像)。
    可视化部分样本图像,帮助理解数据结构。

2. 数据划分:
    将数据集划分为训练集和测试集,保持类别分布的一致性(`stratify=y`)。

3. PCA 降维:
    使用 scikit-learn 的 `PCA` 类,对训练数据进行降维,保留 95% 的方差。
    `whiten=True` 对数据进行白化处理,使得各主成分具有相同的方差。
    输出降维前后的特征数量。

4. 分类器训练与评估:
    使用支持向量机(SVM)进行分类。
    训练、预测并评估分类器的性能,输出准确率和分类报告。

5. 降维结果可视化:
    可视化前两个主成分,展示数据在主成分空间中的分布。

4.6 结果分析

        通过 PCA 的降维,可以显著减少特征数量,同时保持数据的大部分变异信息。使用 SVM 进行分类,往往能够在降维后的特征上取得较好的性能,同时提高计算效率。可视化降维后的数据有助于理解数据的聚类结构和类别分布。


 5. SVD 与 PCA 的比较

虽然 SVD 和 PCA 都是矩阵分解方法,并且在许多应用中可以互相替代,但它们在概念和应用上还是存在一些区别。

特性SVD(奇异值分解)PCA(主成分分析)
定义矩阵的奇异值分解,将矩阵分解为 \( U \Sigma V^T \) 统计方法,通过线性变换找到数据中的主成分
应用范围通用矩阵分解方法,适用于任意形状的矩阵专用于数据降维和特征提取,通常在统计分析和机器学习中使用
数学基础线性代数中的矩阵分解方法统计学中的方差最大化方法,与协方差矩阵密切相关
与协方差矩阵的关系无直接关系,除非特定应用下(如在计算PCA时使用SVD)直接基于协方差矩阵,通过特征值分解或SVD来计算主成分
输出解释左奇异向量、奇异值、右奇异向量主成分向量、解释方差
计算复杂度较高,尤其对于大规模矩阵计算PCA时通常需先计算协方差矩阵,复杂度与SVD相似

总结:

SVD是一种通用的矩阵分解工具,在信号处理、图像压缩、推荐系统等多个领域有广泛应用。
PCA 是基于 SVD 的特例,专注于数据降维和特征提取,通过最大化数据方差来寻找主成分,广泛应用于统计分析和机器学习。
在实际应用中,PCA 通常通过 SVD 实现,但聚焦于特定的目的(如维度降减),而 SVD 本身具有更广泛的适用性。 


6. 其他矩阵分解方法简介

除了 SVD 和 PCA,矩阵分解领域还有许多其他方法,每种方法都有其独特的应用场景和优势。

 6.1 LU分解

定义:将一个方阵分解为一个下三角矩阵 \( L \) 和一个上三角矩阵 \( U \) 的乘积 \( A = LU \)。

应用:主要用于求解线性方程组、计算矩阵的逆和行列式。

 6.2 QR分解

定义:将一个矩阵分解为一个正交矩阵 \( Q \) 和一个上三角矩阵 \( R \) 的乘积 \( A = QR \)。

应用:用于求解最小二乘问题、特征值计算等。

 6.3 非负矩阵分解(NMF)

定义:将一个非负矩阵 \( A \) 分解为两个非负矩阵 \( W \) 和 \( H \) 的乘积 \( A \approx WH \)。

应用:广泛用于图像处理、文本挖掘、推荐系统等领域,能够揭示数据的潜在非负特征。

 6.4 矩阵近似

定义:通过各种方法(如截断 SVD、低秩近似)找到一个低复杂度的矩阵近似原矩阵。

应用:用于数据压缩、降噪和加速计算。


7. 实践中的注意事项

在实际应用 SVD 和 PCA 进行数据降维和特征提取时,需要考虑以下几个方面:

7.1 数据预处理

中心化:对于 PCA,需要将数据进行中心化处理(减去均值),确保数据的中心位于原点。
标准化:对特征进行标准化,使其具有相同的尺度,特别是在特征具有不同量纲时。

7.2 选择适当的 \( k \) 值

信息保留:选择能够保留足够信息(如 95% 方差)的 \( k \) 值。
计算效率:较小的 \( k \) 值可以提高计算效率,但可能损失部分信息。

7.3 处理高维稀疏数据

存储效率:对于稀疏数据,可以利用稀疏矩阵的存储结构,降低存储和计算成本。
降维方法选择:某些降维方法(如 NMF)更适合处理非负且稀疏的数据。

 7.4 评估降维效果

可视化:通过可视化降维后的数据,评估降维效果。
模型性能:在降维后的特征上训练机器学习模型,观察其性能变化。

7.5 扩展方法

核 PCA:适用于非线性数据,通过核技巧将数据映射到高维空间后进行 PCA。
稀疏 PCA:在 PCA 的基础上引入稀疏约束,增强特征的可解释性。


8. 结论

        奇异值分解(SVD)和主成分分析(PCA)作为矩阵分解领域的经典方法,在数据降维与特征提取中具有重要的应用价值。SVD 提供了对于任意矩阵的全面分解,而 PCA 则专注于通过最大化数据方差来寻找主要特征。在实际应用中,合理选择和应用这些方法,可以显著提高数据处理的效率与效果,助力于更高效的机器学习和数据分析任务。

此外,了解其他矩阵分解方法(如 NMF、LU分解等)也能扩展数据处理的工具集,根据具体的应用需求选择最适合的方法,将进一步提升数据分析与建模的效果。


 9. 参考资料

1. 《矩阵分析与应用》(Carl D. Meyer 著)
2. 《统计学习方法》(李航 著)
3. 《Python数据科学手册》(Jake VanderPlas 著)
4. Scikit-learn 官方文档:<https://scikit-learn.org/stable/>
5. NumPy 官方文档:<https://numpy.org/doc/>
 


        本文旨在深入探讨奇异值分解(SVD)和主成分分析(PCA)在数据降维与特征提取中的应用,通过理论分析与实践示例相结合,帮助读者全面理解和掌握这些关键技术。希望本文能为从事数据科学与机器学习的读者提供有价值的参考和指导。

相关文章:

【人工智能数学基础篇】——深入详解矩阵分解:奇异值分解(SVD)与主成分分析(PCA)在数据降维与特征提取中的应用

目录 1. 引言 2. 矩阵分解概述 2.1 矩阵分解的意义 3. 奇异值分解&#xff08;SVD&#xff09; 3.1 定义与数学基础 3.2 SVD 的性质 3.3 SVD 在数据降维中的应用 3.4 示例代码&#xff1a;使用 SVD 进行图像压缩 3.5 结果分析 4. 主成分分析&#xff08;PCA&#xff0…...

C++常见面试题-初级2

1. C和C有什么区别&#xff1f; C是面向对象的语言&#xff0c;而C是面向过程的语言&#xff1b;C引入new/delete运算符&#xff0c;取代了C中的malloc/free库函数&#xff1b;C引入引用的概念&#xff0c;而C中没有&#xff1b;C引入类的概念&#xff0c;而C中没有&#xff1…...

R square 的计算方法和一点思考

模型的性能评价指标有几种方案&#xff1a;RMSE&#xff08;平方根误差&#xff09;、MAE&#xff08;平均绝对误差&#xff09;、MSE(平均平方误差)、R2_score 其中&#xff0c;当量纲不同时&#xff0c;RMSE、MAE、MSE难以衡量模型效果好坏。这就需要用到R2_score&#xff1…...

梳理你的思路(从OOP到架构设计)_简介EIT造形

目录 1、 复习<基类 /子类>的扩充(extends)结构 典型的<基类/子类>代码结构 <基类/子类>代码结构的变形 2、 从<基类/子类>结构到EIT造形 3、 EIT造形的基本形与变形 1、 复习<基类 /子类>的扩充(extends)结构 典型的<基类/子类>代码…...

梳理你的思路(从OOP到架构设计)_认识EIT造形与内涵

目录 1、 认识类(Class)与内涵 2、 认识EIT造形与内涵 EIT造形&#xff1a; 类造形的组合​编辑 复习EIT的基本形与变形​编辑 不同内涵 EIT造形 1、 认识类(Class)与内涵 回顾 类(Class)是比较小的造形 各种不同内涵&#xff0c;可以透过类(Class)的形式(Form)来呈现出…...

【FTP】FTP基础知识点

文章目录 一、概述二、 工作原理2.1 两个连接2.2 安全性 三、代码实现&#xff1a;1. 选择合适的库2. 连接配置和初始化3. 连接状态检查4. 重连机制5. 文件操作6. 安全性7. 资源管理 参考&#xff1a; 一、概述 将某台计算机中的文件通过网络传送到可能相距很远的另一台计算机…...

排序算法(7):堆排序

问题 排序 [30, 24, 5, 58, 18, 36, 12, 42, 39] 堆排序 堆排序是一种基于堆数据结构的排序算法。堆是一个近似完全二叉树的结构&#xff0c;即除了最后一层外&#xff0c;每一层都必须填满&#xff0c;且最后一层从左往右填充。 堆可以分为大根堆和小根堆。在大根堆中&…...

BERT模型入门(6)语言建模

文章目录 自回归语言建模自编码语言建模 BERT模型在以下两个任务上进行预训练&#xff1a; &#xff08;1&#xff09;掩蔽语言建模 &#xff08;2&#xff09;下一句预测 让我们逐一了解这两种预训练策略是如何工作的。在介绍掩蔽语言模型任务之前&#xff0c;首先让我们了…...

RNN LSTM Seq2Seq Attention

非端到端&#xff1a; data -》 cleaning -》 feature Engining &#xff08;70%-80%工作 设计特征&#xff09;-》 分类器 -》预测 端到端 End-to-End&#xff1a; data -》 cleaning -》Deep learning&#xff08;表示学习&#xff0c;从数据中学习特征&#xff09; -》…...

go语言使用websocket发送一条消息A,持续接收返回的消息

在Go语言中实现一个WebSocket客户端&#xff0c;可以使用gorilla/websocket这个非常流行的库来处理WebSocket连接。下面是一个简单的示例&#xff0c;展示了如何创建一个WebSocket客户端&#xff0c;向服务器发送消息"A"&#xff0c;并持续接收来自服务器的响应。 首…...

音频进阶学习八——傅里叶变换的介绍

文章目录 前言一、傅里叶变换1.傅里叶变换的发展2.常见的傅里叶变换3.频域 二、欧拉公式1.实数、虚数、复数2.对虚数和复数的理解3.复平面4.复数和三角函数5.复数的运算6.欧拉公式 三、积分运算1.定积分2.不定积分3.基本的积分公式4.积分规则线性替换法分部积分法 5.定积分计算…...

沟通的艺术,学会转移矛盾

我的一位好友&#xff0c;资深项目经理&#xff0c;同时也是我公益课程的热心志愿者&#xff0c;最近向我倾诉了他在团队沟通上的挑战。 他发现&#xff0c;尽管辅导学员时感到轻松愉快&#xff0c;但与自己团队成员的沟通却充满挫折。 我询问了他的沟通方式&#xff0c;他解释…...

测评|携程集团25年社招在线测评北森题库、真题分析、考试攻略

携程集团社招入职测评北森题库主要考察以下几个方面&#xff1a; 1. **言语理解**&#xff1a;这部分主要测试应聘者运用语言文字进行思考和交流、迅速准确地理解和把握文段要旨的能力。 2. **资料分析**&#xff1a;包括文字题和图表题&#xff0c;考察应聘者快速找出关键信息…...

C++(进阶) 第4章 map和set的使⽤

C&#xff08;进阶) 第4章 map和set的使⽤ 文章目录 前言一、序列式容器和关联式容器二、set1. insert2.迭代器遍历3.范围for4.erase5.count6.lower_bound和upper_bound 三、multiset总结 前言 上一篇博客写了二叉搜索树&#xff0c;这一篇博客会在上一篇博客原来的上在深入介…...

数独游戏app制作拆解(之三)——数字候选区实现

所谓的数据候选区就是这个&#xff1a; 数字候选区功能及实现&#xff1a; 说明&#xff1a;这部分其实也是textview. 本区功能&#xff1a; 一、实现数字显示到显示区。点击显示区选定某个格子后&#xff0c;再点击这里的数字&#xff0c;会在格子内显示相应的数字。在编辑…...

数据结构——排序

*排序属于数据的运算 1、定义:将一组杂乱无章的数据按一定规律顺次排列一起,即将无序序列排成一个有序序列的运算。 (如果参加排序的数据结构包含多个数据域,那么排序往往是针对其中某个域而言) 2、排序的应用十分广泛:程序中间接应用(二分查找、最短路径、最小生成树…...

制造业4.0:AI与机器人如何重塑生产线

引言&#xff1a;从传统到未来的转型 在轰鸣的生产线上&#xff0c;传统制造业曾以规模化生产和成本效益为核心竞争力&#xff0c;推动了全球工业化进程。然而&#xff0c;面对现代市场的多样化需求和激烈竞争&#xff0c;这种模式正暴露出越来越多的局限性&#xff1a;产能过剩…...

Fastdfs V6.12.1集群部署(arm/x86均可用)

文章目录 一、 Fastdfs 介绍二、部署 信息三、步骤tracker/storage 机器的 compose 内容storage 机器的 composetracker 与 storage 启动目录层级与配置文件测试测试集群扩容与缩减注意事项 一、 Fastdfs 介绍 FastDFS 是一款高性能的分布式文件系统&#xff0c;特别适合用于存…...

【学习笔记】深入浅出详解Pytorch中的View, reshape, unfold,flatten等方法。

文章目录 一、写在前面二、Reshape&#xff08;一&#xff09;用法&#xff08;二&#xff09;代码展示 三、Unfold&#xff08;一&#xff09;torch.unfold 的基本概念&#xff08;二&#xff09;torch.unfold 的工作原理&#xff08;三&#xff09; 示例代码&#xff08;四&a…...

解决Presto dirver timestamp时区问题

#bigdata/metabase 一、背景介绍 1、Presto版本 使用阿里云集群的版本 EMR-5.4.2&#xff0c;Presto的版本为338&#xff1b; Facebook后续不再维护&#xff0c;Trino 351为首个版本 2、Metabase版本 历史版本为0.38.4&#xff0c;新版本为0.51.5 3、0.38.4 cast to time…...

【优选算法】Prefix-Kage:前缀和的算法影(上)

文章目录 1.概念解析2.代码实现2.1【模版】前缀和&#xff08;一维&#xff09;2.1.1 原理2.1.2 代码实现 2.2【模版】前缀和&#xff08;二维&#xff09;2.2.1 原理2.2.2 代码实现 希望读者们多多三连支持小编会继续更新你们的鼓励就是我前进的动力&#xff01; 本篇是优选算…...

中阳科技:量化交易模型的技术革新与实践应用

在金融市场日益复杂化的今天&#xff0c;量化交易作为数据驱动的现代化交易方式&#xff0c;已成为金融领域发展的关键方向。中阳科技凭借深厚的技术积累与创新能力&#xff0c;积极探索量化交易模型的优化与应用&#xff0c;开辟了智能金融新局面。 量化交易的优势与市场前景…...

golang 判断一个点是否在一个多边形内

我有一需求为&#xff1a;判断一个点&#xff08;经纬度范围&#xff09;是否在一个多边形范围内&#xff08;多个经纬度点&#xff09; 这里我借助几何库&#xff08; github.com/paulmach/orb&#xff09;来处理地理空间数据 可以通过在线获取经纬度来确认代码正确性 packa…...

图论笔记1

1.1邻接矩阵储存法 //创建:二维数组vector<vector<int>> graph(n,vector<int>(n,0));//储存for(int i0;i<m;i){int x1,x2;cin>>x1>>x2;graph[x1-1][x2-1]1;}1.2邻接表储存法 补充&#xff1a;c中的list是链表 链接 //创建&#xff1a;数组…...

大模型QLoRA微调——基于Qwen2-7B的自动化病历摘要生成系统

01 项目简介 &#xff08;1&#xff09;项目背景 医疗文档中包含大量的诊疗信息&#xff0c;例如疾病诊断、手术名称、解剖部位、药物使用以及影像和实验室检查结果。这些信息是医疗数据分析的核心&#xff0c;但由于医疗文本内容复杂、格式多样&#xff0c;提取这些关键内容…...

CTFHub-ssrf

技能树--Web--SSRF 内网访问 开启题目 尝试访问位于127.0.0.1的flag.php吧 进入环境 根据提示输入即可 127.0.0.1/flag.php 伪协议读取文件 开启题目 尝试去读取一下Web目录下的flag.php吧 进入环境&#xff0c;根据提示输入 file:///var/www/html/flag.php 鼠标右键查看…...

使用ElasticSearch实现全文检索

文章目录 全文检索任务描述技术难点任务目标实现过程1. java读取Json文件&#xff0c;并导入MySQL数据库中2. 利用Logstah完成MySQL到ES的数据同步3. 开始编写功能接口3.1 全文检索接口3.2 查询详情 4. 前端调用 全文检索 任务描述 在获取到数据之后如何在ES中进行数据建模&a…...

【docker】容器编排之docker swarm

Docker Swarm容器编排详细讲解 Docker Swarm是Docker的原生容器编排工具&#xff0c;它通过将多个Docker引擎组合成一个集群来实现高效的容器部署和管理。 Swarm提供了服务发现、负载均衡、扩展、自动恢复等功能&#xff0c;能够让开发者和运维人员以更简便的方式管理容器化应…...

微信小程序苹果手机自带的数字键盘老是弹出收起,影响用户体验,100%解决

文章目录 1、index.wxml2、index.js3、index.wxss1、index.wxml <!--index.wxml--> <view class="container"><view class="code-input-container"><view class="code-input-boxes"><!-- <block wx:for="{{…...

SCAU期末笔记 - Linux系统应用与开发教程样卷解析(2024版)

我真的不理解奥&#xff0c;为什么会有给样卷不自带解析的&#xff0c;对答案都没得对&#xff0c;故整理一篇 样卷1 一、选择题 1、为了遍历shell脚本调用时传入的参数&#xff0c;需要在shell脚本中使用_____。 A.$#表示参数的个数B.S表示所有参数C.$0表示脚本名D.$1表示…...

2024 年贵州技能大赛暨全省第二届数字技术应用职业技能竞赛“信息通信网络运行管理员”赛项--linux安全题

Linux操作系统渗透测试 Nmap -sS -p- ip 扫描 这题有俩种做法&#xff0c;一种用3306端口&#xff0c;另一种用48119端口 用48119端口是最简单的做法 nc 连接这个端口如何修改root密码 ssh连接 这样我们就成功的拿到root权限 1.通过本地PC中渗透测试平台Kali对服务器场景进…...

CTFshow-php特性(Web125-150)

CTFshow-php特性(Web125-150) Web125 <?php error_reporting(0); highlight_file(__FILE__); include("flag.php"); $a$_SERVER[argv]; $c$_POST[fun]; if(isset($_POST[CTF_SHOW])&&isset($_POST[CTF_SHOW.COM])&&!isset($_GET[fl0g])){if(!p…...

机器学习一点基础

人工智能&#xff08;Artificial Intelligence, AI&#xff09;和机器学习&#xff08;Machine Learning, ML&#xff09;是当今最热门的技术领域之一。然而&#xff0c;初学者往往面对大量的术语和技术细节&#xff0c;不知道从何入手。本文将以通俗易懂的方式介绍机器学习的基…...

【C++】 While循环高级分析与实践扩展

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;While 循环基础知识1.1 基本语法形式1.2 if 与 while 的区别1.3 循环结构比较 &#x1f4af;While 循环实例分析2.1 执行结果2.2 计算流程分析 &#x1f4af;While 循环注意…...

React Native状态管理器Redux、MobX、Context API、useState

Redux、MobX、Context API、useState都是React中用于状态管理的工具&#xff0c;但它们各自有不同的特点和使用场景。 Redux 介绍&#xff1a; Redux是一个JavaScript状态管理库&#xff0c;最初由Dan Abramov和Andrew Clark于2015年开发。它基于Flux架构&#xff0c;强调状态…...

【AI系列】Paddle Speech安装指南

文章目录 环境依赖1. 安装Python1.1 下载Python安装包1.2 安装gcc1.3 安装依赖库1.4 编译和安装Python1.5 配置环境变量 2. 安装PaddlePaddle3. 安装PaddleSpeech4. 运行PaddleSpeech5. 解决常见问题5.1 错误&#xff1a;libssl.so.1.1解决方法&#xff1a; 5.2 错误&#xff1…...

【学习笔记总结】华为云:应用上云后的安全规划及设计

一、背景和问题 数字化时代&#xff0c;随着信息技术的飞速发展&#xff0c;企业和各类组织纷纷将自身的应用程序迁移至云端。云计算凭借其诸多优势&#xff0c;如成本效益、可扩展性、灵活性以及便捷的资源共享等&#xff0c;已然成为了现代业务运营的重要支撑。 今年&#xf…...

数据可视化-2. 条形图

目录 1. 条形图适用场景分析 1.1 比较不同类别的数据 1.2 展示数据分布 1.3 强调特定数据点 1.4 展示时间序列数据的对比 1.5 数据可视化教育 1.6 特定领域的应用 2. 条形图局限性 3. 条形图图代码实现 3.1 Python 源代码 3.2 条形图效果&#xff08;网页显示&#…...

设置Qt程序开机自启动(windows版本)

前言 本文展示在windows环境下&#xff0c;通过代码实现更改系统注册表的方式来实现程序的开机自动启动。 一、注册表 需要更改的系统注册表为: HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run 二、代码演示 1.头文件 头文件autorun.h #ifndef …...

LeetCode hot100-80

https://leetcode.cn/problems/partition-labels/description/?envTypestudy-plan-v2&envIdtop-100-liked 763. 划分字母区间 已解答 中等 相关标签 相关企业 提示 给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段&#xff0c;同一字母最多出现在一个片段中。…...

Ubuntu批量修改文件名

文章目录 批量重命名文件&#xff1a;Ubuntu下使用find命令结合sed和mv参考 批量重命名文件&#xff1a;Ubuntu下使用find命令结合sed和mv 在日常开发和文件管理中&#xff0c;有时我们需要批量重命名一批文件&#xff0c;比如将文件名中的某个特定字符串替换为另一个字符串。…...

CVMJ 2024 | StyleDiffusion: 基于Prompt嵌入的真实图像反演和文本编辑

论文&#xff1a;《StyleDiffusion: Prompt-Embedding Inversion for Text-Based Editing》 代码&#xff1a;https://github.com/sen-mao/StyleDiffusion​https://github.com/sen-mao/StyleDiffusion​ 问题背景 已有一些工作利用预训练扩散模型进行真实图像的编辑。这些方…...

UE5 帧数优化思路

A、思路 1、直接在GM的事件beginplay中改可延展性相对质量级别&#xff0c; 改为1或2&#xff0c;最简单粗暴的方式&#xff0c;而效果明显&#xff0c;帧数提高一倍&#xff0c;GPU占用率与显存占用直接下降一大截。在物体密集的地方卡顿会缓解很多&#xff0c;物体少的地方…...

【Java】正则表达式基础题+场景题练习

基础语法可以看我另一篇博客&#xff1a;正则表达式【规则】【实例】【技巧】_正则规则-CSDN博客 输出结果全是true public class StringRegexTest {public static void main(String[] args) {System.out.println(matchSingleNum("1"));System.out.println(matchMul…...

qq资料修改/空间操作

此工具仅支持 空间ck导入操作 发布说说 转发别人的动态分享 支持修改头像 修改昵称 空间权限获取 说说内容自定义 说放置说说图片 同样也支持多ck操作 详细支持如下 发布说说 转发分享 修改头像 修改昵称 允许空间 发送分享 设置访客权限 问题空间 清空相册 删除说说 封存三天…...

数据结构—图

目录 一、图的定义 二、图的基本概念和术语 2.1有向图 2.2无向图 2.3简单图 2.4多重图 2.5完全图 2.6子图 2.7连通、连通图和连通分量 2.8强连通图、强联通分量 2.9生成树&#xff0c;生成森林 2.10顶点的度、入度和出度 2.11边的权和网 2.12稠密图、稀疏图 2.1…...

【Prompt Engineering】2.迭代优化

一、环境配置 配置使用zhipuai API 的环境。安装 zhipuai 库&#xff0c;并设置 API_KEY。封装 zhipuai 接口的函数&#xff0c;参数为 Prompt&#xff0c;返回对应结果。 from zhipuai import ZhipuAI zhipu_client ZhipuAI(api_key"") # 一个封装 OpenAI 接口…...

每日十题八股-2024年12月16日

1.垃圾回收算法哪些阶段会stop the world? 2.minorGC、majorGC、fullGC的区别&#xff0c;什么场景触发full GC 3.垃圾回收器 CMS 和 G1的区别&#xff1f; 4.什么情况下使用CMS&#xff0c;什么情况使用G1? 5.G1回收器的特色是什么&#xff1f; 6.GC只会对堆进行GC吗&#x…...

使用 imageio 库轻松处理图像与视频

使用 imageio 库轻松处理图像与视频 imageio 是一个 Python 库&#xff0c;用于读取和写入多种图像和视频格式。它功能强大、易于使用&#xff0c;广泛应用于图像处理、视频编辑和数据可视化等领域。本篇文章将介绍 imageio 的基础功能、常见用法以及高级操作。 一、安装 imag…...

MR30分布式IO模块:驱动物流传输机高效升级

在日新月异的物流行业中&#xff0c;效率与智能化已成为推动企业转型升级的关键驱动力。随着物联网、大数据、云计算等技术的深度融合&#xff0c;传统物流传输机正逐步向智能化、自动化迈进。在这场技术革命中&#xff0c;明达技术MR30分布式IO模块以其独特的优势&#xff0c;…...