【机器学习】模型评估与选择

news2024/10/7 6:45:53

模型评估与选择



目录

    • 一、评估方法
      • 1、留出法
      • 2、交叉验证法
      • 3、自助法
    • 二、性能度量
      • 1、错误率与准确率
      • 2、查准率、查全率
        • 阈值对查准率、查全率的影响
      • 3、F1度量(基于查准率与查全率的调和平均)
      • 4、P-R Curve
      • 5、ROC Curve
        • PRC和ROC的选用准则
        • PRC和ROC的差异
      • 6、代价敏感错误率与代价曲线
    • 三、参考博客




一、评估方法

通常可通过实验测试来对学习器的泛化误差进行评估并进而做出选择。为此,需使用一个“测试集”(testing set)来测试学习器对新样本的判别能力,然后以测试集上的“测试误差”(testing error)作为泛化误差的近似。一般对样本集进行适当的划分得到训练集 S 和测试集 T。但需注意的是,测试集应该尽可能与训练集互斥,即测试样本尽量不在训练过程中使用过。
测试样本为什么要尽可能不出现在训练集中呢?试想:老师出 10 道习题供同学们练习,考试时老师又用同样的
这 10 道题作为试题,那基于这些试题测得的考试成绩能否有效反映同学学得好不好呢?答案是否定的,因为可
能有的同学只会做这 10 道题却能得高分。
因此,对于获取到的宝贵的数据集而言,我们通常需要对其进行划分。常用的划分方法有:
1、留出法
2、交叉验证法
3、自助法


1、留出法

“留出法” (hold-out) 直接将数据集划分为两个互斥的集合,其中一个集合作为训练集 S,另一个作为测试集T,即 D=S∪T,S∩T=Ф。在 S 上训练出模型后,用 T 来评估其测试误差,作为对泛化误差的估计。
需注意的是,训练 / 测试集的划分要尽可能保持数据分布的一致性。例如在分类任务中,至少要保持样本的类别比例相似。如果从采样(sampling)的角度来看待数据集的划分过程,则保留类别比例的采样方式通常称为“分层采样”(stratified sampling)。例如,通过对 D 进行分层采样而获得含 70% 样本的训练集 S 和含 30% 样本的测试集 T。若 D 包含 500 个正例、 500 个反例,则分层采样得到的 S 应包含 350 个正例、 350 个反例,而 T 则包含 150 个正例和 150 个反例;若 S、T 中样本类别比例差别很大,则误差估计将由于训练/测试数据分布的差异而产生偏差。
留出法需划分训练 / 测试集,这会导致一个窘境:若令训练集 S 包含绝大多数样本,则训练出的模型可能更接近于用 D 训练出的模型,但由于 T 比较小,评估结果可能不够稳定准确;若令测试集 T 多包含一些样本,则训练集 S 与 D 差别更大了,被评估的模型与用 D 训练出的模型相比可能有较大差别,从而降低了评估结果的保真性(fidelity)。这个问题没有完美的解决方案,常见做法是将大约 2/3~4/5 的样本用于训练,剩余样本用于测试。


2、交叉验证法

测试集很宝贵,最好是在调参、优化之后,最终再用于测试。就像历年高考真题一样,最好用在最终临考前进行测试,以评估自己大概能取得怎样的成绩。所以对于训练集而言,可以单独划分一些数据出来用于提前“测试”(可以理解为月考),来帮助用于调整、优化自己。因此,可把单独划分出来的这部分数据称为“验证集”。
例如,可将训练集中的数据划分为互斥的 k 份(尽量保证数据分布的一致性),将其中的 k-1 份用于训练,剩下的那 1 份用于验证(按这样的划分方式可获得 k 组训练 / 测试集)。即在经过其他 k-1 份数据训练后,再用最后 1 份数据进行测试,算出在此数据集上的准确率。但是这里有个问题:如果最后那份数据集比较极端,那么在该数据集上得到的分数将不能用以反映最终的模型准确度。为此,可将上述实验进行 k 次,每次选择不同的训练集与验证集来进行验证,并将最终得到的各预测值来算平均值。
显然,交叉验证法评估结果的稳定性和保真性在很大程度上取决于 k 的取值,为强调这一点,通常把交叉验证法称为“k折交叉验证”(k-fold cross validation)。k 最常用的取值是 10,此时称为 10 折交叉验证明。

Alt


3、自助法

我们希望评估的是用 D 训练出的模型。但在留出法和交叉验证法中,由于都保留了一部分样本用于测试,因此实际评估的模型所使用的训练集比 D 小,这必然会引入一些因训练样本规模不同而导致的估计偏差。有没有什么解决办法呢?
“自助法”(bootstrapping)是一个比较好的解决方案,它直接以自助采样法(bootstrap sampling)为基础。给定包含 m 个样本的数据集 D,我们对它进行采样产生数据集 D’:每次随机从 D 中挑选一个样本,将其拷贝放入 D’,然后再将该样本放回初始数据集 D 中,使得该样本在下次采样时仍有可能被采到;这个过程重复执行 m 次后,我们就得到了包含 m 个样本的数据集D’,这就是自助采样的结果。显然,D 中有一部分样本会在 D’中多次出现,而另一部分样本不出现。可以做一个简单的估计,样本在 m 次采样中始终不被采到的概率是 (1 − 1/𝑚)m,取极限得到:

Alt

即通过自助采样,初始数据集 D 中约有 36.8% 的样本未出现在采样数据集 D’中。于是可以将 D’用作训练集,D-D’ 用作测试集;这样,实际评估的模型与期望评估的模型都使用 m 个训练样本,而我们仍有数据总量约 1/3 的、没在训练集中出现的样本用于测试。这样的测试结果,亦称“包外估计”(out-of-bag estimate)。




二、性能度量

对学习器的泛化性能进行评估,不仅需要有效可行的实验估计方法,还需要有衡量模型泛化能力的评价标准,这就是性能度量(performance measure)。性能度量反映了任务需求,在对比不同模型的能力时,使用不同的性能度量往往会导致不同的评判结果;这意味着模型的“好坏”是相对的,什么样的模型是好的,不仅取决于算法和数据,还决定于任务需求。
要评估学习器 𝑓 的性能,就要把学习器的预测结果 𝑓 𝑥 与真实标记 𝑦 进行比较。回归任务最常用的性能度量是“均方误差”(mean squared error):

Alt

分类任务中最常用的性能度量有:
1、错误率与准确率
2、查准率、查全率与 F1
3、ROC 和 AUC
4、代价敏感错误率与代价曲线


1、错误率与准确率

错误率与准确率是分类任务中最常用的两种性能度量,既适用于二分类任务,也适用于多分类任务。错误率是分类错误的样本数占样本总数的比例,准确率则是分类正确的样本数占样本总数的比例。对样例集 D 分类错误率定义为:

Alt
准确率则定义为:

Alt


2、查准率、查全率

考虑一种情况,医院有1000个人来查核酸,其中已知有990个人是阴性,剩余10人是阳性。现在有一分类器,无论其输入是什么它都输出“阴性”(即,它认为所有人都是“阴性”,将此类视为正例)。那么此时,用该分类器在医
院进行核酸查验时,它的准确率将达到 990 / 1000 = 99.00%,这是一个非常高的准确率。但是,实际上这个分类器的效果并不好。因此,评判一个模型的好坏仅靠准确率(或错误率)指标是不充分的。
在上面的例子中,如果我们考虑那 10 个阳性,则分类器在“筛选阳性”这项工作时的准确率为 0 / 10 = 0.00% 。可见,在寻找反例这项工作中,该分类器表现相当糟糕。因此,在对模型进行评估时,应该从多个角度去评判。
实际上,对于一个模型的评估,不能仅看它在“分类正确上”上“能做多好”,还需要考虑它在“分类错误上”上“能不能尽量少失误”。为此,引入混淆矩阵(Confusion Matrix)。其格式如下:

Alt

其中:
T=true, F=False, P=Positive, N=Negative;
TP+FP+TN+FN = 样例总数。


举例:医院有 1000 个人来查核酸,其中已知有 900 个人是阴性,其余 100 人是阳性。
目标:找出所有阳性(视阳性为正例)。
若该分类器选出了120个人,其中核酸为阳性的有 90 人,还错误地将 30 例阴性也选出来了。则可以画出分类结果混淆矩阵为:

Alt

对上表中的结果进行解释:
true negative:90个“阳性”被正确地分类到“阳性”类别中;
false positive:30个“阴性”被错误地分类到“阳性”类别中;
false negative:10个“阳性”被错误地分类到“阴性”类别中;
true positive:870个“阴性”被正确地分类到“阴性”类别中;
一个完美的分类器应该只有 true positives 和 true negatives,即主对角线元素不为0,其余元素为0。


有了混淆矩阵后,就能引入两个新的评判标准——查准率(也称精度)和查全率(也称召回率)来较为全面地评判一个模型的好坏。其定义如下:

Alt

查准率和查全率是一对矛盾的度量。一般来说,查准率高时,查全率往往偏低;而查全率高时,查准率往往偏低。
比如在前面的例子中,可以算出该模型的查准率和查全率分别为:

Alt


阈值对查准率、查全率的影响

在用分类器进行预测,即调用方法 clf.predict() 时,最终返回的是一个 bool 值(指代是与否:对某个东西的预测结果)。对于一组数据,只要拥有原始标签和这些预测值,就能算出它的查准率和查全率。但实际上, clf.predict( )方法的真实过程如下:
1、对所有样本调用 clf.decision_function() 计算数据在通过拟合函数计算后得到的分数;
2、划定阈值;
3、根据阈值的划分来对样本数据进行分类。
因此,当设置的阈值不同时,最终得到的分类结果也是不同的。一般来讲,提高阈值,会有假正例成为一个真反例,从而提高准确率;反之,降低阈值可提高召回率、降低精确率。下图展示了对手写数字 5 进行预测时,提高阈值对精确率和查全率的影响。

Alt

注:当提高阈值时,准确率通常会随之提高,但这并不绝对;而当提高阈值时,召回率只会降低。这就解释了为什么召回率的曲线更加平滑,而精确率的曲线有时会起伏不平。

Alt


3、F1度量(基于查准率与查全率的调和平均)

查准率与查全率各有侧重,若希望对其进行综合考量,可引入 F1 度量,其定义如下:

Alt
由此定义可知,调和平均值给予低值更多权重。因此,如果查准率和查全率都很高,分类器将获得高F1分数。
在一些应用中,对查准率和查全率的重视程度有所不同。例如在商品推荐系统中,为了尽可能少打扰用户,更希望推荐内容确是用户感兴趣的,此时查准率更重要;而在逃犯信息检索系统中,更希望尽可能少漏掉逃犯,此时查全率更重要。𝐹1 度量的一般形式 𝐹𝛽 能让我们表达出对查准率/查全率的不同偏好,它定义为:

Alt

其中 𝛽 > 0 度量了查全率对查准率的相对重要性。
𝛽 = 1 时退化为标准的 𝐹1 ; 𝛽 > 1 时查全率有更大影响;𝛽 < 1 时查准率有更大影响。


4、P-R Curve

在很多情形下,我们可根据学习器的预测结果对样例进行排序,排在前面的是学习器认为“最可能”是正例的样本,排在最后的则是学习器认为“最不可能”是正例的样本。按此顺序逐个把当前样本作为“正负例的阈值”,并对样本进行分类预测,则每次可以计算出当前的查全率、查准率。以查准率为纵轴、查全率为横轴作图,就得到了查准率
-查全率曲线,简称P-R曲线,显示该曲线的图称为“P-R图”。
P-R图直观地显示出学习器在样本总体上的查全率、查准率,在进行比较时,若一个学习器的P-R曲线被另一个学习器的曲线完全“包住”,则可断言后者的性能优于前者,如图,学习器A的性能优于学习器C;如果两个学习器的P-R曲线发生了交叉,例如图中的A与B,则难以一般性地断言两者孰优孰劣,只能在具体的查准率或查全率条件下进行比较。然而,在很多情形下,人们往往仍希望把学习器A与B比出个高低。这时一个比较合理的判据是比较 P-R 曲线下面积的大小,它在一定程度上表征了学习器在查准率和查全率上取得相对“双高”的比例。但这个值不太容易估算,因此,人们设计了一些综合考虑查准率、查全率的性能度量。
“平衡点”(Break-Event Point,简称 BEP)就是这样一个度量,它是“查准率=查全率”时的取值。如右图中,学习器C的BEP是0.64,而基于BEP的比较,可认为学习器A优于B。
但BEP还是过于简化了些,更常用的还是 F1 度量。

Alt


5、ROC Curve

ROC 曲线全称 Receiver Operating Characteristic Curve(受试者特征曲线)。
它与P-R曲线非常相似,但不是画出准确率对召回率的曲线。ROC 曲线是真正例率(true positive rate,TPR)对假正例率(false positive rate, FPR)的曲线。其中:

Alt

FPR 是反例被错误分成正例的比率。它等于 1 减去真反例率(true negative rate,TNR)。TNR是反例被正确分类的比率。TNR也叫做特异性。所以 ROC 曲线画出召回率对(1 减特异性)的曲线。

Alt

通过 ROC 曲线来比较分类器优劣的一个方法是:测量 ROC 曲线下的面积(AUC)。完美分类器的 ROC 曲线下面积等于 1(或等于0),而一个纯随机分类器 ROC 曲线下的面积等于 0.5。

Alt


PRC和ROC的选用准则

PRC 和 ROC 很相似,那如何决定在什么情况下该优先使用何种曲线呢?一个笨拙的规则是:当正例很少,或当你关注假正例多于假反例的时候优先使用 PRC;其他情况则使用 ROC 曲线。
举个例子,上面的 ROC 曲线和 AUC 值都取得较为不错的效果,你或许认为这个分类器很棒。但出现这情况几乎全是因为只有少数正例(“是 5”),而大部分是反例(“非5”);相反,PR 曲线清楚显示出这个分类器还有很大的改善空间(PR 曲线应该尽可能地靠近右上角)。


PRC和ROC的差异

PR和ROC在面对不平衡数据时的表现是不同的。在数据不平衡时,PR曲线是敏感的,随着正负样本比例的变化,PR会发生强烈的变化。而ROC曲线是不敏感的,其曲线能够基本保持不变。
ROC 对数据的不敏感表明其在衡量一个模型本身的预测能力时,与样本正负比例无关。但是这个不敏感的特性又使得其较难以看出一个模型在面临样本比例变化时模型的预测情况。而PRC因为对样本比例敏感,因此能够看出分类器随着样本比例变化的效果。而实际中的数据又是不平衡的,这样有助于了解分类器实际的效果和作用,也能够以此进行模型的改进。
综上,在实际学习中,我们可以使用ROC来判断两个分类器的优良,然后进行分类器的选择,然后可以根据PRC表现出来的结果衡量一个分类器面对不平衡数据进行分类时的能力,从而进行模型的改进和优化。


6、代价敏感错误率与代价曲线

在现实任务中常会遇到这样的情况:不同类型的错误所造成的后果不同。例如在医疗诊断中,错误地把患者诊断为健康人与错误地把健康人诊断为患者,看起来都是犯了“一次错误”,但后者的影响是增加了进一步检查的麻烦,前者的后果却可能是丧失了拯救生命的最佳时机。为权衡不同类型错误所造成的不同损失,可为错误赋予“非均等代价”(unequa1 cost)。
以二分类任务为例,我们可根据任务的领域知识设定一个“代价矩阵”(cost matrix),如下表所示,其中 𝑐𝑜𝑠𝑡𝑖𝑗 表示将第 𝑖 类样本预测为第 𝑗 类样本的代价。一般来说, 𝑐𝑜𝑠𝑡𝑖𝑖= 0 ;若将第 0 类判别为第 1 类所造成的损失更大,则 𝑐𝑜𝑠𝑡01> 𝑐𝑜𝑠𝑡10;损失程度相差越大,𝑐𝑜𝑠𝑡01 与 𝑐𝑜𝑠𝑡10 值的差别越大。

Alt

在非均等代价下,我们所希望的不再是简单地最小化错误次数,而是希望最小化“总体代价”(total cost)。若将
上表中的第 0 类作为正类、第 1 类作为反类,令 D+ 与 D- 分别代表样例集 D 的正例子集和反例子集,则“代价
敏感”(cost-sensitive)错误率为:

Alt

在非均等代价下,ROC 曲线不能直接反映出学习器的期望总体代价,而“代价曲线”(cost curve) 则可达到该目的。代价曲线图的横轴是取值为 [0,1] 的正例概率代价:

Alt

其中 𝑝 是样例为正例的概率;纵轴是取值为 [0,1] 的归一化代价:

Alt

其中 FPR 是假正例率,FNR=1-TPR 是假反例率。
代价曲线的绘制很简单:ROC曲线上每一点对应了代价平面上的一条线段,设ROC曲线上点的坐标为 (TPR , FPR),则可相应计算出FNR,然后在代价平面上绘制一条从 (0 , FPR) 到 (1 , FNR) 的线段,线段下的面积即表示了该条件下的期望总体代价;如此将ROC曲线上的每个点转化为代价平面上的一条线段,然后取所有线段的下界,围成的面积即为在所有条件下学习器的期望总体代价,如下图所示:

Alt


三、参考博客

机器学习实战_分类(一)
终于搞懂了PR曲线


END


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

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

相关文章

python 中文转带音调的拼音

python 中文转带音调的拼音 前言python 中文转带音调的拼音1、1.1 安装pinyin模块1.2 试验1.3 效果图1.4 代码实现前言 今天整理中药材,每个药材上标上带音调的拼音,查了些,有的易形成乱码,如Shān Mi Dōnɡ,想到python自已动手转算了 python 中文转带音调的拼音 1、 …

(五)汇编语言——[bx]和loop指令

目录 [...]与&#xff08;...&#xff09; [...] &#xff08;...&#xff09; idata Loop指令 段前缀 总结 [...]与&#xff08;...&#xff09; [...] 这个我们其实见过&#xff0c;代表的是一个内存单元&#xff0c;段地址在DS中&#xff0c;偏移地址就是[bx]。 &am…

《图解TCP/IP》阅读笔记(第七章 7.4)—— RIP 路由信息协议

7.4 RIP RIP&#xff08;Routing Information Protocol&#xff0c;路由信息协议&#xff09;&#xff0c;是一种距离向量算法&#xff0c;广泛用于LAN。 该协议将路由控制信息定期&#xff08;30秒一次&#xff09;向全网广播。如果没有收到路由控制信息&#xff0c;连接就会…

【1739. 放置盒子】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 有一个立方体房间&#xff0c;其长度、宽度和高度都等于 n 个单位。请你在房间里放置 n 个盒子&#xff0c;每个盒子都是一个单位边长的立方体。放置规则如下&#xff1a; 你可以把盒子放在地板上的…

筛法(线性筛,厄拉多塞筛)

在前前前前前前…的博客中,我们主要谈了欧拉筛和埃氏筛. 今天我们主要来聊一聊线性筛和厄拉多塞筛(其实和埃氏筛和欧拉筛本质上没区别哎).其实在这两种筛法中厄拉多塞筛最好懂(就连本蒟蒻一看代码就明白了…别看这个名字,容易糊弄人) 首先是厄拉多塞筛"粉墨登场"::…

HRTransNet阅读理解

E. Dual-direction short connection fusion module HRFormer applies transformer blocks to enlarge receptive field of fused feature Frs, and uses exchange units to absorb the merits of multi-scales features. The process is described as: HRFormer使用TRM块来扩…

《教育的目的》笔记——如何让学生通过树木看见森林

目录 作者简介 个人感悟 经典摘录 1、学生所受的训练应该比他们最终投身的专业更为广泛 2、学习新语言用途 3、教师的责任 4、教育的主题 5、学到的有用之物 6、教育目的 7、所有事物都不是静态的、定型的&#xff0c;而是处于形成&#xff08;becoming&#xff09;过…

Merry Xmas | 用Matplotlib画个3D圣诞树送给你!~

1写在前面 Merry Christmas ! &#x1f973; 过完圣诞就要跨年了&#xff0c;希望2023年自己可以一扫霉运&#xff0c;顺顺利利&#xff01;&#xff01;&#xff01;&#x1f618; 从网上抄了个英文的祝福语送给大家&#xff08;主要是懒&#xff09;: &#x1f447; I hope S…

【Unity】VideoPlayer实现视频播放

【Unity】VideoPlayer实现视频播放 背景&#xff1a;开发影院场景需要在荧幕上播放视频 环境&#xff1a;Unity2021.3 VideoPlayer的简单使用&#xff1a;http://t.csdn.cn/K8665 局限&#xff1a;上述方法会使得视频播放窗口强制在相机前&#xff1b; 需求&#xff1a;视频播…

怎么看懂单片机时序图?

本人没有上过单片机相关的专业课&#xff0c;是在《计算机系统结构》里遇见的时序图。由于看不懂加之老师没有专门讲&#xff0c;因此自行查阅了相关的视频和博客。&#xff08;参考视频已放在文末&#xff09; 网上资源贫瘠&#xff0c;不过我也不需要太过深入的知识。 大家…

spring事物使用示例及原理总结

目录 事务示例 示例一 示例二 示例三 示例四 示例五 示例六 事务原理 EnableTransactionManagement 执行代理对象目标方法 事务示例 示例一 在test()方法直接调用abc()方法&#xff0c;并在test()方法添加Transactional&#xff0c;test()和abc()方法分别会更新id…

力扣刷题笔记day10(树的子结构+二叉树镜像+对称的二叉树)

文章目录树的子结构题目思路代码二叉树镜像题目思路代码对称的二叉树题目思路代码树的子结构 输入两棵二叉树A和B&#xff0c;判断B是不是A的子结构。(约定空树不是任意一个树的子结构) B是A的子结构&#xff0c; 即 A中有出现和B相同的结构和节点值。 题目 思路 dfs(A, B) …

二叉树经典算法题目

1.二叉树的前中后序遍历&#xff08;简单&#xff09; 省略 2.二叉树的深度(简单) 输入一棵二叉树的根节点&#xff0c;求该树的深度。从根节点到叶节点依次经过的节点&#xff08;含根、叶节点&#xff09;形成树的一条路径&#xff0c;最长路径的长度为树的深度。 例如&a…

Biotin-PEG-MAL,Maleimide-PEG-Biotin,生物素聚乙二醇马来酰亚胺

英文名称&#xff1a;Biotin-PEG-MAL&#xff0c;Maleimide-PEG-Biotin 中文名称&#xff1a;生物素聚乙二醇马来酰亚胺 Biotin-PEG-Mal&#xff0c;聚乙二醇化生物素对亲和素或链霉亲和素有很高的亲和力。生物素/亲和素体系在生物分子检测和分离中有着广泛的应用。马来酰亚胺…

Container Station搭建个人网盘Nextcloud(Mariadb)

目录 一、Container Station 二、MariaDB安装 三、phpMyAdmin安装及nextcloud对应数据库配置 &#xff08;一&#xff09;phpMyAdmin安装 &#xff08;二&#xff09;nextcloud对应数据库配置 四、Container Station中部署nextcloud &#xff08;一&#xff09;拉取镜像…

javascript下载文件几种方式,接收后台返回流下载或直接下载文件

目录 1 javascript下载文件7中方式 1.1 window.location.href下载 1.2 window.location下载 1.3 iframe下载 1.4 form表单的形式下载 1.5 a标签的方式下载 1.6 ajax方式后台返回文件流下载 1.7 axios方法后台返回流方式下载 2.完整源码 1 javascript下载文件7中方式 1…

Discrete Optimization课程笔记(4)—前沿与工具

目录 1.大规模邻域搜索(Large Neighborhood Search) Case1: 带时间窗的非对称TSP(Asymmetric TSP with Time Windows) 2.列生成算法(Column Generation) Case2: Cutting Stock 3.优化工具汇总 1.大规模邻域搜索(Large Neighborhood Search) 大规模邻域搜索是局部搜索和CP…

linux共享内存的使用

共享内存可以由多个程序同时访问的内存&#xff0c;能够避免进程间通信过程中的冗余数据拷贝&#xff0c;是IPC中最快的一种,特别适合用来作大块数据的传输。共享内存可以映射到不同的进程空间&#xff0c;这些进程间的数据传递就不再涉及内核。这个过程其实是把同一块物理内存…

Java高效率复习-Spring[Spring]

前言 Spring的学习还是很简单的&#xff0c;到SpringMVC的时候则会比较复杂了&#xff0c;因为要创建Web项目以及一些Web因素等等。 Spring的简介 Spring入门案例 导入依赖 <packaging>jar</packaging><dependencies><!-- 基于Maven依赖传递性&#x…

[ 代码审计篇 ] Fortify 安装及使用详解(一)Fortify 下载安装并设置语言为中文导出中文报告

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…