二元分类模型评估方法

文章目录

  • 前言
  • 一、混淆矩阵
  • 二、准确率
  • 三、精确率&召回率
  • 四、F1分数
  • 五、ROC 曲线
  • 六、AUC(曲线下面积)
  • 七、P-R曲线
    • 类别不平衡问题中如何选择PR与ROC
  • 八、 Python 实现代码
    • 混淆矩阵、命中率、覆盖率、F1值
    • ROC曲线、AUC面积


指标
公式
意义
真正例 (TP)被模型预测为正的正样本;即预测为正样本,且预测结果为真
假正例 (FP)被模型预测为正的负样本;即预测为正样本,且预测结果为假
真负例 (TN)被模型预测为负的正样本;即预测为负样本,且预测结果为假
假负例 (FN)被模型预测为负的负样本;即预测为负样本,且预测结果为真
准确率(Accuracy) A c c u r a c y = T P + T N T P + T N + F P + F N Accuracy=\frac{TP+TN}{TP+TN+FP+FN} Accuracy=TP+TN+FP+FNTP+TN模型正确分类的样本占总样本数的比例
精确率(Precision) P r e c i s i o n = T P T P + F P Precision=\frac{TP}{TP+FP} Precision=TP+FPTP模型预测为正类别的样本中有多少是真正的正类别
召回率(Recall) /真正率(TPR) R e c a l l / T P R = T P T P + F N Recall/TPR=\frac{TP}{TP+FN} Recall/TPR=TP+FNTP召回率,也称为 True Positive Rate (TPR) 或灵敏度,是指在所有实际为正类别的样本中,模型能够正确预测为正类别的比例
特异度 (TNR) T N P = T N T N + F P TNP=\frac{TN}{TN+FP} TNP=TN+FPTN特异度(True Negative Rate),是指在所有实际为负类别的样本中,模型能够正确预测为负类别的比例
高特异度意味着模型能够有效地将实际为负类别的样本正确分类。
假正率(FPR) F P F P + T N \frac{FP}{FP+TN} FP+TNFPFalse Positive Rate (FPR) 是指在所有实际为负类别的样本中,模型错误预测为正类别的比例
FPR 与特异度有关,是衡量模型在负类别样本中的误判程度。
假负率(FNR) F N F N + T P \frac{FN}{FN+TP} FN+TPFNFalse Negative Rate (FNR) 是指在所有实际为正类别的样本中,模型错误预测为负类别的比例
FNR 表示模型在正类别样本中的遗漏程度,即未能正确识别的正类别样本比例
F1 分数(F1-score) F 1 = 2 ⋅ P r e c i s i o n ⋅ R e c a l l P r e c i s i o n + R e c a l l F1=\frac{2 \cdot Precision \cdot Recall }{Precision + Recall } F1=Precision+Recall2PrecisionRecallF1 分数是精确率和召回率的调和平均数,它综合了两者的性能

前言

  根据分类模型和回归模型的不同,相应的评价标准也不尽相同,例如在分类模型中,就有以下 8 种不同的评价标准。


一、混淆矩阵

  混淆矩阵是评价分类模型性能的基础,它展示了模型的预测结果核真实标签之间的对应关系。混淆矩阵由4个指标构成,分别是:
记忆小窍门:第一个字母 T / F 代表,是否分类正确。第二个字母 P / N 代表预测结果

  • 真正例 (True Positive,TP)
  • 假正例 (False Positive,FP)
  • 真负例 (True Negative,TN)
  • 假负例 (False Negative,FN)

通过计算这4个指标可以得到模型的准确率、精确率、召回率和F1得分。


在这里插入图片描述
在这里插入图片描述

  • 真正例 (True Positive,TP):被模型预测为正的正样本;即预测为正样本,且预测结果为真,所以样本实际是正样本
  • 假正例 (False Positive,FP):被模型预测为正的负样本;即预测为正样本,且预测结果为假,所以样本实际是负样本
  • 真负例 (True Negative,TN):被模型预测为负的正样本;即预测为负样本,且预测结果为假,所以样本实际是正样本
  • 假负例 (False Negative,FN):被模型预测为负的负样本;即预测为负样本,且预测结果为真,所以样本实际是负样本

混淆矩阵的指标:预测性分类模型,肯定是希望越准越好。那么,对应到混淆矩阵中,那肯定是希望TP与TN的数量大,而FP与FN的数量小。混淆矩阵里面统计的是个数,有时候面对大量的数据,光凭算个数,很难衡量模型的优劣

  混混淆矩阵是评估分类模型性能的基础,目的是帮助理解分类模型在不同类别上的表现。通过将模型的分类结果分成真正类别(True)和错误类别(False),帮助计算多种重要的性能指标,以量化模型在不同类别上的表现,例如准确率、精确率、召回率和F1分数。这些指标帮助我们量化模型的分类准确性、可靠性和全面性。


二、准确率

  准确率(ACC)是衡量分类模型性能最直观的指标之一,它表示模型正确分类的样本数与总样本数之间比。准确率越高,表示模型的分类结果月准确。然而,准确率不能完全反映模型的性能,因为在样本不均衡的情况下,准确率可能会出现较高的偏差。此时,需要借助其他指标来综合评价模型。
A C C = T P + T N T P + F P + T N + F N ACC=\frac{TP+TN}{TP+FP+TN+FN} ACC=TP+FP+TN+FNTP+TN


三、精确率&召回率

  • 精确率
      精确率 (Precision) 是指模型预测为正例的样本中真正为正例的比例。精确率越高,表示模型将负例预测为正例的能力越强,即假正例的数量越少。精确率可以帮助我们评估模型的分类准确性,特别是在关注假正例数量的应用场景中
    P r e c i s i o n = T P T P + F P Precision=\frac{TP}{TP+FP} Precision=TP+FPTP
  • 召回率
      召回率 (Recall) 是指真正为正例的样本中被预测为正例的比例。召回率越高,表示模型将真正为正例的样本正确检测出来的能力越强,即假负例的数量越少。召回率可以帮助我们评估模型的分类完整性,特别是在关注假正例数量的应用场景中。
    R e c a l l = T P T P + F N Recall=\frac{TP}{TP+FN} Recall=TP+FNTP
  • 可以发现,当假正(即预测为正样本且预测结果为假:FP)的样本数越少,准确率就越高。相应的对应 FN 就越大,召回率就越小。
    如果我们只预测最可能为正的那一个样本为正,其余的都为负,那么这时候我们的查准率很可能为 100%
  • 同样的道理:预测为正的样本越多,即 FP 越大,相应的对应 FN 就越小,召回率就越大,准确率也就越小
    如果我们把所有的样本都预测为正,其余的都为负,那么此时的召回率必然为 100%


    上面这句话也就说明了:我们分别用准确率或召回率对模型的预测结果进行评价会有片面性。所以,基于上面的片面性,引出了一个新的标准:F1度量(F-Score)

  精确率和召回率两个概念,但在实际建模过程中,这两个指标往往是此消彼长的,召回率越高,准确率越低,反之亦然。所以想要找到二者之间的一个平衡点,就需要一个新的指标:F1分数。F1分数同时考虑了查准率和查全率,让二者同时达到最高,取一个平衡。


四、F1分数

  F1分数是精确率和召回率的调和平均值,它综合考虑了分类模型的准确性和完整性。
F 1 = 2 T P 2 T P + F N + F P = 2 ⋅ P r e c i s i o n ⋅ R e c a l l P r e c i s i o n + R e c a l l F1=\frac{2TP}{2TP+FN+FP}=\frac{2 \cdot Precision \cdot Recall }{Precision + Recall } F1=2TP+FN+FP2TP=Precision+Recall2PrecisionRecall

  F1 分数的取值范围是 [0, 1],越接近 1 表示模型的性能越好,同时考虑到了模型在查准率和查全率之间的平衡。F1 分数对于二元分类问题非常有用,特别是当我们希望在精确率和召回率之间取得平衡时。在样本不均衡的情况下,F1分数比准确率更能反映模型的性能。


五、ROC 曲线

  接受者操作特性曲线(receiver operating characteristic curve,简称ROC曲线)。该曲线最早应用于雷达信号检测领域,用于区分信号与噪声。后来人们将其用于评价模型的预测能力,ROC曲线是基于混淆矩阵得出的。它反映了模型在不同阈值下的分类性能

  逻辑回归里面,对于正负例的界定,通常会设一个阈值,大于阈值的为正类,小于阈值为负类。
   如果我们减小这个阀值,更多的样本会被识别为正类,提高正类的识别率,但同时也会使得更多的负类被错误识别为正类。

   举个例子:逻辑回归对正负结果的判定默认是 0.5,模型预测的结果如果超过 0.5 则确定样本预测结果为正,否则样本预测为负,但是当我们将0.5 提高到 0.8,则 0.8 以下的就都预测为负了。
  为了直观表示这一现象,引入 ROC 曲线:根据分类结果计算得到空间中相应的点,连接这些点就形成 ROC curve


  ROC曲线中的主要两个指标就是真正率和假正率,其中横坐标为假正率(FPR),纵坐标为真正率(TPR),当二者相等时,表示的意义则是:对于不论真实类别是1还是0的样本,分类器预测为1的概率是相等的,此时AUC为0.5。


ROC曲线绘制: ROC曲线的横坐标为FPR,纵坐标为TPR

    1. 将预测结果按照预测为正类概率值排序
    1. 将阈值由1开始逐渐降低,按此顺序逐个把样本作为正例进行预测,每次可以计算出当前的FPR,TPR值
    1. 以TPR为纵坐标,FPR为横坐标绘制图像

在这里插入图片描述
ROC 曲线中有四个点需要注意,分别是:

  • 点(0,1):即 FPR=0, TPR=1,意味着 FN=0 且 FP=0,将所有的样本都正确分类。
  • 点(1,0):即 FPR=1,TPR=0,最差分类器,避开了所有正确答案。
  • 点(0,0):即FPR=TPR=0,FP=TP=0,分类器把每个实例都预测为负类。
  • 点(1,1):分类器把每个实例都预测为正类。

  ROC 曲线越接近左上角,该分类器的性能越好,其泛化性能就越好。最靠近左上角的ROC曲线上的点是分类错误最少的最好阈值,其假正例和假反例总数最少。而且一般来说,如果ROC是光滑的,那么基本可以判断没有太大的过拟合。


总结:

🎈ROC曲线:ROC曲线(receiver operating characteristic curve),

  • 是反映灵敏性和特效性连续变量的综合指标;
  • 是用构图法揭示敏感性和特异性的相互关系;
  • 它通过将连续变量设定出多个不同的临界值,从而计算出一系列敏感性和特异性;
  • ROC曲线是根据一系列不同的二分类方式(分界值或决定阈),以真正例率(True Positive Rate,TPR 也就是灵敏度)为纵坐标,假正例率(False Positive Rate,FPR,1-特效性)为横坐标绘制的曲线。

ROC曲线优缺点:

优点 :

  • 1、兼顾正例和负例的权衡。因为TPR聚焦于正例,FPR聚焦于与负例,使其成为一个比较均衡的评估方法。适用于评估分类器的整体性能。
  • 2、ROC曲线的两个指标, TPR的分母是所有正例,FPR的分母是所有负例,故都不依赖于具体的类别分布。

缺点:

  • 在类别不平衡的背景下,当负例N的数量远超正例P时,FP的大幅增长只能换来FPR的增长不明显,导致ROC曲线呈现一个过分乐观的效果估计。如果主要关心正例的预测准确性的话,这就不太可接受了。

六、AUC(曲线下面积)

  如果两条ROC曲线没有相交,我们可以根据哪条曲线最靠近左上角哪条曲线代表的学习器性能就最好。但是,实际任务中,情况很复杂,如果两条ROC曲线发生了交叉,则很难一般性地断言谁优谁劣。在很多实际应用中,我们往往希望把学习器性能分出个高低来。在此引入AUC面积。

  AUC(Area Under Curve): 被定义为 ROC 曲线下的面积( ROC 的积分),通常大于0.5小于1

  随机挑选一个正样本以及一个负样本,分类器判定正样本的值高于负样本的概率就是 AUC 值。AUC值(面积)越大的分类器,性能越好,如图:

在这里插入图片描述
  上图中 AUC=1 当然是最好的, 这代表着将所有的样本都正确分类,但是实际 AUC 是达不到 1 的,这种极端情况下只能说明样本数据是存在问题,需要再次筛选模型入模特征。

AUC只能用来评价二分类。AUC非常适合评价样本不平衡中的分类器性能

AUC的一般判断标准: AUC的范围在[0, 1]之间,并且越接近1越好

  • 0.5-0.7 : 效果较低,但用于预测股票已经很不错了
  • 0.7-0.85 : 效果一般
  • 0.85-0.95 : 效果很好
  • 0.95-1 : 效果非常好,但一般不太可能

AUC的概率意义: 随机取一对正负样本,正样本得分大于负样本得分的概率
AUC的物理意义: 曲线下面积对所有可能的分类阈值的效果进行综合衡量。曲线下面积的一种解读方式是:看作模型将某个随机正类别样本排列在某个随机负类别样本之上的概率。以下面的样本为例,逻辑回归预测从左到右以升序排列:

在这里插入图片描述

AUC的优点和缺点

优点:

  • AUC衡量的是一种排序能力,因此特别适合排序类业务;
  • AUC对正负样本均衡并不敏感,在样本不均衡的情况下,也可以做出合理的评估。
  • 其他指标比如precision,recall,F1,根据区分正负样本阈值的变化会有不同的结果,而AUC不需要手动设定阈值,是一种整体上的衡量方法。

缺点:

  • 忽略了预测的概率值和模型的拟合程度;
  • AUC反映了太过笼统的信息,无法反映召回率、精确率等在实际业务中经常关心的指标;
  • 它没有给出模型误差的空间分布信息,AUC只关注正负样本之间的排序,并不关心正样本内部,或者负样本内部的排序,这样我们也无法衡量样本对于好坏客户的好坏程度的刻画能力;

AUC计算

  AUC如果按照原始定义ROC曲线下的面积来计算,非常之麻烦。

  可以转换一下思路,按照上述给出的常用的AUC定义,即随机选出一对正负样本,分类器对于正样本打分大于负样本打分的概率。咱们就来算算这个概率到底是多少,那么也就算出AUC是多少了。

  假设数据集一共有M个正样本,N个负样本,预测值也就是M+N个。我们将所有样本按照预测值进行从小到大排序,并排序编号由1到M+N。

  • 对于正样本概率最大的,假设排序编号为 r a n k 1 rank_1 rank1 ,比它概率小的负样本个数= r a n k 1 − M rank_1-M rank1M (仔细体会一下);
  • 对于正样本概率第二大的 r a n k 2 rank_2 rank2 ,假设排序编号为
    ,比它概率小的负样本个数= r a n k 2 − ( M − 1 ) rank_2-(M-1) rank2(M1) ;
  • 以此类推…
  • 对于正样本概率最小的,假设排序编号为 r a n k M rank_M rankM ,比它概率小的负样本个数= r a n k M − 1 rank_M-1 rankM1

那么在所有情况下,正样本打分大于负样本的个数= r a n k 1 + r a n k 2 + ⋯ + r a n k M − ( 1 + 2 + ⋯ + M ) rank_1+rank_2+\cdots+rank_M-(1+2+\cdots+M) rank1+rank2++rankM(1+2++M)

所以,AUC的正式计算公式也就有了,如下!(需要牢记
A U C = ∑ i ∈ 正样本 r a n k ( i ) − M × ( 1 + M ) 2 M × N AUC=\frac{\sum_{i \in 正样本}rank(i)-\frac{M \times(1+M)}{2}}{M \times N} AUC=M×Ni正样本rank(i)2M×(1+M)
r a n k ( i ) rank(i) rank(i)表示正样本 i i i 的排序编号, M × N M \times N M×N表示随机从正负样本各取一个的所有情况数。一般考代码题,比如用python写个AUC计算,也是用上述公式原理。


  但是,还没有完,有一个小问题,可能大家没注意到。那就是如果有预测值是一样的,那么怎么进行排序编号呢?

  其实很简单,对于预测值一样的样本,我们将这些样本原先的排号平均一下,作为新的排序编号就完事了。仔细理解可看下图:
在这里插入图片描述
上图中,正样本个数M=5(黄底样本),负样本个数N=3(白底样本),预测值相同有4个(ID为CDEF)。我们将预测值pred相等的情况(上图红色字体),对其进行新的排序编号,变成(3+4+5+6)/4 = 4.5。

那么根据公式就可以算出上图的 A U C = ( 2 + 4.5 + 5.5 + 7 + 8 ) − 5 × ( 5 + 1 ) 2 5 × 3 = 0.7333 AUC = \frac{(2+4.5+5.5+7+8)-\frac{5 \times (5+1)}{2}}{5 \times 3}=0.7333 AUC=5×3(2+4.5+5.5+7+8)25×(5+1)=0.7333

用sklearn的auc计算验证一下,一样。
在这里插入图片描述


七、P-R曲线

  精确率和召回率是互相影响的,有时会相互矛盾,理想情况下肯定是做到两者都高,但是一般情况下精确率高、召回率就低,召回率低、精确率高,当然如果两者都低,那就是有地方出问题了。

  对于分类器来说,本质上是给一个概率,此时,我们再选择一个 CutOff 阈值点,高于这个点的判正,低于的判负,其中,这个点的选择需要结合你的具体场景去选择。

用不同的阀值,统计出一组不同阀值下的精确率和召回率,如下图:
PR曲线绘制
PR曲线的横坐标为召回率R,纵坐标为查准率P,绘制步骤如下:

    1. 将预测结果按照预测为正类概率值排序;
    1. 将概率阈值由1开始逐渐降低,按此顺序逐个把样本作为正例进行预测,每次可以计算出当前的P,R值;
    1. 以P为纵坐标,R为横坐标绘制点,将所有点连成曲线后构成PR曲线。

在这里插入图片描述
如何利用PR曲线对比算法的优劣:

    1. 如果一条曲线完全“包住”另一条曲线,则前者性能优于另一条曲线(P和R越高,代表算法分类能力越强)。
    1. PR曲线发生了交叉时:以PR曲线下的面积作为衡量指标,但这个指标通常难以计算
    1. 使用 “平衡点”(Break-Even Point),他是查准率=查全率时的取值,值越大代表效果越优
    1. BEP过于简化,更常用的是F1度量

  曲线越靠近右上边性能越好,描述曲线下方面积叫 AP 分数(Average Precision Score),AP 分数越高,表示模型性能越好。

但是有时候模型没有单纯的谁比谁好,和文章开头的例子一样,需要结合具体的使用场景。下面是两个场景:

  • 地震的预测:我们希望的是 Recall 非常高,也就是说每次地震我们都希望预测出来。这个时候我们可以牺牲 Precision。情愿发出 1000次 警报,把 10次 地震都预测正确了,也不要预测 100次 对了 8次 漏了 2次。
  • 嫌疑人定罪:基于不错怪一个好人的原则,对于嫌疑人的定罪我们希望是非常准确的。即时有时候放过了一些罪犯(Recall 低),但也是值得的。

  所以,针对场景,如果是做搜索,那就是保证召回的情况下提升精确率;如果做 疾病监测、反垃圾,则是保证精确率的条件下,提升召回;在两者都要求高的情况下,可以用 F1 来衡量

  反过来,场景会决定训练模型时的标准,比如第一个场景中,我们就只看Recall=99.9999%(地震全中)时的 Precision,其他指标就变得没有了意义。

  注意一下,PR 和 ROC 是两个不同的评价指标和计算方式,一般情况下,检索用 PR分类、识别等用 ROC


类别不平衡问题中如何选择PR与ROC

  这里特指负样本数量远大于正样本时,在这类问题中,我们往往更关注正样本是否被正确分类,即TP的值。PR曲线更适合度量类别不平衡问题

    1. 因为在PR曲线中TPR和FPR的计算都会关注TP,PR曲线对正样本更敏感
    1. ROC曲线正样本和负样本一视同仁,在类别不平衡时ROC曲线往往会给出一个乐观的结果。

八、 Python 实现代码

混淆矩阵、命中率、覆盖率、F1值

#随机森林模型
model= RandomForestClassifier(random_state=12,n_estimators = 300,class_weight={0:1,1:8},min_samples_split=8, min_samples_leaf=5,max_depth=6)
model.fit(x_train, y_train)'''输出混淆矩阵'''
#混淆矩阵中会给出命中率、覆盖率、F1值
import sklearn.metrics as metrics
pre_test = model.predict(x_test) #predict 默认阈值0.5, predict_proba 是没有默认阈值
print(metrics.confusion_matrix(y_test, pre_test, labels=[0, 1]))  # 混淆矩阵集的f1值
print(metrics.classification_report(y_test, pre_test))

在这里插入图片描述

ROC曲线、AUC面积

from sklearn import metrics
import matplotlib.pyplot as pltfpr, tpr, _ = metrics.roc_curve(labels, preds)
roc_auc = metrics.auc(fpr, tpr)plt.figure(figsize=(8, 7), dpi=80, facecolor='w')    # dpi:每英寸长度的像素点数;facecolor 背景颜色
plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (area = %0.2f)' % roc_auc)  # 绘制AUC面积
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlim([0.0, 1.05])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver operating characteristic')
plt.legend(loc="lower right") # 设置显示标签的位置
plt.grid(b=True, ls=':')  # 绘制网格作为底板;b是否显示网格线;ls表示line style
plt.show()from sklearn.metrics import roc_curve, roc_auc_score
import matplotlib.pyplot as plt'''将多个模型的ROC曲线绘制在一张图'''
from sklearn.metrics import roc_curve, roc_auc_score
import matplotlib.pyplot as plt##计算ROC值
fpr1, tpr1, thresholds1 = roc_curve(y_test, y_prob1)
roc_auc1 = roc_auc_score(y_test, y_prob1)fpr2, tpr2, thresholds2 = roc_curve(y_test, y_prob2)
roc_auc2 = roc_auc_score(y_test, y_prob2)# 绘制ROC曲线
plt.plot(fpr1, tpr1, color='darkorange', label='LR ROC curve (area = %0.2f)' % roc_auc1)
plt.plot(fpr2, tpr2, color='blue', label='SVM ROC curve (area = %0.2f)' % roc_auc2)plt.plot([0, 1], [0, 1], color='navy', linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver operating characteristic (ROC) curve')
plt.legend(loc="lower right")
plt.show()

参考:
分类模型评估方法
分类问题的 8 种评估方法(全)
精确率、召回率、F1值、ROC、AUC各自的优缺点

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

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

相关文章

【项目设计】网络版五子棋游戏

文章目录 一、项目介绍1. 项目简介2. 开发环境3. 核心技术4. 开发阶段 二、环境搭建1. 安装 wget 工具2. 更换 yum 源3. 安装 lrzsz 传输工具4. 安装⾼版本 gcc/g 编译器5. 安装 gdb 调试器6. 安装分布式版本控制工具 git7. 安装 cmake8. 安装 boost 库9. 安装 Jsoncpp 库10. 安…

四旋翼无人机的飞行原理--【其利天下分享】

近年来,无人机在多领域的便捷应用促使其迅猛的发展,如近年来的多场战争,无人机的战场运用发挥得淋漓尽致。 下面我们针对生活中常见的四旋翼无人机的飞行原理做个基础的介绍,以飨各位对无人机有兴趣的朋友。 一:四旋翼…

春秋云境靶场CVE-2022-28512漏洞复现(sql手工注入)

文章目录 前言一、CVE-2022-28512靶场简述二、找注入点三、CVE-2022-28512漏洞复现1、判断注入点2、爆显位个数3、爆显位位置4 、爆数据库名5、爆数据库表名6、爆数据库列名7、爆数据库数据 总结 前言 此文章只用于学习和反思巩固sql注入知识,禁止用于做非法攻击。…

腐蚀监测常用技术及作用

上次我们介绍了设备状态监测中的红外热像技术>>热成像仪的工作原理及在工业设备状态监测中的应用,这次我们一起来探讨腐蚀监测技术方面的内容。 在工业领域中,腐蚀监测技术是腐蚀控制的重要部分和可靠而有效的手段。通过对设备的腐蚀情况进行监测和…

【JVM】Java虚拟机

本文主要介绍了JVM的内存区域划分,类加载机制以及垃圾回收机制. 其实JVM的初心,就是让java程序员不需要去了解JVM的细节,它把很多工作内部封装好了.但是学习JVM的内部原理有利于我们深入理解学习Java. 1.JVM的内存区域划分 JVM其实是一个java进程 ; 每个java进程,就是一个jvm…

Apache Airflow (九) :Airflow Operators及案例之BashOperator及调度Shell命令及脚本

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹…

科技创新 共铸典范 | 江西卫健办邓敏、飞图影像董事长洪诗诗一行到访拓世科技集团,提振公共卫生事业发展

2023年11月15日,拓世科技集团总部迎来了江西省卫健项目办项目负责人邓敏、江西飞图影像科技有限公司董事长洪诗诗一行的考察参观,集团董事长李火亮、集团高级副总裁方高强进行热情接待。此次多方交流,旨在共同探讨携手合作,激发科…

Django+Vue项目创建 跑通

参考链接: 【精选】DjangoVue项目构建_django vue-CSDN博客 一、背景 主要介绍如何使用后端Django 前端Vue 的技术栈快速地搭建起一套web项目的框架。 为什么使用Django和Vue? Django是Python体系下最成熟的web框架之一,由于Python语言的易用…

【机器学习Python实战】线性回归

🚀个人主页:为梦而生~ 关注我一起学习吧! 💡专栏:机器学习python实战 欢迎订阅!后面的内容会越来越有意思~ ⭐内容说明:本专栏主要针对机器学习专栏的基础内容进行python的实现,部分…

Redux-状态管理组件

一、简介 react中的状态只属于某个组件。而Redux是一个全局管理js状态的架构,让组件通信更加容易。 之前是状态在所有组件间传递,而redux通过store来实现这个功能。 Redux特性: 1.Single source Of truth,通过store唯一维护状态…

网工内推 | 国企、港企网工,年底双薪,NA以上认证即可

01 中航期货有限公司 招聘岗位:信息技术部-网络工程师 职责描述: 1、负责总部、分支机构、外联单位网络的日常运维、故障和应急处置,特别是定期监测设备的运行状态,对存在隐患的地方及时发现改正,保持网络稳定通畅&am…

Java 12 及Tomcat 部署配置

使用的软件版本 1. Java12部署 和之前的Java版本不太一样,12版本不用配置JRE环境。 解压缩文件夹 root账户执行 tar -xzvf /home/software/jdk-12.0.2_linux-x64_bin.tar.gz创建java文件夹 root账户执行 cd /usr mkdir java移动Java文件到创建的文件夹下 root账…

多态语法详解

多态语法详解 一:概念1:多态实现条件 二:重写:三:向上转型和向下转型1:向上转型:1:直接赋值:2:方法传参3:返回值 2:向下转型 一:概念 1:同一个引…

LINMP搭建wordpress-数据库不分离

目录 一、nginx部署 1.安装nginx前的系统依赖环境检查 2.下载nginx源代码包 3.解压缩源码包 4.创建普通的nginx用户 5.开始编译安装nginx服务 6.创建一个软连接以供集中管理 7.配置nginx环境变量 二、mysql 1.创建普通mysql用户 2.下载mysql二进制代码包 3.创建mys…

力扣刷题-二叉树-完全二叉树的节点个数

222.完全二叉树的节点个数 给出一个完全二叉树,求出该树的节点个数。 示例 1: 输入:root [1,2,3,4,5,6] 输出:6 示例 2: 输入:root [] 输出:0 示例 3: 输入:root [1]…

鸿蒙4.0开发笔记之DevEco Studio之配置代码片段快速生成(三)

一、作用 配置代码片段可以让我们在Deveco Studio中进行开发时快速调取常用的代码块、字符串或者某段具有特殊含义的文字。其实现方式类似于调用定义好变量,然而这个变量是存在于Deveco Studio中的,并不会占用项目的资源。 二、配置代码段的方法 1、打…

微信小程序配置企业微信的在线客服

配置企业微信后台 代码实现 <button tap"openCustomerServiceChat">打开企业微信客服</button>methods: {openCustomerServiceChat(){wx.openCustomerServiceChat({extInfo: {url: 你刚才的客服地址},corpId: 企业微信的id,showMessageCard: true,});} …

力扣刷题-二叉树-二叉树最小深度

给定一个二叉树&#xff0c;找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明&#xff1a;叶子节点是指没有子节点的节点。&#xff08;注意题意&#xff09; 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#x…