万字长文 - Nature 综述系列 - 给生物学家的机器学习指南 1

66fb871eb6cc4dfca7ea579ddbb07d53.png

生物数据的规模不断扩大和固有复杂性促使越来越多的人在生物学中使用机器学习来构建相关生物过程的信息和预测模型。所有机器学习技术都是把数据拟合到模型,然而,具体方法千差万别,乍一看似乎令人困惑。在这篇综述中,我们旨在向读者简单介绍一些关键的机器学习技术,包括最近开发和广泛使用的涉及深度神经网络的技术。我们描述了不同的技术如何适用于特定类型的生物数据,并讨论了在进行涉及机器学习的实验时需要考虑的一些最佳实践和要点。另外还讨论了机器学习方法的一些新方向

人类通过观察周围的世界并学会预测接下来可能发生的事情来了解周围的世界。考虑一个正在学习接球的孩子:这个孩子(通常)对控制抛掷出去的球的运动的物理规律一无所知;然而,通过观察、尝试和试错的过程,孩子会调整他或她对球运动规律的理解,以及如何移动自己的身体,直到他或她能够接住球。换句话说,孩子通过对接球的过程建立了一个足够准确和有用的“模型”,根据数据反复测试这个模型,并对模型进行修正,使其变得更好,最终学会了如何接球。

机器学习”泛指将数据拟合构建预测模型或识别数据中的信息分组的过程。机器学习实际上通过计算的方式尝试接近或模拟人识别模式的能力。当人们希望分析的数据集对于人类来说太大(包含许多独立的数据点)或太复杂(包含大量特征)时,或当希望建立可复现的和时间高效的分析流程来自动化数据分析过程时,机器学习尤其有用。生物实验数据通常具有这些特征;在过去的几十年中,生物数据集的规模和复杂性都有了巨大的增长,不仅要有一些实用的方法来理解这些数据的丰富性,而且要对所使用的技术有一个良好的理解,这一点变得越来越重要。机器学习已经在生物学中使用了几十年,但它的重要性稳步增长以至于几乎在生物学的每个领域都有应用。然而,只有在过去几年里,该领域才对现有的方法进行了更为严格的审视,并开始评估哪些方法在不同的场景中最为合适,甚至是是否合适

这篇综述旨在告知生物学家如何开始理解和使用机器学习技术。我们不打算对使用机器学习解决生物问题的文章进行全面的文献综述,也不打算描述各种机器学习方法的详细数学原理。相反,我们专注于将特定技术与不同类型的生物数据联系起来(具体的生物学科也有类似的综述;例如,参见参考文献4-11)。我们还试图提炼出一些关于如何训练和改进模型的最佳实践。生物数据的复杂性使得机器学习分析有了用武之地但也要注意里面的问题陷阱。为了解决这些问题,我们讨论了影响研究有效性的普遍因素,并为如何避免这些因素的影响提供了指导。《综述》的大部分内容致力于描述一系列机器学习技术,并以案例的形式展示了该技术如何正确应用以及如何解释结果。涉及的方法包括传统的机器学习方法,因为这些方法在许多情况下仍然是最佳选择,以及使用人工神经网络的深度学习,这些方法正在成为许多任务的最有效方法。最后,我们描述了将机器学习纳入生物学数据分析流程的未来。

在生物学中使用机器学习有两个目标。其中一个是在缺乏实验数据的时候做出准确的预测,并利用这些预测来指导未来的研究工作。然而,作为科学家,我们寻求了解世界,因此第二个目标是使用机器学习来加深我们对生物学的理解。在本指南中,我们讨论了这两个目标在机器学习中如何经常发生冲突,以及如何从经常被视为“黑匣子”的模型中获得合理的解释,因为它们的内部工作很难理解。

关键的概念

我们首先介绍机器学习中的一些关键概念。在可能的情况下,我们用生物文献中的例子来说明这些概念。

通用术语。一个数据集包含多个数据点或实例,每个数据点或实例都可以看作是一个实验中的单个观察结果。每个数据点(通常)都由固定数量的特征描述,比如长度、时间、浓度和基因表达水平。机器学习任务是我们希望机器学习模型完成的目标指向。例如,在一项研究基因随时间表达的实验中,我们可能希望预测特定代谢产物转化为另一种产物的速率。在这种情况下,特征“基因表达水平”和“时间”可以称为输入特征或模型的简单输入,“转换率”将是模型的期望输出;也就是我们有兴趣预测的数量。模型可以具有任意数量的输入和输出特征。特征可以是连续的(采用连续数值)或分类的(仅采用离散值)。通常情况下,分类特征是简单的二进制,要么为真(1),要么为假(0)。

有监督和无监督的学习。“有监督的机器学习”是指将模型与已标记的数据(或数据子集)进行拟合,其中存在一些标签数据通常由人类通过实验测量或人为定义的。

Ground truth基准真相,它是指相对于新的测量方式得到的测量值,作为基准的,由已有的、可靠的测量方式得到的测量值(即经验证据)。在机器学习中借用了这一概念。

使用训练所得模型对样本进行预测的过程,可以当做是一种广义上的测量行为。因此,在有监督学习中,ground truth 通常指代样本集中的标签。例如蛋白质二级结构预测和基因组调控元件的可及性的预测。在这两种情况下,基本标记数据都来自实验室检测,但通常这些原始数据以某种方式进行预处理。例如,在二级结构的情况下,基本标记数据来自分析PDB蛋白质数据库中的蛋白质晶体结构数据;在后一种情况下,基本标记数据来自DNA测序实验的数据。相比之下,无监督学习方法能够识别未标记数据中的模式,而无需以预定标签的形式向系统提供基本标记信息,例如在基因表达研究中发现具有相似表达水平的患者子集或预测来自基因序列相关变异的突变效应。有时,这两种方法可以结合在半监督学习中,其中少量标记数据与大量未标记数据相结合。在标记数据获取成本高昂的情况下,这可以提高性能。

分类、回归和聚类问题。当问题涉及将数据点分配给一组离散分组(例如,“癌症”或“非癌症”)时,该问题被称为“分类问题”,并且执行这种分类的任何算法都可以称为分类器。相比之下,回归模型输出一组连续的值,例如预测蛋白质中残基突变后折叠自由能的变化。连续值可以被设置分割阈值或以其他方式离散化,这意味着通常可以将回归问题重新表述为分类问题。例如,上面提到的自由能变化可以被分类为使蛋白质稳定或不稳定的离散值。聚类方法用于预测数据集中属性相近的数据点的分组,并且通常基于数据点属性之间的某种相似性度量。它们是无监督的方法,不需要数据集中的示例数据有标签。例如,在基因表达研究中,聚类可以找到具有相似基因表达图谱的患者子集。

类和标签。分类器返回的离散值集可以是互斥的,在这种情况下,它们被称为“类”。如果这些值不需要互斥,则称为“标签”。例如,蛋白质结构中的一个残基只能属于多个二级结构类别中的一种,但可以同时被赋予α-螺旋和跨膜结构的多个非排他性标记。类和标签通常由编码表示(例如,独热码one- hot encoding: 是一种将分类变量转换为多个二进制列的方法,用 0, 1 值代表某个样本所属的分类或具有的特征。)。

损失或成本(代价)函数。一个机器学习模型的一个或多个输出永远都不理想,其结果会偏离实际检测值。衡量这种偏差的数学函数,或者更一般地说,衡量所获得的输出与理想输出之间“不一致”程度的数学函数称为“损失函数”或“成本函数”。在监督学习设置中,损失函数将是预测标签相比于实际标签的偏差的度量,比如回归问题的均方误差损失和分类问题的二元交叉熵损失函数。

参数和超参数。模型本质上是数学函数,它对一组输入特征进行运算,并产生一个或多个输出值或特征。为了能够学习训练数据,模型包含可调整参数,其值可以在训练过程中不断更新,以实现模型的最佳性能(见下文)。例如,在一个简单的回归模型中,每个特征都有一个与其特征值的相乘的参数,然后将这些乘积相加以进行预测。训练模型就是为了获得这些参数。  超参数是不属于模型本身的可调整值,因为它们在训练期间不会更新,但仍会对模型的训练及其性能产生影响,如随机森林中训练每棵树的变量数是多少就是一个超参。(一套完整的基于随机森林的机器学习流程(特征选择、交叉验证、模型评估)))

训练、验证和测试。在用于进行预测之前,模型需要进行训练,这包括自动调整模型的参数以提高其性能。在有监督的学习设置中,这涉及修改参数,以便通过最小化损失或成本函数的平均值(如前所述),使模型在训练数据集上表现良好。通常,需要使用单独的验证数据集来监控但不影响训练过程,以便检测潜在的过拟合事件(见下一节)。在无监督的环境中,成本函数仍然需要最小化,尽管它不基于标签数据。一旦模型被训练,就可以在未用于训练模型的测试集进行测试。有关模型训练的整个过程以及如何在分割训练集和测试集的指南,请参见方框1。图1展示了整个过程的流程图,图2中表示了模型训练中的一些概念。

过拟合和欠拟合。基于训练数据拟合模型的目的是捕捉数据中变量之间的“真实”关系,从而使模型对未知(非训练)数据具有预测能力。过拟合或欠拟合的模型将对非训练集数据产生较差的预测结果(图2d)。过拟合的模型在训练集数据上能获得优秀的结果(通常是由于参数太多),但在新提供的数据上会产生较差的结果。图2d中的过拟合模型正好通过每个训练点,因此其在训练集上的预测误差将为零。然而,很明显,该模型已经“记忆”了训练数据,并且不太可能在未看到的数据上产生好的结果。相比之下,欠拟合的模型无法充分捕捉数据中变量之间的关系。这可能是由于模型类型选择不正确、对数据的假设不完整或不正确、模型中的参数太少和/或训练过程不完整。图2d所示的欠拟合模型对于其试图拟合的数据而言是不充分的;在这种情况下,很明显变量具有非线性关系,这不能用简单的线性模型来充分描述,因此非线性模型将更合适。

归纳偏置 (Inductive bias)和偏差-方差平衡 (bias–variance trade-off)。模型的“归纳偏差”是指在机器学习算法中所做的一组假设,这些假设导致机器学习算法倾向于某个特定解决方案 (如K-近邻中假设特征空间中相似的样本倾向于属于同一类;支持向量机SVM 中假设好的分类器应该最大化类别边界距离)。它可以被认为是模型对特定类型问题解决方案的一种偏好。这种偏好通常使用其特定的数学形式和/或通过使用特定的损失函数编程到模型中。例如,循环神经网络(RNN;稍后讨论)的归纳偏置是输入数据中存在顺序依赖性,例如代谢物浓度随时间的变化。这种依赖性在RNN的数学形式中得到了明确的解释。不同模型的不同归纳偏置使其在特定类型的数据上表现更好。另一个重要的概念是偏差和方差之间的平衡(bias–variance trade-off) (Bias注重对整体模型均值的把控,Variance注重个体差异的把控)。具有高偏差的模型可以说对训练的模型具有更强的约束,而具有低偏差的模型对所训练模型的属性的假设更少,理论上可以对多种函数类型进行建模。模型的方差描述了在不同的训练集上训练后获得的训练模型的变化程度。一般来说,我们希望模型具有非常低的偏差和低的方差,尽管这些目标经常发生冲突,因为具有低偏差的模型通常会在不同的训练集上学习到不同的关系。控制偏差-方差平衡是避免过拟合或欠拟合的关键。

Box 1 这里,我们概述了训练机器学习模型时应采取的步骤。关于模型选择和训练过程,可获得的指导相对较少,已发表的研究文章中很少提及其中的关键步骤和失败的模型。在编写任何机器学习代码之前,第一步应该是充分了解手头的数据(输入)和预测任务(输出)。这意味着需要对问题有生物学上的理解,例如了解数据的来源和噪声来源,以及从生物学原理上理解如何从输入预测输出。

例如,可以推理出不同的氨基酸可能对蛋白质中的特定二级结构有偏好,因此可以根据蛋白质序列中每个位置的氨基酸频率来预测二级结构。了解输入和输出在计算机中如何存储也很重要。它们是否经过归一化处理,以防止某个特征对预测产生过大的影响?它们是以二进制变量还是连续变量进行编码的?是否存在重复条目?是否有缺失的数据元素?

接下来,应该将数据划分以进行训练、验证和测试。有很多方法可以实现这一点,其中有两种方法如图2a所示。训练集用于直接更新正在训练的模型的参数。验证集通常约占可用数据的10%,用于监控训练、选择超参数以及防止模型在训练数据上发生过拟合。通常使用k-fold交叉验证 (机器学习 - 训练集、验证集、测试集):将训练集分为k个大小相等的分区(例如,五个或十个),形成k个不同的训练和验证集,基于不同的分区组合进行模型训练并评估性能以选择最佳超参数。测试集(有时称为“保留集”)通常也占可用数据的10%,用于评估模型在未用于训练或验证的数据上的性能(即估计其预期的实际应用性能)。测试集应仅在研究最后或尽可能少地使用,以避免调整模型以适应测试集。有关在制定公平测试集时需要考虑的问题,请参阅数据泄漏部分。

下一步是模型选择,这取决于数据的性质和预测任务,并在图1中进行了总结。训练集用于根据所使用的软件框架的最佳实践对模型进行训练。大多数方法都有几个需要调整以实现最佳性能的超参数。这可以通过随机搜索网格搜索来完成,并可以与上述的k-flod交叉验证相结合。还应该考虑模型集成,其中多个相似模型的输出简单地取平均值,以提供相对可靠的方式来提高建模任务的整体准确性。

最后,应评估模型在测试集上(见上文)的准确性。

dc4c2eb4353408add1d91bc186d43faf.png

图1 | 选择和训练机器学习方法。最上面的灰色矩形框流程显示了训练机器学习方法的总体过程。下面给出了一个辅助研究人员选择模型的决策树。该流程图旨在用作链接本综述中概述的概念的视觉指南。然而,像这样的简单概述无法涵盖每一个情况。例如,机器学习适用所需的数据点数量取决于每个数据点可用的特征数量,特征越多,数据点就需要越多,同时也取决于所使用的模型。还有一些深度学习模型可以处理无标签数据。

b850a78bbbb1348f3d9ca5d189d8b072.png

图2 | 训练机器学习方法。a | 可用数据通常被划分为训练集、验证集和测试集。训练集直接用于训练模型,验证集用于监控训练,测试集用于评估模型性能。也可以使用带测试集的k-fold交叉验证。b | 独热码是表示分类输入的常用方法,其中从多个可能性中仅允许选择一个,本例中是三种可能的蛋白质二级结构类别。编码的结果是一个包含三个数值的向量,除了占据的类别被设为1之外,所有数值均等于0。这个向量由机器学习模型使用。c | 采用连续编码表示数值输入,本例中是图像中像素的红、绿、蓝(RGB)值。同样,结果是一个包含三个数值的向量,分别对应像素中的红、绿、蓝。d | 未能学习到变量之间的基本关系称为“欠拟合”,而把训练数据中的噪声都学习到的称为“过拟合”。欠拟合可能是因为使用了复杂度较低的模型造成的。过拟合可能是由于使用参数过多的模型,或者在学习到变量之间真实关系后继续训练造成的。e | 模型的学习率决定了在训练神经网络或一些传统方法(如梯度提升)时,学习参数调整的速度。低学习率可能导致训练速度慢、耗时且需要大量计算能力。相反,高学习率可能导致在非最优解上快速收敛,模型性能较差。f | 提前停止是指在验证集上的损失函数开始增加的时候终止训练,即使训练集上的损失函数仍在减少。使用提前停止可以防止过拟合

深度学习:基于神经网络的机器学习方法。形容词“深度”指的是网络中使用许多隐藏层,最少为两个隐藏层,但通常比这多得多。深度学习是机器学习的一个子集,因此也是更广泛的人工智能的一个子集。(ResNet 152层,GoogleNet 22 层,VGG 19 层, AlexNet 8 层;红色数字表示模型的评估错误率。图片来自台大李宏毅老师的课件。)

4413a219520df2da79aa3445c61bb7c5.png

人工神经网络:一组连接的节点,它们松散地表示生物大脑中神经元的连通性。每个节点都是一个层的一部分,表示从前一层计算出的一个数字。连接或边缘允许信号通过隐藏层从输入层流向输出层。

基准真相:与机器学习模型的输出进行比较以训练模型和测试性能的真实值。这些数据通常来自实验数据(例如,DNA区域对转录因子的可及性)或人类专家的注释(例如健康或病理医学图像)。

编码:以适合用于机器学习模型的形式对(通常是分类)数据进行数字表示的任何方案。编码可以是固定的数字表示(例如,独热码或连续编码),也可以使用与模型其余部分一起训练的参数来定义。

独热码:一种编码方案,使用n个唯一的n维向量表示固定的n个分类输入,每个向量中有一个元素设置为1,其余设置为0。例如,三个字母(A,B,C)可以分别用三个向量[1,0,0],[0,1,0]和[0,0,1]表示。

均方误差:一种损失函数,计算预测值与基准值之间的平均平方差。该函数严重惩罚异常值,因为随着预测值与基准真相之间的差距增大,它会迅速增加。

二元交叉熵:训练二元分类器的最常见损失函数;也就是说,用于回答只有两个选择(如癌症与非癌症)的问题的任务;有时称为“对数损失”。

好书推荐 - 生物学家必备大数据使用计算技巧

面对生物数据的急速增长,对大数据的分析处理能力是生物学家普遍缺乏又急需掌握的能力。本书是在作者开发计算工具和帮助许多生物学家解决计算问题时总结经验的基础上诞生的,是针对生物学家撰写的简明实用教程,它将一系列强大而灵活的实用工具汇集到一起,容易学习入门。本书内容以分子生物信息学数据为主,但也适用于多种其他生物数据的分析工作。本书原版问世至今,一直是欧美高校生物专业和相关研究机构必备的热销图书。

ba1ed5624672d3172dfb2d0bdddeb1db.jpeg

往期精品(点击图片直达文字对应教程)

587b0e6041eca19791e8d1311a0cf3f7.jpeg

cb4f066f443083e249516ca2d8a1ead1.jpeg

23ec94848d6f0548cfb97fda27145b13.jpeg

b55441c0c08a030e8aacea93fc17abed.jpeg

a452e9b96c7e2d84f3ac12a7ab0ae430.jpeg

4b18af28828393b77a93c51e4a678d72.jpeg

07f3bfe5d875404c03ee982dda3571a3.jpeg

7dc6873f7927617fedefab4e2c9dbe84.jpeg

0d62d8e8e0c6a1609911d3040b0c09cc.jpeg

5decb6b3bd9ef88ab2b056ccd8f01807.jpeg

2e63461b0ba8dcaca1bdb44d61769fb4.jpeg

7013a9e60e401c56f0800a27ec538cc4.jpeg

30eb4c7ad8416da2df64810e284a2eba.png

a5e6235daa3c0930be43f9e48bb95af6.png

0aa22f26b826b79de5687cd603261c8a.png

36f6d24ce668588bdc7f335e93d392d8.png

97d1ec5b7108ebb4c6fcdd227b482d07.jpeg

89cbde0e6d93720acd3e5aadf9803bf4.jpeg

9b0292eb60e26f6ebeecb8e7599c32be.jpeg

f2b091120586c03021e7f3a5b3d7b422.jpeg

d909858de588523621fbaeb0fcaed98f.png

d0543442aa14596c2e4b95a5d7588eea.png

8d31f60a12eac5cd384399575c578f66.jpeg

b6d8cd9ac2ad2e226d1a1d64ae720993.png

1d4d02ce02a6bab29de01fa08b5d0081.png

dc7171f78c07f2ca24b83da962472b77.jpeg

fdc09d3f7dfb10fa2bbeddd5ec3587f6.png

1a23c325d97767d0f6d5a67e1e828ac9.png

机器学习

后台回复“生信宝典福利第一波”或点击阅读原文获取教程合集

53fada2901134940d36572868ff6ccb1.jpeg

234172410eb96ccbd1c97dc28cacde80.jpeg

4f683faa95adc575ef4682196bfac5f8.png

f799ba2a1bbfa6f480b4daa6354e829f.png

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

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

相关文章

绩效管理系统有哪些推荐?

绩效管理系统有哪些推荐?市面上的绩效管理系统五花八门,这就来给大家推荐几款优质的! 一、如何选择绩效管理系统 在选择绩效管理系统之前,需要先考虑以下几个问题: 了解你的企业目标和需求:在选择绩效管…

( 栈和队列) 225. 用队列实现栈 ——【Leetcode每日一题】

❓225. 用队列实现栈 难度:简单 请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。 实现 MyStack 类: void push(int x) 将元素 x 压入…

shiro

1 什么是Shiro Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的 API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。 1.2 与Spring Security的对比 Shiro: Shi…

【搭建博客】宝塔面板部署Typecho博客,并发布上线访问

目录 前言 1.安装环境 2.下载Typecho 3.创建站点 4.访问Typecho 5.安装cpolar 6.远程访问Typecho 7.固定远程访问地址 8.配置typecho 前言 Typecho是由type和echo两个词合成的,来自于开发团队的头脑风暴。Typecho基于PHP5开发,支持多种数据库&…

ubuntu22.04安装ROS2

ubuntu22.04安装ROS2 0.前言一、安装ROS21.首先将本地的编码格式修改为utf-82.添加ROS2 GPG key3.安装ROS24.设置环境变量 二、简单测试1.Hello ROS!2.ROS Turtle 三、总结 0.前言 最近也没找到什么特别感兴趣的小项目,不过偶然间看见ROS2这个东西&#…

0703齐次方程-微分方程

文章目录 1 定义和解法1.1 定义1.2 微分方程中的变量替换1.3 齐次方程的解法 2 例题结语 1 定义和解法 1.1 定义 形式上可化为 d y d x g ( y x ) \frac{dy}{dx}g(\frac{y}{x}) dxdy​g(xy​)的方程,称为齐次方程。 例如 d y d x y x tan ⁡ y x , d y d x e y…

股票期货模拟交易有用吗?股票期货模拟交易心得

股票期货市场为了满足新用户的需求,有专门的股票期货模拟交易平台,大家可以在这个平台上进行股票期货的模拟交易,这样可以通过不断总结,丰富我们的知识。下面整理的股票期货模拟交易实验心得,从股票期货模拟交易与实盘…

linux jstat 简介

本文目录一览: 1、Linux使用jstat命令查看jvm的GC情况2、linux怎么监控 jvm内存 jstat3、Linux系统监控要用到哪些命令4、linux上如何安装jstatd服务 Linux使用jstat命令查看jvm的GC情况 Linux 使用jstat命令查看jvm的GC情况 命令格式 jstat命令命令格式&#…

复现永恒之蓝[MS17_010]

目录 准备靶机 测试ping连通性 攻击漏洞 利用漏洞 准备靶机 1台kali,1台win7 win7系统可以在MSDN镜像网站里获取 注:将win7安装好,win7无法安装vmtools,若升级系统,可能会把永恒之蓝补丁打上,所以建议别升级系统 测试…

【SpringCloud常见面试题】

SpringCloud常见面试题 1.微服务篇1.1.SpringCloud常见组件有哪些?1.2.Nacos的服务注册表结构是怎样的?1.3.Nacos如何支撑阿里内部数十万服务注册压力?1.4.Nacos如何避免并发读写冲突问题?1.5.Nacos与Eureka的区别有哪些&#xff…

毕业设计 医学图像阅读器 DICOM CT MRI 阅读器 三维重建 可视化编程技术及应用

一、 概述 此系统实现了常见 VTK 四视图,实现了很好的 DICOM 图像显示,可用于 DICOM 超声 X线 CT MR 三维重建 拾取像素值 窗宽 窗位 像素,距离测量,角度测量,提供源码; 并且通过三维重建实现可视化。使用…

AttributeError: ‘ChatGLMModel‘ object has no attribute ‘prefix_encoder‘

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

**MySQL关联查询七种方式详解与应用实例**,你的掌握了吗

当我们需要从多个表中查询数据时,就需要使用关联查询了。MySQL支持七种不同类型的关联查询:内连接、左连接、右连接、全外连接、交叉连接、自连接和自然连接。本文将讲解这七种关联查询的SQL语句、示例以及应用场景。 一、 前言 关联查询是数据库操作中…

基于html+css的图展示42

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

5.2.1二叉树的定义和基本术语

二叉树的基本概念: 二叉树是递归定义的二叉树 下面我们来看几个特殊的二叉树: 特点: 1)只有最后一层有叶子节点 2)不存在度为1的结点 3)按层序从1开始编号,结点i的左孩子为2i,右孩…

基于趋动云的chatGLM-6B模型的部署

首先根据官方示例教程,学会怎么创建项目,怎么使用数据,怎么进入开发环境,以及了解最重要的2个环境变量: 这个是进入开发环境以后的代码目录 $GEMINI_CODE 这个是引用数据集后,数据集存放的路径 $GEMINI_DA…

第十一章_SpringBoot集成Redis

总体概述 redisTemplate-jedis-lettuce-redission之间的的联系 1、redisTemplate是基于某个具体实现的再封装,比如说springBoot1.x时,具体实现是jedis;而到了springBoot2.x时,具体实现变成了lettuce。封装的好处就是隐藏了具体的…

【难学易用c++ 之 继承】

目录: 前言一、继承的概念及定义(一)概念(二)继承定义继承关系和访问限定符继承基类成员访问方式的变化 二、基类和派生类对象赋值转换三、继承中的作用域四、派生类的默认成员函数五、继承与友元六、继承与静态成员七…

WinScope实现录制视频与是Timeline时间轴同步设置方法-千里马framework车载手机系统开发实战

hi,粉丝朋友们! 背景: 今天来分享一个粉丝朋友提出的问题,那就是他在学习wms课程时候有用到winscope工具,提出一个疑问,就是google官网说的有录屏可以结合起来一起看。具体如下: 其实这个以…

小案例CSS

代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta http-equiv"X-UA-Compatible" content"IEedge"> <meta name"viewport" content"widthde…