降维技术——PCA、LCA 和 SVD

一、说明

        降维在数据分析和机器学习中发挥着关键作用,为高维数据集带来的挑战提供了战略解决方案。随着数据集规模和复杂性的增长,特征或维度的数量通常变得难以处理,导致计算需求增加、潜在的过度拟合和模型可解释性降低。降维技术通过捕获数据中的基本信息同时丢弃冗余或信息量较少的特征来提供补救措施。这一过程不仅简化了计算任务,还有助于可视化数据趋势,减轻维数灾难的风险,并提高机器学习模型的泛化性能。降维在从图像和语音处理到金融和生物信息学等各个领域都有应用,其中从大量数据集中提取有意义的模式对于做出明智的决策和构建有效的预测模型至关重要。

        在本博客中,我们将深入研究三种强大的降维技术——主成分分析(PCA)、线性判别分析(LDA)和奇异值分解(SVD)。我们的探索不仅会阐明这些方法的底层算法,还会提供它们各自的优缺点。我们将结合理论讨论和 Python 的实际实现,提供将 PCA、LDA 和 SVD 应用到现实世界数据集的实践指导。无论您是寻求降维介绍的新手,还是希望增强理解的经验丰富的从业者,这个博客都是为了满足各个级别的专业知识而精心设计的。

二、主成分分析(PCA)

主成分分析(PCA)是一种广泛应用于数据分析和机器学习的降维技术。其主要目标是将高维数据转换为低维表示,捕获最重要的信息。

2.1 以下是 PCA 的动机:

由于我们的目标是识别数据集中的模式,因此希望数据分布在每个维度上,并且我们寻求这些维度之间的独立性。让我们回顾一下一些基本概念。方差作为变异性的度量,本质上是量化数据集分散的程度。用数学术语来说,它表示与平均分数的平均平方偏差。用于计算方差的公式表示为 var(x),表达如下。

协方差量化两组有序数据中对应元素表现出相似方向运动的程度。该公式表示为 cov(x, y),捕获变量 x 和 y 之间的协方差。在这种情况下,xi 表示第 i 维中 x 的值,而 x 条和 y 条表示它们各自的平均值。现在,让我们以矩阵形式探讨这个概念。如果我们有一个维度为 m*n 的矩阵 X,其中包含 n 个数据点,每个数据点的维度为 m,则协方差矩阵可以计算如下:

请注意,协方差矩阵包含 -
1. 作为主对角元素的维度方差
2. 作为非对角元素的维度协方差

如前所述,我们的目标是确保数据广泛分散,表明其维度上的高方差。此外,我们的目标是消除相关维度,这意味着维度之间的协方差应该为零,表示它们的线性独立性。因此,目的是进行数据变换,使其协方差矩阵表现出以下特征:
1. 有效值作为主对角线元素。
2. 零值作为非对角元素。
因此,必须对原始数据点进行变换以获得类似于对角矩阵的协方差矩阵。将矩阵转换为对角矩阵的过程称为对角化,它构成了主成分分析 (PCA) 的主要动机。

PCA 的工作原理如下:

1. 标准化

当以不同单位测量特征时,对数据进行标准化。这需要减去每个特征的平均值并除以标准差。未能对具有不同尺度特征的数据进行标准化可能会导致误导性组件。

2. 计算协方差矩阵

如前所述计算协方差矩阵

3.计算特征向量和特征值

确定协方差矩阵的特征向量和特征值。

特征向量表示方向(主成分),特征值表示这些方向上的方差大小。要了解什么是特征向量和特征值,您可以观看此视频:

4. 对特征值进行排序

按降序对特征值进行排序。与最高特征值对应的特征向量是捕获数据中最大方差的主成分。要了解原因,请参阅此博客。

5. 选择主成分

根据所需解释的方差选择前 k 个特征向量(主成分)。通常,您的目标是保留总方差的很大一部分,例如 85%。可以在此处找到如何计算解释方差。

6. 转换数据

现在,我们可以使用特征向量转换原始数据:

因此,如果我们有 m 维原始 n 个数据点,则
X : m*n
P : k*m
Y = PX : (k*m)(m*n) = (k*n)
因此,我们新的变换矩阵有 n具有 k 维的数据点。

2.2 优点:

1.降维:
PCA有效地减少了特征数量,这对于遭受维数灾难的模型是有利的。

2. 特征独立性:
主成分是正交的(不相关的),这意味着它们捕获独立的信息,简化了对简化特征的解释。

3. 降噪:
PCA 可以通过关注解释数据中最显着方差的成分来帮助降低噪声。

4. 可视化:
降维数据可以可视化,有助于理解底层结构和模式。

2.3 缺点:

1. 可解释性的损失:
原始特征的可解释性可能会在变换后的空间中丢失,因为主成分是原始特征的线性组合。

2. 线性假设:
PCA 假设变量之间的关系是线性的,但并非在所有情况下都是如此。

3.对尺度敏感:
PCA对特征的尺度敏感,因此通常需要标准化。

4. 异常值影响结果:
异常值可以显着影响 PCA 的结果,因为它侧重于捕获最大方差,这可能会受到极值的影响。

2.4 何时使用:

1. 高维数据:
PCA 在处理具有大量特征的数据集以减轻维数灾难时特别有用。

2.共线特征:
当特征高度相关时,PCA可以有效地捕获共享信息并用更少的组件来表示它。

3. 可视化:
当高维数据可视化具有挑战性时,PCA 很有用。它将数据投影到可以轻松可视化的低维空间中。

5.线性关系:
当变量之间的关系大部分是线性时,PCA是一种合适的技术。

2.5 Python实现

import numpy as np
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris# Load iris dataset as an example
iris = load_iris()
X = iris.data
y = iris.target# Split the dataset into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# Standardize the data (important for PCA)
scaler = StandardScaler()
X_train_std = scaler.fit_transform(X_train)
X_test_std = scaler.transform(X_test)# Apply PCA
pca = PCA()
X_train_pca = pca.fit_transform(X_train_std)# Calculate the cumulative explained variance
cumulative_variance_ratio = np.cumsum(pca.explained_variance_ratio_)# Determine the number of components to keep for 85% variance explained
n_components = np.argmax(cumulative_variance_ratio >= 0.85) + 1# Apply PCA with the selected number of components
pca = PCA(n_components=n_components)
X_train_pca = pca.fit_transform(X_train_std)
X_test_pca = pca.transform(X_test_std)# Display the results
print("Original Training Data Shape:", X_train.shape)
print("Reduced Training Data Shape (PCA):", X_train_pca.shape)
print("Number of Components Selected:", n_components)

在此示例中,PCA()最初应用时未指定组件数量,这意味着它将保留所有组件。然后,使用 计算累积解释方差np.cumsum(pca.explained_variance_ratio_)。最后,确定解释至少 85% 方差所需的成分数量,并使用选定的成分数量再次应用 PCA。请注意,PCA 仅适用于训练数据,然后用于转换测试数据。

三、线性判别分析 (LDA)

        线性判别分析 (LDA) 是一种降维和分类技术,旨在优化数据集中不同类别之间的区别。LDA 在数据点类别预先确定的监督学习场景中尤其普遍。PCA 被认为是一种“无监督”算法,它忽略类标签,专注于寻找主成分以最大化数据集方差,而 LDA 则采用“监督”方法。LDA 计算“线性判别式”,确定作为轴的方向,以最大化多个类之间的分离。为了深入研究 LDA 的工作原理,让我们使用UCI 机器学习存储库中著名的“Iris”数据集的示例来了解如何计算 LDA 。它包含来自三个不同品种的 150 朵鸢尾花的测量值。

Iris 数据集中共有三个类:

  1. 山鸢尾 (n=50)
  2. 杂色鸢尾 (n=50)
  3. 弗吉尼亚鸢尾 (n=50)

Iris 数据集中有四个特征:

  1. 萼片长度(厘米)
  2. 萼片宽度(厘米)
  3. 花瓣长度(厘米)
  4. 花瓣宽度(厘米)

3.1 LDA的步骤:

  1. 我们将从计算 3 个不同花类的平均向量 mi (i=1,2,3) 开始:
Mean Vector class 1: [ 5.006  3.418  1.464  0.244]Mean Vector class 2: [ 5.936  2.77   4.26   1.326]Mean Vector class 3: [ 6.588  2.974  5.552  2.026]

每个向量包含数据集中特定类的 4 个特征的平均值。

2. 计算类内散布矩阵 (Sw),它表示每个类内数据的分布:

在我们的示例中,它将如下所示:

within-class Scatter Matrix:[[ 38.9562  13.683   24.614    5.6556][ 13.683   17.035    8.12     4.9132][ 24.614    8.12    27.22     6.2536][  5.6556   4.9132   6.2536   6.1756]]

3. 使用以下公式计算类间散布矩阵 (Sb),它表示不同类之间的分布:

在我们的示例中,它将如下所示:

between-class Scatter Matrix:[[  63.2121  -19.534   165.1647   71.3631][ -19.534    10.9776  -56.0552  -22.4924][ 165.1647  -56.0552  436.6437  186.9081][  71.3631  -22.4924  186.9081   80.6041]]

4. 计算 Sw-1Sb 的特征值和特征向量(类似于 PCA)。在我们的例子中,我们有 4 个特征值和特征向量:

Eigenvector 1:
[[-0.2049][-0.3871][ 0.5465][ 0.7138]]
Eigenvalue 1: 3.23e+01Eigenvector 2:
[[-0.009 ][-0.589 ][ 0.2543][-0.767 ]]
Eigenvalue 2: 2.78e-01Eigenvector 3:
[[ 0.179 ][-0.3178][-0.3658][ 0.6011]]
Eigenvalue 3: -4.02e-17Eigenvector 4:
[[ 0.179 ][-0.3178][-0.3658][ 0.6011]]
Eigenvalue 4: -4.02e-17

5. 按特征值递减对特征向量进行排序,并选取前 k 个。通过减少特征值对特征对进行排序后,现在是时候根据 2 个信息最丰富的特征对构建我们的 d×k 维特征向量矩阵(我们称之为 W)。我们在示例中得到以下矩阵:

Matrix W:[[-0.2049 -0.009 ][-0.3871 -0.589 ][ 0.5465  0.2543][ 0.7138 -0.767 ]]

6. 使用矩阵 W(4 X 2 矩阵)通过以下方程将样本转换到新的子空间:Y = X*W,其中 X 是矩阵格式的原始数据帧(在我们的例子中为 150 X 4 矩阵)并且Y 是转换后的数据集(150 X 2 矩阵)。请参阅此博客了解更多详细信息。

3.2 优点:

1.最大化类分离:
LDA旨在最大化不同类之间的分离,使其对分类任务有效。

2.降维:
与PCA一样,LDA可以用于降维,但具有考虑类信息的优点。

3.3 缺点:

1.对异常值的敏感性:
LDA对异常值敏感,异常值的存在会影响方法的性能。

2. 正态性假设:
LDA 假设每个类内的特征呈正态分布,如果违反此假设,LDA 可能表现不佳。

3. 需要足够的样本:当
每类样本数量较少时,LDA 可能表现不佳。拥有更多样本可以改善类参数的估计。

3.4 何时使用:

1. 分类任务
当目标是将数据分类到预定义的类别时,LDA 很有用。

2. 保留类别信息:
当目标是降低维度同时保留与区分类别相关的信息时。

3. 正态性假设成立:
当每个类内正态分布的假设有效时,LDA 表现良好。

4.有监督降维:
当任务需要在类标签的指导下进行降维时,LDA是一个合适的选择。

3.5 Python实现

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.datasets import make_classification
from sklearn.preprocessing import StandardScaler# Generate a sample dataset
X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=42)# Split the data into training and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# Standardize the features (important for LDA)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)# Initialize LDA and fit on the training data
lda = LinearDiscriminantAnalysis()
X_train_lda = lda.fit_transform(X_train, y_train)# Calculate explained variance ratio for each component
explained_variance_ratio = lda.explained_variance_ratio_# Calculate the cumulative explained variance
cumulative_explained_variance = np.cumsum(explained_variance_ratio)# Find the number of components that explain at least 75% of the variance
n_components = np.argmax(cumulative_explained_variance >= 0.75) + 1# Transform both the training and test data to the selected number of components
X_train_lda_selected = lda.transform(X_train)[:, :n_components]
X_test_lda_selected = lda.transform(X_test)[:, :n_components]# Print the number of components selected
print(f"Number of components selected: {n_components}")# Now, X_train_lda_selected and X_test_lda_selected can be used for further analysis or modeling

此示例使用make_classificationscikit-learn 中的函数生成合成数据集,然后将数据拆分为训练集和测试集。它标准化特征,初始化LDA模型,并将其拟合到训练数据中。最后,它根据解释的所需方差选择组件数量,并相应地转换训练和测试数据。

四、奇异值分解 (SVD)

奇异值分解是一种矩阵分解技术,广泛应用于各种应用,包括线性代数、信号处理和机器学习。它将一个矩阵分解为另外三个矩阵,允许以简化形式表示原始矩阵。这里解释了分解技术和证明。

4.1 SVD 的步骤:

1. 矩阵的分解
给定一个大小为 mxn 的矩阵 M(或 m 行 n 列的数据框),SVD 将其分解为三个矩阵:
M = U *Σ *Vᵗ,
其中 U 是 mxm 正交矩阵,Σ 是mxr 对角矩阵,V 是 rxn 正交矩阵。r是矩阵M的秩。Σ的
对角线元素是原始矩阵M的奇异值,并且它们按降序排列。U 的列是 M 的左奇异向量。这些向量形成 M 的列空间的正交基。V 的列是 M 的右奇异向量。这些向量形成 M 的行空间的正交基。请阅读本文以深入了解其背后的数学原理。

2. 简化形式(截断SVD)
对于降维,通常使用截断版本的SVD。选择 Σ 中前 k 个最大奇异值。这些列可以从 Σ 中选择,行可以从 Vᵗ 中选择。可以使用以下公式从原始矩阵 M 重建新矩阵 B:

B = U * Σ
B = Vᵗ * A,其中 Σ 仅包含原始 Σ 中基于奇异值的前 k 列,Vᵗ 包含原始 Vᵗ 中与奇异值对应的前 k 行。欲了解更多详情,您可以参考这里。

4.2 优点:

1. 降维
SVD 允许通过仅保留最重要的奇异值和向量来降维。

2.数据压缩
SVD用于数据压缩任务,减少矩阵的存储要求。

3. 降噪
通过仅使用最重要的奇异值,SVD 可以帮助减少数据中噪声的影响。

4. 数值稳定性
SVD 具有数值稳定性,非常适合求解病态系统中的线性方程。

5.正交性
SVD分解中的矩阵U和V是正交的,保留了原始矩阵的行和列之间的关系。

6.在推荐系统中的应用
SVD广泛应用于推荐系统的协同过滤中。

4.3 缺点:

1. 计算复杂性:
计算大型矩阵的完整 SVD 的计算成本可能很高。

2. 内存要求:
存储完整的矩阵 U、Σ 和 V 可能会占用大量内存,尤其是对于大型矩阵。

3. 对缺失值的敏感性:
SVD 对数据中的缺失值很敏感,处理缺失值需要专门的技术。

4.4 何时使用 SVD:

1. 降维:
当目标是降低数据的维度同时保留其基本结构时。

2. 推荐系统:
在基于协同过滤的推荐系统中,SVD 用于识别捕获用户-项目交互的潜在因素。

3.数据压缩:
在需要对大数据集进行压缩或近似的场景中。

4. 数值稳定性:
在求解病态系统中的线性方程时,SVD 提供数值稳定性。

5.信号处理:
在信号处理中,SVD用于降噪和特征提取。

6. 主题建模:
SVD 用于主题建模技术,例如潜在语义分析(LSA)。

4.5 Python实现

import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.decomposition import TruncatedSVD
from sklearn.datasets import make_classification
from sklearn.preprocessing import StandardScaler# Generate a sample dataset
X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=42)# Split the data into training and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# Standardize the features (important for SVD)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)# Initialize SVD and fit on the training data
svd = TruncatedSVD(n_components=X_train.shape[1] - 1)  # Use one less component than the feature count
X_train_svd = svd.fit_transform(X_train)# Calculate explained variance ratio for each component
explained_variance_ratio = svd.explained_variance_ratio_# Calculate the cumulative explained variance
cumulative_explained_variance = np.cumsum(explained_variance_ratio)# Find the number of components that explain at least 75% of the variance
n_components = np.argmax(cumulative_explained_variance >= 0.75) + 1# Transform both the training and test data to the selected number of components
X_train_svd_selected = svd.transform(X_train)[:, :n_components]
X_test_svd_selected = svd.transform(X_test)[:, :n_components]# Print the number of components selected
print(f"Number of components selected: {n_components}")# Now, X_train_svd_selected and X_test_svd_selected can be used for further analysis or modeling

此示例使用该make_classification函数生成合成数据集,将数据拆分为训练集和测试集,并对特征进行标准化。然后,它初始化TruncatedSVD模型,将其拟合到训练数据上,并根据所解释的所需方差选择组件的数量。最后,它相应地转换训练和测试数据。

五、结论

主成分分析 (PCA)、线性判别分析 (LDA) 和奇异值分解 (SVD) 之间的选择取决于数据的具体目标和特征。以下是有关何时使用每种技术的一般准则:

1. PCA(主成分分析)

用例:
1. 当目标是降低数据集的维度时。
2. 在捕获数据中的全局模式和关系至关重要的场景中。
3. 用于探索性数据分析和可视化。

2. LDA(线性判别分析)

用例:
1. 在分类问题中,增强类之间的分离很重要。
2. 当存在标记数据集时,目标是找到最大化类别区分度的投影。
3. 当类正态分布和协方差矩阵相等的假设成立时,LDA 特别有效。

3. SVD(奇异值分解)

用例:
1. 处理稀疏数据或缺失值时。
2. 在推荐系统的协同过滤中。
3. SVD也适用于数据压缩和去噪。

我们应该考虑以下因素:
无监督与监督学习:PCA 是无监督的,而 LDA 是有监督的。根据标记数据的可用性进行选择。

类可分离性:如果目标是提高类可分离性,则首选 LDA。PCA 和 SVD 关注整体方差。

数据特征:数据的特征(例如线性、类别分布和异常值的存在)会影响选择。

应用程序特定要求:考虑应用程序的特定要求,例如可解释性、计算效率或丢失数据的处理。

总之,PCA 适用于无监督降维,LDA 对于关注类可分离性的监督问题有效,而 SVD 用途广泛,适合各种应用,包括协同过滤和矩阵分解。选择取决于数据的性质和分析的目标。

您对此博客有任何疑问或建议吗?请随时留言。

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

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

相关文章

用队列实现栈

问题描述: 请你仅用两个队列实现一个后入先出(LIFO)的栈,并支持普通队列的全部四种操作(push、top、pop和empty)。 实现MyStack类: void push(int x) 将元素x压入栈顶。int pop()移除并返回栈顶…

手写 Promise:深入理解异步编程的基石

手写 Promise:深入理解异步编程的基石 本文将带您逐步实现一个简单的 Promise,以帮助您深入理解异步编程的基本概念。通过自己动手编写 Promise 的过程,您将更好地理解 Promise 的工作原理和常见用法,并能够应用于实际项目中。 …

什么是网站劫持

网站劫持是一种网络安全威胁,它通过非法访问或篡改网站的内容来获取机密信息或者破坏计算机系统。如果您遇到了网站劫持问题,建议您立即联系相关的安全机构或者技术支持团队,以获得更专业的帮助和解决方案。

Angular 进阶之四:SSR 应用场景与局限

应用场景 内容丰富,复杂交互的动态网页,对首屏加载有要求的项目,对 seo 有要求的项目(因为服务端第一次渲染的时候,已经把关键字和标题渲染到响应的 html 中了,爬虫能够抓取到此静态内容,因此更…

【面试专题】MySQL篇①

1.MySQL中,如何定位慢查询? ①介绍一下当时产生问题的场景(我们当时的一个接口测试的时候非常的慢,压测的结果大概5秒钟) ②我们系统中当时采用了运维工具( Skywalking ),可以监测出哪个接口…

PostgreSQL从小白到高手教程 - 第38讲:数据库备份

PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。 第38讲&#…

running小程序重要技术流程文档

一、项目文件说明: (注:getMyMoney无用已删除) 二、重要文件介绍 1.reinfo.js:位于utils文件下,该文件封装有统一的请求URL,和请求API同意封装供页面调用;调用时候需要在页面上先…

【C语言】操作符详解(一):进制转换,原码,反码,补码

目录 操作符分类 2进制和进制转换 2进制转10进制 10进制转2进制 2进制转8进制和16进制 2进制转8进制 2进制转16进制 原码、反码、补码 操作符分类 操作符中有一些操作符和二进制有关系,我们先铺垫一下二进制的和进制转换的知识。 2进制和进制转换 其实我们经…

vertica主键列能插入重复值的处理办法

问题描述 开发同事反馈在vertica中创建含主键列的表中插入重复数据时没有进行校验,插入重复值成功。经过测试着实可以插入重复值,这个坑有些不一样。 创建表和插入语句如下: --创建表 CREATE TABLE dhhtest(ID VARCHAR(64) PRIMARY KEY );…

使用Microsoft Dynamics AX 2012 - 5. 生产控制

生产控制的主要职责是生产成品。为了完成这项任务,制造业需要消耗物品和资源能力(人员和机械)。制造过程可能包括半成品的生产和库存。半成品是指物品包括在成品材料清单中。 制造业的业务流程 根据公司的要求,您可以选择申请Dy…

某马点评——day04

达人探店 发布探店笔记 改一下&#xff0c;图片保存路径就可以直接运行测试了。 查看探店笔记 Service public class BlogServiceImpl extends ServiceImpl<BlogMapper, Blog> implements IBlogService {Resourceprivate IUserService userService;Overridepublic Resu…

OpenCL学习笔记(二)手动编译开发库(win10+vs2019)

前言 有时需求比较特别&#xff0c;可能需要重新编译opencl的sdk库。本文档简单记录下win10下&#xff0c;使用vs2019编译的过程&#xff0c;有需要的小伙伴可以参考下 一、获取源码 项目地址&#xff1a;GitHub - KhronosGroup/OpenCL-SDK: OpenCL SDK 可以直接使用git命令…

一篇文章了解指针变量

字符指针变量 在指针的类型中我们知道有一种指针叫做字符指针 它的使用情况如下&#xff1a; #include<stdio.h> int main() {char pa w;char*p1&pa;*p1 a;printf("%c\n", *p1);return 0; } 在这段代码当中&#xff0c;我们将‘w’字符的地址传到了p…

vue3 自己写一个月的日历

效果图 代码 <template><div class"monthPage"><div class"calendar" v-loading"loading"><!-- 星期 --><div class"weekBox"><div v-for"(item, index) in dayArr" :key"index&q…

2.修改列名与列的数据类型

修改字段名与字段数据类型 1.修改字段名 有时&#xff0c;在我们建好一张表后会突然发现&#xff0c;哎呀&#xff01;字段名貌似写错了&#xff01;怎么办&#xff1f;要删了表再重新建一个新表吗&#xff1f;还是要删了这个字段再新建一个新的字段&#xff1f; 都不用&…

AIGC专题报告:生成式人工智能人人可用的新时代

今天分享的AIGC系列深度研究报告&#xff1a;《AIGC专题报告&#xff1a;生成式人工智能人人可用的新时代》。 &#xff08;报告出品方&#xff1a;埃森哲&#xff09; 报告共计&#xff1a;21页 人工智能发展迎来新拐点 ChatGPT 正在唤醒全球对人工智能&#xff08;AI&…

在pom.xml中添加maven依赖,但是类里面import导入的时候报错

问题&#xff1a; Error:(27, 8) java: 类TestKuDo是公共的, 应在名为 TestKuDo.java 的文件中声明 Error:(7, 23) java: 程序包org.apache.kudu不存在 Error:(8, 23) java: 程序包org.apache.kudu不存在 Error:(9, 23) java: 程序包org.apache.kudu不存在 Error:(10, 30) jav…

【Java探索之旅】我与Java的初相识(一):Java的特性与优点及其发展史

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; Java入门到精通 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 一. Java语言概述与优势1.1 Java的概述1.2 Java语言的优势 二. Java领域与发展史2.1 Java的使用领域2.…

面试多线程八股文十问十答第二期

面试多线程八股文十问十答第二期 作者&#xff1a;程序员小白条&#xff0c;个人博客 相信看了本文后&#xff0c;对你的面试是有一定帮助的&#xff01; ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 1.进程和线程的区别 概念不同&#xff1a;进程是操作系统中的一个独立执行单元&a…

目标检测mAP计算以及coco评价标准

这篇是我对哔哩哔哩up主 霹雳吧啦Wz 的视频的文字版学习笔记 感谢他对知识的分享 讲一下目标检测中的一些常见的指标 在我们使用目标检测网络训练时 最后在验证集上会得到一个coco的评价列表 就像我们图中给的这一系列参数列表一样 我们再进一步引入两个概念 第一个叫做precisi…