【零基础学机器学习 5】机器学习中的分类:什么是分类以及分类模型

👨‍💻 作者简介:程序员半夏 , 一名全栈程序员,擅长使用各种编程语言和框架,如JavaScript、React、Node.js、Java、Python、Django、MySQL等.专注于大前端与后端的硬核干货分享,同时是一个随缘更新的UP主. 你可以在各个平台找到我!
🏆 本文收录于专栏: 零基础学机器学习
🔥 专栏介绍: 本专栏将帮助您了解机器学习、其工作原理以及如何使用它。本教程包含以下内容:监督和无监督学习、线性回归、随机森林算法、朴素贝叶斯分类器、K-means聚类算法等等等基础学习基础知识,以及各种实战案例。

43592febe975c9edf02281a1cbffcee3

文章目录

  • 回顾监督学习?
  • 什么是分类?
  • 什么是分类算法?
    • 分类问题中的学习方法
    • 懒惰学习方法(消极学习方法)
    • 急切学习方法(积极学习方法)
  • 机器学习中的四种分类任务
    • 分类预测建模
    • 二元分类 - Binary Classification
    • 多类分类 - Multi-Class Classification
    • 多标签分类 - Multi-Label Classification
    • 不平衡分类 - Imbalanced Classification
  • 常见分类算法
    • 1. 逻辑回归
    • 2. 朴素贝叶斯算法
    • 3. K-最近邻算法
    • 4. 决策树算法
    • 5. 随机森林算法
    • 6. 支持向量机算法
  • 常用分类器
    • 朴素贝叶斯
    • 决策树
    • K最近邻算法
  • 评估分类模型
    • 1. 混淆矩阵
    • 2. Log Loss 或交叉熵损失函数
    • 3. AUC-ROC 曲线
  • 分类算法的应用场景
  • 分类器评估
    • 交叉验证
    • 留出法
    • ROC曲线
    • 偏差
    • 方差
    • 精度和召回率
  • 选择合适的算法
  • 常见问题
  • 知识普及-算法和模型

想象一下打开你的橱柜,发现所有东西都混乱不堪。你会发现取需要的东西非常困难和耗时。如果一切都被分组,那就会变得非常简单。这就是机器学习分类算法的作用。

回顾监督学习?

在我们深入分类之前,让我们先复习一下监督学习是什么。假设你正在学习数学中的一个新概念,解决一个问题后,你可能会参考答案来确定自己是否正确。一旦你对解决特定类型的问题有信心,你就会停止参考答案,自己独立解决问题。

这也是机器学习模型中监督学习的工作方式。在监督学习中,模型通过示例进行学习。除了输入变量之外,我们还会给模型相应的正确标签。在训练过程中,模型可以查看哪个标签与我们的数据相对应,因此可以找到我们的数据与这些标签之间的模式。

一些监督学习的例子包括:

  • 通过教授模型什么是垃圾邮件和非垃圾邮件来进行分类。
  • 语音识别,通过教机器识别你的声音。
  • 物体识别,向机器展示物体的外观并让它从其他物体中选择该物体。

我们可以进一步将监督学习分为分类和回归:

image-20230507225441049

什么是分类?

分类被定义为将对象和思想识别、理解和分组到预设类别(也称为“子群体”)的过程。借助这些预分类的训练数据集,机器学习程序中的分类利用各种算法将未来的数据集分类到相应和相关的类别中。

机器学习中使用的分类算法利用输入的训练数据来预测随后的数据可能属于预定类别中的一个的可能性或概率。分类的最常见应用之一是将电子邮件过滤为“垃圾邮件”或“非垃圾邮件”,这是今天顶尖电子邮件服务提供商使用的方法。

简而言之,分类是一种“模式识别”。在这里,应用于训练数据的分类算法在未来的数据集中找到相同的模式(类似的数字序列、单词或情感等)。

我们将详细探讨分类算法,并发现文本分析软件如何执行诸如情感分析之类的操作-用于按意见极性(积极、消极、中性等)对非结构化文本进行分类。

image-20230507230039091

什么是分类算法?

分类算法是一种有监督学习技术,基于训练数据,用于对新数据进行分类。在分类中,程序使用提供的数据集或观测来学习如何将新观测分类为不同的类别或组。例如,0或1、红色或蓝色、是或否、垃圾邮件或非垃圾邮件等。目标、标签或类别都可以用来描述类别。分类算法使用带标签的输入数据,因为它是一种有监督学习技术,包括输入和输出信息。在分类过程中,离散输出函数(y)被转换为输入变量(x)。

简单来说,分类是一种模式识别类型,其中分类算法在训练数据上执行,以发现新数据集中相同的模式。

分类问题中的学习方法

有两种类型的学习者。

懒惰学习方法(消极学习方法)

它首先存储训练数据集,然后等待测试数据集到达。使用懒惰学习方法时,分类是使用训练数据集的最合适数据进行的。花费在训练上的时间较少,但在预测上花费的时间较多。一些例子是基于案例的推理和KNN算法。

急切学习方法(积极学习方法)

在获得测试数据集之前,急切学习方法使用训练数据集构建分类模型。他们花费更多的时间学习,而花费更少的时间预测。一些例子是ANN、朴素贝叶斯和决策树。

机器学习中的四种分类任务

在深入探讨机器学习中的四种分类任务之前,让我们先讨论分类预测建模。

分类预测建模

机器学习中的分类问题是指针对特定输入数据示例预测类标签的问题。

分类问题包括以下内容:

  • 给出一个示例并指示它是否为垃圾邮件。
  • 将手写字符识别为已识别的字符之一。
  • 确定是否将当前用户行为标记为流失。
  • 建模方面需要具有大量输入和输出示例的训练数据集。

模型将使用训练数据集确定将输入数据样本映射到某些类标签的最佳方式。因此,训练数据集必须包含每个类标签的大量样本,并且适当代表问题。

在向建模算法提供类标签时,必须首先将字符串值(如“垃圾邮件”或“非垃圾邮件”)转换为数值。常用的标签编码为每个类标签分配一个不同的整数,例如“垃圾邮件”= 0,“非垃圾邮件”= 1。

分类建模问题有许多算法类型,包括预测建模和分类。

根据它们的输出,评估分类预测建模算法。基于预测类标签的分类准确率是评估模型性能的常见统计数据。虽然不是完美的,但分类准确率对于许多分类任务来说是一个合理的起点。

一些任务可能需要为每个示例预测类成员概率,而不是类标签。这增加了预测的不确定性。ROC曲线是评估预期概率的常用诊断方法。

以下是机器学习中的四种不同类型的分类任务:

  1. 二元分类
  2. 多类别分类
  3. 多标签分类
  4. 不平衡分类

现在,让我们详细看一下它们。

二元分类 - Binary Classification

只有两个类别标签的分类任务被称为二元分类。

例如:

  • 转化预测(购买或不购买)。
  • 流失预测(流失或不流失)。
  • 垃圾邮件检测(垃圾邮件或非垃圾邮件)。

二元分类问题通常需要两个类别,一个代表正常状态,另一个代表异常状态。

例如,正常状态是“非垃圾邮件”,而异常状态是“垃圾邮件”。另一个例子是当涉及到医学测试的任务具有“未检测到癌症”的正常状态和“检测到癌症”的异常状态时。

类别标签0赋予正常状态的类别,而类别标签1赋予异常状态的类别。

通常使用预测每个样本的伯努利概率分布的模型来对二分类任务进行建模。

称为伯努利分布的离散概率分布处理事件有二进制结果0或1的情况。在分类方面,这意味着模型预测示例将属于类别1或异常状态的可能性。

以下是众所周知的二元分类算法:

  • 逻辑回归。
  • 支持向量机。
  • 简单贝叶斯。
  • 决策树。

有些算法,如支持向量机和逻辑回归,是专门为二元分类而创建的,不支持多于两个类。

多类分类 - Multi-Class Classification

多类分类是指具有两个以上类别标签的分类任务

例如:

  • 人脸分类。
  • 分类植物物种。
  • 使用光学进行字符识别。

与二元分类相比,多类分类没有正常和异常结果的概念。相反,实例被分组到几个类别之一中。

在某些情况下,类别标签的数量可能相当高。例如,在面部识别系统中,模型可能会预测拍摄属于成千上万张面孔之一。

涉及预测单词序列的问题,例如文本翻译模型,也可以视为一种特殊类型的多类别分类。要预测的单词序列中的每个单词都涉及一个多类别分类,其中词汇的大小定义了可以预测的类别数量,其大小可能是成千上万个单词。

多类分类任务经常使用预测每个示例的多项式概率分布的模型进行建模。

多项式分布涉及具有分类结果的分类事件,例如1,2,3,…,K中的K。在分类方面,这意味着模型预测给定示例将属于某个类别标签的可能性。

对于多类分类,许多二元分类技术是适用的。

以下是可用于多类分类的知名算法:

  • 渐进式提升。
  • 决策树。
  • 最近的K个邻居。
  • 粗糙森林。
  • 简单贝叶斯。

可以使用为二元分类创建的算法来解决多类分类问题。

为此,使用称为“一对多”或“每对类别一个模型”的方法,其中包括拟合多个二元分类模型,其中每个类别与所有其他类别(称为一对多)相对应。

一对一:为每对类别拟合单个二元分类模型。

以下二元分类算法可以应用这些多类分类技术:

一对多:为每个类别与所有其他类别拟合单个二元分类模型。

以下二元分类算法可以应用这些多类分类技术:

  • 支持向量机。
  • 逻辑回归。

多标签分类 - Multi-Label Classification

多标签分类是指具有两个或以上分类标签的分类任务,其中每个样本可以预测为一个或多个类别。

以照片分类为例。在这里,模型可以预测照片中存在许多已知的物体,例如“人”,“苹果”,“自行车”等。特定的照片可能在场景中有多个物体。

这与多类分类和二元分类形成了鲜明的对比,后者预测每个出现的单个类标签。

多标签分类问题通常使用预测多个结果的模型进行建模,每个结果都被预测为伯努利概率分布。实质上,这种方法为每个示例预测了几个二元分类。

不可能直接应用于多类或二元分类中使用的多标签分类方法。所谓的算法的多标签版本是传统分类算法的专门版本,包括:

  • 多标签梯度提升
  • 多标签随机森林
  • 多标签决策树

另一种策略是使用不同的分类算法预测类标签。

不平衡分类 - Imbalanced Classification

不平衡分类是指其中每个类别中的示例数不均匀分布的分类任务。大多数训练数据集的实例属于正常类别,而少数属于异常类别,使得不平衡分类任务通常是二元分类任务。

例如:

  • 临床诊断程序。
  • 异常值检测。
  • 欺诈调查。

虽然可能需要独特的方法,但这些问题被建模为二元分类任务。

可以使用专门的策略来改变训练数据集中样本组成,例如过采样少数类或欠采样多数类。

例如:

  • SMOTE过采样。
  • 随机欠采样。

可以使用专门的建模技术,例如成本敏感的机器学习算法,在拟合训练数据集的模型时更多地考虑少数类。

例如:

  • 成本敏感支持向量机。
  • 成本敏感决策树。
  • 成本敏感逻辑回归。

由于报告分类准确度可能会具有误导性,因此可能需要使用替代性能指标。

例如:

  • F-Measure。
  • 召回率。
  • 精度。

常见分类算法

根据你所处理的数据集,你可以应用许多不同的分类方法。这是因为统计学中的分类研究非常广泛。以下是前五种机器学习算法:

1. 逻辑回归

它是一种监督学习分类算法,可以预测目标变量的可能性。只会有两个类别之间的选择。数据可以编码为1或yes,表示成功,或者0或no,表示失败。使用逻辑回归可以最有效地预测因变量。当预测是分类的,比如真或假,是或否,或0或1时,你可以使用它。逻辑回归可以用来确定一封电子邮件是否是垃圾邮件。

2. 朴素贝叶斯算法

朴素贝叶斯算法可以确定一个数据点是否属于特定类别。它可以用于对文本分析中的短语或单词进行分类,判断它们是否属于预定的分类。

TextTag
“一场伟大的游戏”体育
“选举结束了”不是体育
“多么高分数”体育
“一场难忘的游戏”体育

3. K-最近邻算法

K-最近邻算法是根据数据点最接近的那些点所属的群组来计算数据点加入哪个群组的可能性。在使用K-最近邻算法进行分类时,可以根据最近的邻居来确定数据的分类。

4. 决策树算法

决策树算法可以解决回归和分类问题,但在分类问题方面表现出色。类似于流程图,它将数据点一次分为两个相似的组,从“树干”开始,穿过“分支”和“叶子”,直到类别之间更密切相关。

5. 随机森林算法

随机森林算法是决策树算法的扩展,首先使用训练数据创建多个决策树,然后将新数据适配到其中一个“树”作为“随机森林”。它根据数据的规模将数据平均连接到最近的树数据上。这些模型非常适合解决决策树强制将数据点不必要地归为一类的问题。

6. 支持向量机算法

支持向量机是一种流行的监督机器学习算法,适用于分类和回归问题。它通过使用算法根据极性对数据进行分类和训练,超越了X/Y预测。

常用分类器

分类器是一种机器学习算法,用于将数据分为不同的类别或标签。它通过学习输入数据的特征来预测新数据的类别。分类器可以应用于各种领域,如图像识别、自然语言处理、金融风险评估等。常见的分类器包括朴素贝叶斯分类器、支持向量机、决策树、神经网络等。

朴素贝叶斯

朴素贝叶斯假设数据集中的预测变量是独立的。这意味着它假设特征之间没有关联。例如,如果给定一个香蕉,分类器将会看到这个水果是黄色的、长而且尖,所有这些特征将独立地对它是不是香蕉的概率做出贡献,并且它们不依赖于彼此。朴素贝叶斯基于贝叶斯定理,该定理如下:

image-20230508215220246

其中:

  • P(A | B) = 在B发生的情况下A发生的频率
  • P(A) = A发生的可能性
  • P(B) = B发生的可能性
  • P(B | A) = 在A发生的情况下B发生的频率

决策树

决策树是一种用于可视化决策的算法。通过提出一个是/否问题并将答案分裂为其他决策,可以构建决策树。问题在节点上,结果的决策在叶子下方。下面的树用于决定我们是否可以打网球。

image-20230508215237560

在上图中,根据天气条件、湿度和风速,我们可以系统地决定是否应该打网球。在决策树中,所有错误的语句位于树的左侧,而正确的语句则分支到右侧。知道这一点,我们可以制作一个树,将特征放在节点上,将结果分类放在叶子上。

K最近邻算法

K近邻算法是一种分类和预测算法,它基于数据点之间的距离将数据分成类别。K近邻算法假设彼此相近的数据点必须是相似的,因此,要分类的数据点将与最接近的聚类组合在一起。

image-20230506202529617

评估分类模型

在我们的模型完成后,我们必须评估其性能以确定它是回归模型还是分类模型。因此,我们有以下选项来评估分类模型:

1. 混淆矩阵

混淆矩阵(Confusion Matrix),也称误差矩阵(Error Matrix),是用于评估分类模型性能的一种矩阵。它是一个二维矩阵,其中行代表实际类别,列代表预测类别。在混淆矩阵中,每个元素表示在实际类别和预测类别之间的匹配情况,即分类器预测正确和错误的情况。

混淆矩阵的四个元素分别为:

真正例(True Positive,TP):实际类别为正例,预测类别也为正例。

假负例(False Negative,FN):实际类别为正例,预测类别为负例。

假正例(False Positive,FP):实际类别为负例,预测类别为正例。

真负例(True Negative,TN):实际类别为负例,预测类别也为负例。

混淆矩阵可以用于计算分类模型的准确率、召回率、F1值等指标,从而对分类模型的性能进行评估和优化。

2. Log Loss 或交叉熵损失函数

Log Loss 或交叉熵损失函数用于评估分类器的性能,输出结果是介于 1 和 0 之间的概率值。

具体来说,对于一个二分类问题,Log Loss 可以定义为:

− 1 N ∑ i = 1 N ( y i log ⁡ ( p i ) + ( 1 − y i ) log ⁡ ( 1 − p i ) ) -\frac{1}{N}\sum_{i=1}^{N}(y_i\log(p_i)+(1-y_i)\log(1-p_i)) N1i=1N(yilog(pi)+(1yi)log(1pi))

其中, N N N 是样本数量, y i y_i yi 是第 i i i 个样本的真实标签(0 或 1), p i p_i pi 是模型预测该样本为正类的概率。

Log Loss 的值越小,表示模型的性能越好。当模型的预测结果与真实标签完全一致时,Log Loss 的值为 0。当模型的预测结果与真实标签完全相反时,Log Loss 的值为无穷大。

Log Loss 在深度学习中经常被用作分类问题的损失函数,特别是在二分类问题中。它的优点是能够对预测概率进行连续性建模,从而更好地反映模型的性能。

3. AUC-ROC 曲线

AUC-ROC曲线是评估分类模型性能的一种常用方法,它是指在二分类问题中,绘制出真阳性率(TPR)与假阳性率(FPR)之间的关系曲线。其中,TPR是指真正例被正确分类的比例,即TPR=TP/(TP+FN),其中TP表示真正例的个数,FN表示假反例的个数;而FPR是指假正例被错误分类的比例,即FPR=FP/(FP+TN),其中FP表示假正例的个数,TN表示真反例的个数。

AUC-ROC曲线的面积(AUC)越接近1,说明模型的性能越好;而AUC越接近0.5,说明模型的性能越差,相当于随机猜测。因此,AUC-ROC曲线是评估分类模型性能的重要指标之一,可以用于比较不同模型的性能,选择最优模型。

分类算法的应用场景

分类算法有许多应用场景,以下是其中的一些:

  • 语音识别
  • 垃圾邮件检测
  • 药物分类
  • 癌症肿瘤细胞识别
  • 生物识别等

分类器评估

在分类器完成后,验证分类器的准确性和有效性是最关键的一步。我们可以用多种方式来评估分类器。让我们从交叉验证开始,看看下面列出的这些技术。

交叉验证

交叉验证是一种常用的分类器评估方法,它将数据集分成许多个子集,每次使用其中一个子集作为测试集,其他子集作为训练集。这样可以避免对某一特定的数据集过拟合,提高了分类器的泛化能力。

常见的交叉验证方法包括k折交叉验证和留一交叉验证。k折交叉验证将数据集分成k个子集,每次使用其中一个子集作为测试集,其他子集作为训练集。留一交叉验证是k折交叉验证的特殊情况,即将数据集分成n个子集,每次使用其中一个样本作为测试集,其他样本作为训练集。

交叉验证可以用来评估分类器的性能,比如准确率、精确率、召回率和F1值等指标。通过多次交叉验证,可以得到分类器的平均性能指标,从而更加准确地评估分类器的性能。

留出法

留出法是一种常用的分类器评估方法,它将数据集划分为训练集和测试集两部分,其中训练集用于训练分类器,测试集用于评估分类器的性能。每个集合分别包含总数据的20%和80%。

具体步骤如下:

  1. 将原始数据集随机划分为训练集和测试集,通常采用70%的数据作为训练集,30%的数据作为测试集。

  2. 在训练集上训练分类器,得到分类模型。

  3. 在测试集上测试分类器的性能,通常采用准确率、精确率、召回率、F1值等指标来评估分类器的性能。

  4. 重复上述步骤多次,取平均值作为最终的评估结果。

留出法的优点是简单易行,适用于数据量较小的情况,但也存在一些缺点,如划分不合理可能导致评估结果不准确,同时训练集和测试集的划分可能会影响评估结果的稳定性。

ROC曲线

ROC曲线是一种用于评估分类器性能的图形化工具。ROC曲线的横轴是假正率(False Positive Rate),纵轴是真正率(True Positive Rate),其中:

  • 假正率是指实际为负样本但被分类器错误地判定为正样本的样本数占所有实际为负样本的样本数的比例;
  • 真正率是指实际为正样本且被分类器正确地判定为正样本的样本数占所有实际为正样本的样本数的比例。

ROC曲线的绘制过程是:对于不同的分类阈值,计算出对应的假正率和真正率,然后将这些点连接起来形成曲线。ROC曲线越靠近左上角,代表分类器的性能越好,因为此时假正率较低而真正率较高。

ROC曲线的面积(Area Under Curve,简称AUC)可以用来衡量分类器的整体性能。AUC越大,代表分类器的性能越好。当AUC等于0.5时,代表分类器的性能等同于随机猜测,没有任何预测能力。

偏差

是指评估方法本身的缺陷或限制,导致评估结果与实际情况存在一定的偏差。常见的偏差包括:

偏差是实际值和预测值之间的差异。偏差是模型对数据进行预测的简单假设。它直接对应于我们数据中发现的模式。当偏差高时,模型所做的假设过于基础,无法捕捉我们数据的重要特征,这称为欠拟合。

方差

我们可以将方差定义为模型对数据波动的敏感度。我们的模型可能会从噪声中学习,这会导致模型将无关紧要的特征视为重要。当方差很高时,我们的模型将捕捉到所给定数据的所有特征,会自我调整到数据上,并能够很好地进行预测,但是新数据可能没有完全相同的特征,模型就无法很好地进行预测。我们称之为过度拟合。

精度和召回率

精度(precision)指分类器正确预测为正样本的样本数占所有预测为正样本的样本数的比例。即:

精度 = 正确预测为正样本的样本数 / 所有预测为正样本的样本数

召回率(recall)指分类器正确预测为正样本的样本数占所有实际为正样本的样本数的比例。即:

召回率 = 正确预测为正样本的样本数 / 所有实际为正样本的样本数

在分类任务中,精度和召回率往往是相互矛盾的。如果一个分类器将所有样本都预测为正样本,则召回率为100%,但精度很低;如果一个分类器只预测一小部分样本为正样本,则精度很高,但召回率很低。因此,需要综合考虑精度和召回率,通常使用F1值作为评价指标。F1值是精度和召回率的调和平均数,即:

F1 = 2 * 精度 * 召回率 / (精度 + 召回率)

F1值越高,分类器的性能越好。

选择合适的算法

除了上述策略之外,我们还可以应用以下程序来选择模型的最优算法。

  1. 根据我们的自变量和因变量特征,创建自变量和因变量数据集。
  2. 为数据创建训练集和测试集。
  3. 利用多种算法来训练模型,包括SVM,决策树,KNN等。
  4. 考虑分类器。
  5. 决定最准确的分类器。
  6. 准确性是使模型高效的最佳路径,即使选择模型的最优算法可能需要更长的时间。

常见问题

  1. 什么是分类算法?能否举个例子?
    分类算法是指预测特定输入数据示例的类别标签。例如,它可以识别某个代码是否为垃圾邮件,可以对手写字母进行分类。
  2. 哪种分类算法最好?
    与逻辑回归、支持向量机和决策回归等其他分类算法相比,朴素贝叶斯分类器算法能够产生更好的结果。
  3. 最简单的分类算法是什么?
    最简单的分类技术之一是kNN。
  4. 什么是分类和分类的类型?
    分类是将对象分组或分类到系统中的类别或分区。你可以遇到以下四种分类任务类别:二元分类、多类分类、多标签分类和不平衡分类。
  5. 分类和聚类之间有什么区别?
    聚类的目标是通过考虑最令人满意的标准来将相似类型的项目分组,该标准规定同一组中的任何两个项目都不应该可比较。这与分类不同,分类的目标是预测目标类。

知识普及-算法和模型

算法和模型是机器学习中两个重要的概念,它们有以下区别:

  1. 定义:算法是一组指令或步骤,用于解决特定问题的计算方法。而模型是用于描述和预测数据的数学表达式或函数。
  2. 目的:算法的目的是通过数据处理和分析来解决问题,而模型的目的是预测或描述数据的行为。
  3. 实现:算法通常是一个程序或函数,可以直接应用于数据,而模型通常需要在训练数据上进行训练和优化,然后才能应用于新数据。
  4. 范围:算法可以是通用的,也可以是特定领域的,而模型通常是针对特定问题或领域设计的。

举例说明:

举例来说,决策树算法是一种用于分类和预测的算法,它使用一系列的规则和条件来判断输入数据的类别。而决策树模型则是一个基于决策树算法创建的预测函数,它可以将新的输入数据映射到正确的类别中。

另一个例子是线性回归算法,它用于预测连续的数值输出。线性回归模型则是一个基于线性回归算法创建的数学函数,它可以预测输入数据的输出值。

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

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

相关文章

Shell编程循环语句(for、while、until)

目录 一、for 循环 1.用法和特点 2.执行指定次数 3.遍历和迭代 (1)遍历 (2)迭代 4.操作实例 二、 while 循环 1.用法和特点 2.操作实例 三、until 循环 1.用法和特点 2.操作实例 一、for 循环 1.用法和特点 读取不…

【动态规划专栏】-- 01 背包问题 -- 动态规划经典题型

目录 背包问题概述 01 背包问题 01背包⭐⭐ 【算法原理】 第一问 第二问 C 算法代码 复杂度分析 【空间优化 - 滚动数组】 C 算法代码 复杂度分析 分割等和子集⭐⭐ 【算法原理】 对于类01背包问题 C 算法代码 【空间优化 - 滚动数组】 C 算法代码 目标和…

常见网络服务器并发模型

近些年,随着互联网的大发展,高并发服务器技术也快速进步,从简单的循环服务器模型处理少量网络并发请求,演进到解决C10K,C10M问题的高并发服务器模型。本文主要以TCP为例,总结了几种常见的网络服务器模型的实…

Java注解的入门学习

一、概念 Java注解是一种元数据形式,可以被添加到Java代码中的各种元素(类、方法、字段等)上,以提供关于这些元素的额外信息。注解是在Java 5中引入的一项特性,它们不直接影响代码的执行,而是提供了一种机…

本周大新闻|Vision Pro头显重磅发布;苹果收购AR厂商Mira

本周XR大新闻,上周Quest 3发布之后,本周苹果MR头显Vision Pro正式发布,也是本周AR/VR新闻的重头戏。 ​AR方面,苹果发布VST头显Vision Pro(虽然本质是台VR,但以AR场景为核心)以及visionOS&…

【三、网络配置与系统管理】

1 网络配置 ifconfig 显示网络接口的配置信息 [rootredis100 ~]# ifconfig ens33: flags4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.10.100 netmask 255.255.255.0 broadcast 192.168.10.255inet6 fe80::f5c3:6a96:fe05:1965 prefixlen 64 scop…

如何使用Docker实现分布式Web自动化!

1、前言 顺着docker的发展&#xff0c;很多测试的同学也已经在测试工作上使用docker作为环境基础去进行一些自动化测试&#xff0c;这篇文章主要讲述在docker中使用浏览器进行自动化测试如果可以实现可视化&#xff0c;同时可以对浏览器进行相关的操作。 如果你想学习自动化测…

畅聊趣坊项目测试报告

文章目录 项目背景项目功能测试计划与设计功能测试自动化测试 测试结果功能测试结果UI自动化测试结果 项目背景 在浏览网站时&#xff0c;发现好多网站开放出聊天的窗口&#xff0c;我们一发送消息就会收到一条消息&#xff0c;好奇这个功能是怎么实现的&#xff0c;最后查阅资…

cmake 基本使用

目录 CMake都有什么? 使用cmake一般流程为&#xff1a; 1 生成构建系统 使用命令在build外编译代码: cmake基本语法 指定使用最低版本的cmake 指定项目名称 指定生成目标文件的名称 指定C版本 cmake配置文件使用 cmake配置文件生成头文件 版本号定义方法一: 版本号定…

《操作系统》by李治军 | 实验6 - 信号量的实现和应用

目录 一、实验目的 二、实验内容 &#xff08;一&#xff09;用信号量解决生产者—消费者问题 &#xff08;二&#xff09;实现信号量&#xff0c;用生产者—消费者程序检验 三、实验准备 1、信号量 2、多进程共享文件 3、终端也是临界资源 4、原子操作、睡眠和唤醒 …

C++中string类的常用函数

文章目录 默认成员函数常见构造函数(constructor) string类的容量操作size()empty()capacity()reserve()clear()resize() string类对象的访问及遍历操作重载 [ ]begin()end()begin() end() 遍历字符串rbegin()rend()rbegin() rend()反向遍历字符串C11范围for string类对象修改…

广域网技术——ppp,pppoe

目录 PPP协议概述 PPP协议原理 PPP协议三大组件&#xff1a; PPP链路建立流程 PPP连接建立接口状态&#xff1a; LCP协议报文格式 PPP协议报文格式&#xff1a; 1&#xff0c;链路层建立连接过程 LCP协商过程-正常协商 LCP协商-参数不一致 LCP协商-参数不识别 2&#xf…

YOLOv5/v7 添加注意力机制,30多种模块分析③,GCN模块,DAN模块

目录 一、注意力机制介绍1、什么是注意力机制&#xff1f;2、注意力机制的分类3、注意力机制的核心 二、GCN 模块1、GCN 模块的原理2、实验结果3、应用示例 三、DAN模块1、DAN模块的原理2、实验结果3、应用示例 大家好&#xff0c;我是哪吒。 &#x1f3c6;本文收录于&#xf…

AMC12和高考数学哪个更难?知识点有哪些不同?

AMC12和高考数学哪个更难&#xff1f;知识点有哪些不同&#xff1f;今天小编给大家来详细介绍一下&#xff01; 难度对比 从难度上看&#xff0c;高考数学的计算量更大&#xff0c;并且知识点比AMC10/12超前&#xff0c;需要用到极限和微积分的知识。 反观AMC10/12不需要用到…

数据结构与算法之美 | 栈

栈结构&#xff1a;后进者先出&#xff0c;先进者后出 栈是一种“操作受限”的线性表 当某个数据集合只涉及在一端插入和删除数据&#xff0c;并且满足后进先出、先进后出的特性&#xff0c;这时我们就应该首选“栈”这种数据结构 栈的实现 使用数组实现&#xff1a;顺序栈…

初探图神经网络——GNN

title: 图神经网络(GNN) date: tags: 随笔知识点 categories:[学习笔记] 初探图神经网络(GNN) 文章来源&#xff1a;https://distill.pub/2021/gnn-intro/ 前言&#xff1a;说一下为什么要写这篇文章&#xff0c;因为自己最近一直听说“图神经网络”&#xff0c;但是一直不了…

pycharm使用之torch_sparse安装

正式安装之前要先查看一下torch的版本 一、查看torch版本 1、winR &#xff0c;输入cmd 2、输入python 3、 输入import torch&#xff0c;然后输入torch.__version__&#xff0c;最后回车 可以看到我的torch版本是1.10.0 二、下载合适的torch_sparse版本 1、打开链接 https…

接口反应慢优化

遇到某个功能&#xff0c;页面转圈好久&#xff0c;需要优化 1.F12 查看接口时间 2.看参数 总共耗时9.6s Waiting for sercer response 时间是2秒 Content Download 7秒 慢在Content Download F12查看接口响应 显示Failed to load response data:Request content was e…

spark入门 高可用部署HA(五)

一、standalone基于修改部署 https://blog.csdn.net/weixin_43205308/article/details/131070277?spm1001.2014.3001.5501 二、安装ZOOKEEPER zookeeper 安装下载与集群 三、修改conf下的spark-env.sh vim conf/spark-env.sh注释以下内容&#xff08;根据自己环境修改&am…

visual studio 2022,ADO.NET 实体数据模型添加 sqlite数据库对象

文章目录 前言前期环境博客github 文档解析文件安装说明文件下载省流版nuget环境配置成功标志sqlite连接测试 前言 我们知道ADO.NET 实体数据模型特别适合动态开发数据库。因为ADO.NET可以使用DB First 开发 我们在开发一个程序的时候&#xff0c;经常会动态更新数据库字段&a…