【数据挖掘】——常见算法对比和选择

news2024/11/23 22:08:37

在这里插入图片描述

🤵‍♂️ 个人主页:@Lingxw_w的个人主页
✍🏻作者简介:计算机科学与技术研究生在读 🐋 希望大家多多支持,我们一起进步!
😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+

常见数据挖掘算法分析

  • 概述
    • 一般认为,数据挖掘领域所使用的方法均属于机器学习算法、深度学习算法和数据挖掘算法
    • 一般认为,数据挖掘领域的问题主要有分类、回归、聚类、推荐、图像识别、预测
    • 一般认为,数据挖掘领域所牵扯到的底层知识有**“概率论”、“数论”、“统计学”、“线性代数”、“数字图像处理”、“机器学习理论基础”、“高等数学”**。当然,你也不一定很清楚原理,事实上很多数据挖掘师会用算法,但未必解释的清楚自己用的算法。
  • 挖掘思路
    • 一般来说,当我们遇到一个问题,完成了数据探索和数据预处理(其实你就已经完成了70%的工作),接下来的任务就是挖掘建模。
    • 通常明确问题类型之后,我们首先选择普遍认同的算法,如SVM(支持向量机)、GBDT(梯度提升树)、Adaboost(这个玩机器学习的都知道是什么)等,当然也有很多现在热门的深度算法可供选择,神经网络会是个不错的方法。
    • 当然,如果你说,我想找一个最好的方法,这是不可能的。挖掘建模,没有最好的模型只有最合适的模型,例如很多标准化特征值的单标签问题选择K-近邻算法会是个很高效的选择(尽管K-近邻只是机器学习的一个入门算法,但是存在就是合理)。
    • 如果一个问题很吃精度,那么交叉验证各个认为可能合适的算法应该是个不错的选择,当然要保证每个算法参数合适得到最优解
    • 但是,很多时候,问题往往不是很需求精度,这时候一个相对“比较好”的算法就足够了,那么如何判断一个算法是否达到我的需求呢,这就要求你必须知道每个算法的优缺点,这就是我接下来想说的东西。
  • 常用算法及其优缺点
    • 首先,在机器学习算法中有两个常见问题:
      • 欠拟合。这是由于模型过于简单产生了估计不准确形成偏差(bias)。
      • 过拟合。这是由于模型太过复杂而带来的更大的变化空间和不确定性形成方差(variance)。
        • 定义
          • 所谓过拟合(Overfit),是这样一种现象:一个假设在训练数据上能够获得比其他假设更好的拟合,但是在训练数据外的数据集上却不能很好的拟合数据。此时我们就叫这个假设出现了overfit的现象。
        • 产生原因
          • 出现这种现象的主要原因是训练数据中存在噪音或者训练数据太少。
        • 解决方法
          • 增大数据量。
          • 减少feature个数(人工定义留多少个feature或者算法选取这些feature)。
          • 正则化(留下所有的feature,但对于部分feature定义其parameter非常小)。
          • 交叉验证。
      • 对于小训练集,高偏差&低方差的分类器(eg.朴素贝叶斯)要比低偏差&高方差的分类器(eg.KNN)的优势大,因为后者会过拟合。但是随着训练集的增大,模型数据的预测能力就越强,偏差就会越低,此时低偏差&高方差分类器就表现出其优势,此时高偏差&低方差分类器已经不足以提供准确的模型了。
    • 朴素贝叶斯(NB)
      • 模型类别
        • 分类模型
      • 生成式模型,也就是说需要计算特征和类型的联合概率分布,它很简单,因为你不过是在计数而已。(我在之前的博客介绍过)它有一个独立性假设,假设特征之间独立分布,这就导致其收敛速度快于一般的判别模型,所以只需要少量训练集数据。即使这个独立假设不成立,它还是有巨大功效。是由于独立假设,直接忽略特征之间的相互作用,无法利用特征冗余。
      • 优点
        • 发源于数论,分类效率稳定。
        • 小规模数据表现极好,能处理多分类任务,适合增量式训练。
        • 对缺失数据不敏感,算法简单,常用于文本分类(典型的是垃圾邮件过滤)。
      • 缺点
        • 需要计算先验概率。
        • 对输入数据形式敏感。
        • 分类决策存在错误率。
    • 逻辑回归(Logistic Regression)
      • 模型类别
        • 分类模型
      • 判别式模型,一个分类模型。同时不需要像朴素贝叶斯那样考虑特征是否相关,有很多正则化的方法(L0,L1,L2)。与决策树和SVM相比还能得到一个不错的概率解释,甚至可以轻松地利用新数据来更新模型(在使用在线梯度下降算法时)。如果需要一个概率架构(例如,简单地调节分类阈值,指明不确定性,或者是获得置信区间),或者需要将在以后的业务中将更多的训练数据快速地整合到模型中去,那么毫无疑问,选择逻辑回归。
      • 优点
        • 实现简单,广泛使用于工业问题中。
        • 分类时计算量非常小,速度很快,存储资源低。
        • 便利地观测样本概率分数。
        • 对逻辑回归而言,多重共线性不是问题,它可以结合L2正则化来解决该问题。
      • 缺点
        • 当特征空间很大时,逻辑回归性能较差。
        • 易欠拟合,准确度不高。
        • 不能很好处理大量多类特征或变量。
        • 只能处理二分类问题。
        • 对于非线性特征,需要进行转换(毕竟是一个线性回归模型)。
    • 最近邻算法(KNN)
      • 模型类别
        • 分类模型
        • 回归模型
        • 一个通俗易懂的分类方法,求出每一个测试样本和训练样本之间的距离(根据欧式距离或者曼哈顿距离等),选取与测试样本距离最近的k个训练样本数据,进行投票得到最后的分类结果。如何选择一个合适的k值,这取决于数据集。一般来说,选择较大的k值能够减小噪声的影响,但会使得类别之间的界限变得模糊。一个较好的k值可以通过各种启发式技术获取,如交叉验证。噪声和非相关性特征的存在会使得k近邻算法的准确性减小。KNN具有较强的一致性结果,随着数据趋于无限,算法保证错误率不会超过贝叶斯算法错误率的两倍,对于一些好的k值,KNN保证错误率不会超过贝叶斯理论误差率。
        • 优点
          • 理论成熟,思想简单,既可以做分类又可以做回归。
          • 可用于非线性分类。
          • 训练时间复杂度仅为O(n)。
          • 对数据没有假设,准确度高,对离群值不敏感(outlier)。
        • 缺点
          • 计算量大。
          • 样本不平衡问题(即有些类别的样本数量多,有些类别的样本数量少)。
          • 需要大量内存。
    • 线性回归(Linear Regression)
      • 模型类别
        • 回归模型
      • 用于回归,不同于逻辑回归用于分类。其基本思想是用梯度下降法对最小二乘法形式的误差函数进行优化,当然也可以用正规方程组(normalequation)直接求得参数的解。具体有LR(线性回归)和LWLR(局部加权线性回归)两种计算式,公式在我专门回归的博客中叙述,其中LWLR是一种非参数模型,因为每次进行回归计算都要遍历训练样本至少一次。
      • 优点
        • 实现简单,计算简单。
      • 缺点
        • 无法拟合非线性数据。
    • 决策树
      • 模型类别
        • 分类模型
        • 回归模型
      • 利用特征值的选择区间建立的一个树形结构。决策树学习一般三个步骤:特征选择、决策树的生成和决策树的修剪。关于决策树有很多经典算法(ID3,C4.5,CART)。它易于解释。它可以毫无压力地处理特征间的交互关系并且是非参数化的,不必担心异常值或者数据是否线性可分(举个例子,决策树能轻松处理好类别A在某个特征维度x的末端,类别B在中间,然后类别A又出现在特征维度x前端的情况)。它的缺点之一就是不支持在线学习,于是在新样本到来后,决策树需要全部重建。另一个缺点就是容易出现过拟合,但这也就是诸如随机森林RF(或提升树boostedtree)之类的集成方法的切入点。另外,随机森林经常是很多分类问题的赢家,它训练快速并且可调,同时你无须担心要像支持向量机那样调一大堆参数,所以在以前都一直很受欢迎。
      • 优点
        • 计算简单,易于理解,可解释性强。
        • 比较适合处理有缺失属性的样本。
        • 能够处理不相关特征。
        • 在短时间内能对大数据源做出可行且效果良好的结果。
      • 缺点
        • 容易发生过拟合(随机森林有效减少过拟合)。
        • 忽略数据之间的相关性。
        • 对于那些各类别样本数量不一致的数据,在决策树当中,信息增益的结果偏向于那些具有更多数值的特征(只要是使用了信息增益,都有这个缺点,如RF)
    • Adaboost
      • 模型类别
        • 分类模型
      • Adaboost是一种加和模型,每个模型都是基于上一次模型的错误率来建立的,过分关注分错的样本,而对正确分类的样本减少关注度,逐次迭代之后,可以得到一个相对较好的模型。其核心是通过训练集得到不同的弱分类器,集合起来,构成强分类器。是一种典型的boosting算法。
      • 优点
        • 是一种有很高精度的分类器。
        • 可以使用各种方法构建子分类器,Adaboost算法提供的是框架。
        • 当使用简单分类器时,计算出的结果是可以理解的,并且弱分类器的构造极其简单。
        • 简单,不用做特征筛选。
        • 不容易发生过拟合。
      • 缺点
        • 对离群值比较敏感。
    • 支持向量机(SVM)
      • 模型类别
        • 判别模型
        • 分类模型
        • 回归模型
      • 高准确率,为避免过拟合提供了很好的理论保证,而且就算数据在原特征空间线性不可分,只要给个合适的核函数,它就能运行得很好。在超高维的文本分类问题中特别受欢迎。可惜内存消耗大,难以解释,运行和调参也有些烦人,而随机森林却刚好避开了这些缺点,相对而言更加实用。
      • 优点
        • 可以解决高维问题,即大型特征空间。
        • 能够处理非线性特征的相互作用。
        • 无需依赖整个数据。
        • 可以提高泛化能力。
      • 缺点
        • 当观测样本很多时,效率并不是很高。
        • 对非线性问题没有通用解决方案,有时候很难找到一个合适的核函数。
        • 对缺失数据敏感。
        • 对于核的选择也是有技巧的(libsvm中自带了四种核函数:线性核、多项式核、RBF以及sigmoid核):
          • 第一,如果样本数量小于特征数,那么就没必要选择非线性核,简单的使用线性核就可以了;
          • 第二,如果样本数量大于特征数目,这时可以使用非线性核,将样本映射到更高维度,一般可以得到更好的结果;
          • 第三,如果样本数目和特征数目相等,该情况可以使用非线性核,原理和第二种一样。
          • 对于第一种情况,也可以先对数据进行降维,然后使用非线性核,这也是一种方法。
    • 人工神经网络
      • 模型类别
        • 使用范围广
      • 具体叙述,可以查看我专门关于人工神经网络博客。
      • 优点
        • 分类的准确度高。
        • 并行分布处理能力强,分布存储及学习能力强。
        • 对噪声神经有较强的鲁棒性和容错能力,能充分逼近复杂的非线性关系。
        • 具备联想记忆的功能。
      • 缺点
        • 神经网络需要大量的参数,如网络拓扑结构、权值和阈值的初始值。
        • 不能观察之间的学习过程,输出结果难以解释,会影响到结果的可信度和可接受程度。
        • 学习时间过长,甚至可能达不到学习的目的。
    • K-Means聚类
      • 模型类别
        • 聚类模型
      • 无监督学习算法,在没有训练集的条件下将特征接近的归为一类。
      • 优点
        • 算法简单,容易实现。
        • 对处理大数据集,该算法是相对可伸缩的和高效率的,因为它的复杂度大约是O(nkt),其中n是所有对象的数目,k是簇的数目,t是迭代的次数。通常k<<n。这个算法通常局部收敛。
        • 算法尝试找出使平方误差函数值最小的k个划分。当簇是密集的、球状或团状的,且簇与簇之间区别明显时,聚类效果较好。
      • 缺点
        • 对数据类型要求较高,适合数值型数据。
        • 可能收敛到局部最小值,在大规模数据上收敛较慢。
        • K值比较难以选取。
        • 对初值的簇心值敏感,对于不同的初始值,可能会导致不同的聚类结果。
        • 不适合于发现非凸面形状的簇,或者大小差别很大的簇。
        • 对于”噪声”和孤立点数据敏感,少量的该类数据能够对平均值产生极大影响。
  • 几个常见算法对比
    • 简述几种常用算法的对比,具体算法的选择需要根据数据集情况和算法优缺点自行判断选择。
    • 朴素贝叶斯与逻辑回归对比
      • 相同点
        • 都是对条件概率建模,对求得的不同类的分类结果有很好的解释性,而不像SVM和神经网络解释性不高。
      • 不同点
        • 在有相关性特征的数据上的学习,逻辑回归好一些。逻辑回归不会在特征是否相关上有局限性,它总是能找到一个最优的参数。
        • 朴素贝叶斯的好处是不需要优化参数,它可以直接得到一个计数表来计算需要的最终结果。然而,逻辑回归需要学习这样一个参数,然后去预测。
        • 朴素贝叶斯在小规模数据集上的表现很好,随着数据的增多,特征维度的增加,逻辑回归的效果更好,这是因为朴素贝叶斯是生成式模型,在有先验的情况下模型能够把数据训练的更好,而逻辑回归属于判别式模型,目标驱动化,不去建模联合概率,通过训练数据直接预测输出,因此在数据足够多的情况下能够得到更好一些的效果。
    • 逻辑回归与SVM的对比
      • 不同点
        • LR采用log损失,SVM采用Hinge损失。
        • LR对异常值敏感,SVM对异常值不敏感。
        • 在训练集较小时,SVM较适用,而LR需要较多的样本。
        • LR模型找到的那个超平面,是尽量让所有点都远离他,而SVM寻找的那个超平面,是只让最靠近中间分割线的那些点尽量远离,即只用到那些支持向量的样本。
        • 对非线性问题的处理方式不同,LR主要靠特征构造,必须组合交叉特征,特征离散化。SVM也可以这样,还可以通过kernel。
    • GBDT与随机森林的对比
      • 相同点
        • 都是由多棵树组成。
        • 最终的结果都是由多棵树一起决定。
      • 不同点
        • 组成随机森林的树可以是分类树,也可以是回归树;而GBDT只由回归树组成。
        • 组成随机森林的树可以并行生成;而GBDT只能是串行生成。
        • 对于最终的输出结果而言,随机森林采用多数投票等;而GBDT则是将所有结果累加起来,或者加权累加起来。
    • bagging与boosting的对比
      • 不同点
        • 二者的主要区别是 取样方式不同 。bagging采用 均匀取样 ,而Boosting根据错误率来取样,因此boosting的分类精度要优于Bagging。bagging的训练集的选择是随机的,各轮训练集之间相互独立,而boostlng的各轮训练集的选择与前面各轮的学习结果有关;bagging的各个预测函数没有权重,而boosting是有权重的;bagging的各个预测函数可以并行生成,而boosting的各个预测函数只能顺序生成。对于象神经网络这样极为耗时的学习方法。bagging可通过并行训练节省大量时间开销。
        • bagging和boosting都可以有效地提高分类的准确性。在大多数数据集中,boosting的准确性比bagging高。在有些数据集中,boosting会引起退化—过拟合(Overfit)。
        • Boosting思想的一种改进型AdaBoost方法在邮件过滤、文本分类方面都有很好的性能。
        • Gradient boosting(又叫Mart, Treenet):Boosting是一种思想,Gradient Boosting是一种实现Boosting的方法,它主要的思想是,每一次建立模型是在之前建立模型损失函数的梯度下降方向。损失函数(loss function)描述的是模型的不靠谱程度,损失函数越大,则说明模型越容易出错。如果我们的模型能够让损失函数持续的下降,则说明我们的模型在不停的改进,而最好的方式就是让损失函数在其梯度(Gradient)的方向上下降。
  • 一般算法选择思路
    • 首当其冲应该选择的就是逻辑回归,如果它的效果不怎么样,那么可以将它的结果作为基准来参考,在基础上与其他算法进行比较;
    • 然后试试决策树(随机森林)看看是否可以大幅度提升你的模型性能。即便最后你并没有把它当做为最终模型,你也可以使用随机森林来移除噪声变量,做特征选择;
        - 如果特征的数量和观测样本特别多,那么当资源和时间充足时(这个前提很重要),使用SVM不失为一种选择。   通常情况下:[GBDT>=SVM>=RF>=Adaboost>=Others],现在深度学习很热门,很多领域都用到,它是以神经网络为基础的。
        - 算法固然重要,但好的数据却要优于好的算法,设计优良特征是大有裨益的。假如你有一个超大数据集,那么无论你使用哪种算法可能对分类性能都没太大影响(此时就可以根据速度和易用性来进行抉择)。
  • 补充说明
    • 参考文献
      • 《数据挖掘常用算法优缺点分析》
      • 原文作者参考文献
        • [1] https://en.wikipedia.org/wiki/Bias%E2%80%93variance_tradeoff
        • [2] http://blog.echen.me/2011/04/27/choosing-a-machine-learning-classifier/
        • [3] http://www.csuldw.com/2016/02/26/2016-02-26-choosing-a-machine-learning-classifier/
      • 原文中有不少错误,已经改正,但可能仍然存在说明性错误。

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

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

相关文章

2022(一等奖)D678基于改进结构函数法的大气气溶胶遥感反演

作品介绍 1 应用背景 大气气溶胶是大气中重要的成分之一&#xff0c;是悬浮于大气中的固体和液体微粒与它们的气体载体共同组成的多相体系&#xff0c;其尺度大约在10-3到102 μm之间。大气气溶胶的特性对空气质量具有良好的指示作用&#xff0c;气溶胶的研究对空气质量的监测…

读发布!设计与部署稳定的分布式系统(2版)笔记12_超时模式

1. “模式采用量”绝不是好的质量指标 1.1. 应该形成一种“面向恢复”的思维模式 1.2. 良好的模式能为开发工程师提供架构和设计方面的指导&#xff0c;从而减少、消除或缓解系统中的裂纹产生的影响 1.2.1. 在新发布软件后&#xff0c;它们能让你睡个安稳觉 2. 超时 2.1. …

车载网络测试 - CANCANFD - 基础篇_04

9、CAN报文包含帧格式 1&#xff09;数据帧 2&#xff09;远程帧 3&#xff09;错误帧 4&#xff09;过载帧 SOF&#xff1a;Start Of Frame&#xff0c;帧起始位&#xff1b;一个显性位&#xff0c;表明一帧的开始 RTR&#xff1a;Remote Transmission Request&#xff0c;远…

数字孪生世界建设核心能力:数字孪生高效建模能力

创建高保真的数字孪生体虚拟模型是构建数字孪生应用的重要步骤之一&#xff0c;需要真实的再现物理实体的几何图形、属性、行为和规则等。数字孪生体模型不仅要在几何结构上与物理实体保持一致&#xff0c;更重要的是要能模拟物理实体的时空状态、行为、功能等。 1、三维数字孪…

python爬虫之Scrapy框架--日志信息--数据提取

目录 Scrapy日志信息 了解日志信息 关于日志信息的重要性 利用日志信息进行调试和优化 Scrapy数据的提取 选择器&#xff08;Selector&#xff09;的基本使用 Item的定义与使用 数据处理与管道&#xff08;Pipeline&#xff09; Scrapy日志信息 在开发和调试过程中&a…

chatgpt赋能python:Python能跨平台吗?一文详解

Python 能跨平台吗&#xff1f;一文详解 Python 是一种高级编程语言&#xff0c;自问世以来就一直备受欢迎。其简洁明了的语法&#xff0c;高效率的开发和优秀的文档支持为 Python 赢得了数量众多的粉丝。与其他编程语言相比&#xff0c;Python 最大的优势之一是其可在多个操作…

基于Java应急资源管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

什么是HuggingFace

一.HuggingFace简介 1.HuggingFace是什么 可以理解为对于AI开发者的GitHub&#xff0c;提供了模型、数据集&#xff08;文本|图像|音频|视频&#xff09;、类库&#xff08;比如transformers|peft|accelerate&#xff09;、教程等。 2.为什么需要HuggingFace 主要是HuggingFace…

机器学习——决策树算法

一、实验目的 掌握如何实现决策树算法&#xff0c;用并决策树算法完成预测。 二、实验内容 本次实验任务我们使用贷款申请样本数据表&#xff0c;该数据表中每列数据分别代表ID、年龄、高薪、有房、信贷情况、类别&#xff0c;我们根据如下数据生成决策树&#xff0c;使用代…

Python基础 P7 字典和集合

文章目录 Python基础 P7 字典和集合字典字典基础内置函数增操作fromkeys()删操作pop()、popitems()和clear()改操作update()查操作get()和in/not in视图对象keys(),values(),items()拷贝copy()setdefault() 其他函数键值数量len()列表转换list()迭代器转换iter()逆向序列revers…

【初识C语言(1)】变量和常量

文章目录 1. 局部变量和全局变量2. 变量的作用域和生命周期3. 常量 生活中的有些值是不变的&#xff08;比如&#xff1a;圆周率&#xff0c;性别&#xff0c;身份证号码&#xff0c;血型等等&#xff09;有些值是可变的&#xff08;比如&#xff1a;年龄&#xff0c;体重&…

GitHub 上数百万个存储库可能容易被劫持

GitHub 上数以百万计的企业软件存储库很容易受到重新劫持&#xff0c;这是一种相对简单的软件供应链攻击&#xff0c;威胁行为者将依赖于特定存储库的项目重定向到恶意攻击。 研究人员在本周的一份报告中表示&#xff0c;这个问题与 GitHub 用户或组织更改项目名称或将其所有权…

chatgpt赋能python:Python自动执行程序:提高效率,降低出错率的利器

Python自动执行程序&#xff1a;提高效率&#xff0c;降低出错率的利器 随着科技的进步和信息技术的发展&#xff0c;人们越来越依赖计算机和自动化技术来完成繁琐的工作。自动化编程技术的应用也越来越广泛&#xff0c;其中Python自动执行程序被广泛使用。 Python自动执行程…

图像处理的两种变换:2D-DWT和Gabor变换

pywt官方API文档&#xff1a; 2D Forward and Inverse Discrete Wavelet Transform 目录 1. 二维离散小波变换2D-DWT 1.1 二维离散小波变换的相关公式 1.2 使用pywt实现2D-DWT 2. 窗口傅里叶变换Gabor 1. 二维离散小波变换2D-DWT DWT(Discrete Wavelet Transformation)代…

c语言通讯录——静态版本(带详细文字解释)

1.定义用于存储一个人信息的结构体 typedef struct PeoInfo {char name[NAME_MAX];int age;char sex[SEX_MAX];char addr[ADDR_MAX];char tele[TELE_MAX]; }PeoInfo;定义了一个名为 “PeoInfo” 的结构体&#xff08;struct&#xff09;类型&#xff0c;用于存储有关一个人的信…

MIAOYUN“一云多芯”全栈信创解决方案获认可!

信创&#xff0c;即信息技术产业创新&#xff0c;是数据安全、网络安全的基础&#xff0c;也是新基建的重要组成部分。信创产业发展已经成为经济数字化转型、提升产业链发展的关键&#xff0c;促进信创产业在本地落地生根&#xff0c;带动传统IT信息产业转型&#xff0c;构建区…

使用POI将excel文件导入到数据库

概要 随着时代变化&#xff0c;有的需求也会越来越多&#xff0c;例如&#xff1a;有的文件上千条数据需要导入数据库不可能手动一条条导入吧&#xff1f;太浪费时间了&#xff01;所以需要编写程序让程序来导入 整体架构流程 我这里使用的是springbootmybatisMVC的项目架构…

接口测试流程、测试点和测试工具

目录 前言&#xff1a; 一、什么情况下开展接口测试&#xff1f; 二、如何进行接口测试 三、接口测试用例设计 四、接口测试工具 前言&#xff1a; 接口测试是一种重要的测试类型&#xff0c;用于验证应用程序接口的功能、性能和可靠性。 一、什么情况下开展接口测试&am…

AtomicInteger源码

介绍 Atomic包是java.util.concurrent下的另一个专门为线程安全设计的Java包&#xff0c;包含多个原子操作类。这个包里面提供了一组原子变量类。其基本的特性就是在多线程环境下&#xff0c;当有多个线程同时执行这些类的实例包含的方法时&#xff0c;具有排他性&#xff0c;…

大坝渗流监测的目的和意义

​  大坝渗流监测是对坝体内渗流场进行的监测&#xff0c;是确保大坝安全运行的重要手段。通过监测&#xff0c;可以掌握渗流场的变化规律&#xff0c;并根据渗流场的变化趋势预测坝体、坝基可能出现的问题。通常根据渗漏量与渗流量两个指标来进行监测&#xff0c;即渗漏量小…