二元分类模型评估方法

文章目录

  • 前言
  • 一、混淆矩阵
  • 二、准确率
  • 三、精确率&召回率
  • 四、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 plt

fpr, 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各自的优缺点

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

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

相关文章

图像分类系列(三) GoogLeNet InceptionV1学习详细记录

前言 ​ 在上一期中介绍了VGG,VGG在2014年ImageNet 中获得了定位任务第1名和分类任务第2名的好成绩,而今天要介绍的就是同年分类任务的第一名——GoogLeNet 。 ​ 作为2014年ImageNet比赛冠军,GoogLeNet 比VGG更深的网络,比Alex…

虹科示波器 | 汽车免拆检修 | 2015款奔驰G63AMG车发动机偶尔自动熄火

一、故障现象 一辆2015款奔驰G63AMG车,搭载157发动机,累计行驶里程约为9.4万km。车主反映,该车低速行驶时,发动机偶尔会自动熄火,故障大概1个星期出现1次。 二、故障诊断 接车后路试,故障未能再现。用故障检…

MyBatis查询数据库(全是精髓)

1. 什么是MyBatis? 简单说,MyBatis就是一个完成程序与数据库交互的工具,也就是更简单的操作和读取数据库的工具。 2. 怎么学习Mybatis Mybatis学习只分为两部分: 配置MyBatis开发环境使用MyBatis模式和语法操作数据库 3. 第一…

【Gradle构件工具深度学习】

Gradle构件工具深度学习 1. 课程大纲1.1 Gradle入门1.2 与Idea整合1.3 Gradle进阶 2. 常见项目构建工具3. 安装gradle 1. 课程大纲 1.1 Gradle入门 基本介绍、常用指令、项目目录、项目应用 1.2 与Idea整合 Groovy语法、整合IDEA、搭建web工程、项目部署 1.3 Gradle进阶 生命周…

springboot jar包 无法读取静态资源文件

springboot jar包 无法读取静态资源文件 参考 springboot项目读取resources目录下的文件的9种方式 Resource resource resourceLoader.getResource("classpath:static/jkbw/jkbw4.txt");try{InputStream inputStream resource.getInputStream();BufferedReader r…

基于知识图谱+flask的大数据电影问答系统(超详细讲解及源码)

大数据知识图谱项目——基于知识图谱flask的大数据电影问答系统(超详细讲解及源码) 一、项目概述 知识图谱是将知识连接起来形成的一个网络。由节点和边组成,节点是实体,边是两个实体的关系,节点和边都可以有属性。知…

基于秃鹰算法优化概率神经网络PNN的分类预测 - 附代码

基于秃鹰算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于秃鹰算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于秃鹰优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神经网络的光滑…

Spring初识

未来的几周时间,大概率我会更新一下Spring家族的一些简单知识。而什么是Spring家族,好多同学还不是很清楚,我先来简单介绍一下吧: 所谓Spring家族,它其实就是一个框架,是基于Servlet再次进行封装的内容。为…

Redis篇---第六篇

系列文章目录 文章目录 系列文章目录前言一、Redis 为什么设计成单线程的?二、什么是 bigkey?会存在什么影响?三、熟悉哪些 Redis 集群模式?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,…

从0开始学习JavaScript--JavaScript 表达式与运算符

JavaScript中的表达式和运算符是构建逻辑、进行计算的基础。本文将深入研究JavaScript中各类表达式,包括算术表达式、关系表达式、逻辑表达式,以及运算符的使用方法,并通过丰富的示例代码来帮助读者更全面地了解和运用这些概念。 算术表达式…

【算法萌新闯力扣】:两个数组的交集

力扣热题:两个数组的交集 开篇 今天早上状态不错,花了较短的时间刷了4道力扣算法题。挑选了一道还不错的题目与大伙分享。 题目链接:349.两个数组的交集 题目描述 代码思路 看到题目后,想到可以把一个数组用集合存起来,然后用…

【Linux】 uptime命令使用

uptime 正常运行时间提供以下信息的单行显示。当前时间、系统运行的时间、当前登录的用户数量以及过去1、5和15分钟的系统平均负载。 语法 uptimeuptime命令 -Linux手册页 作者 由Larry Greenfield编写和迈克尔K约翰逊编写。 命令选项及作用 执行令 man uptime 执行命令结…

基于Zemax的高能激光发射系统的扩束系统设计

关键词:高功率激光发射系统;扩束系统 1 引言 高功率激光发射系统是强激光空间传输系统中不可缺少的装置。对高功率激光发射系统的研究一直是激光应用领域的关键技术问题。高功率激光发射系统通常由准直系统、导光光路系统和扩束系统组成,光学系统要求具…

关于新版的Maven创建Maven项目的时候只有Maven Archetype,而找不到Maven的这个问题

问题情况 : 在最近的学习过程中,想要创建一个Maven模块用于分块设计,但是在idea里面创建Maven项目的时候,发现与maven相关的只有Maven Archetype这个模块,然后找不到单纯的Maven模块;就像下面这样 : 解决方案 : 其…

jvm 内存结构 ^_^

1. 程序计数器 2. 虚拟机栈 3. 本地方法栈 4. 堆 5. 方法区 程序计数器 定义: Program Counter Register 程序计数器(寄存器) 作用,是记住下一条jvm指令的执行地址 特点: 是线程私有的 不会存在内存溢出 虚拟机栈…

stm32入门建议跳过固件库去学习hal库吗?

stm32入门建议跳过固件库去学习hal库吗? 如果要以单片机作为以后的工作方向,建议还是深入了解一下单片机的原理与机制,比如串口收发的时候,内部的寄存器是怎么工作的,中断又是怎么工作的,然后我们又是怎么进行中断处…

基于黑猩猩算法优化概率神经网络PNN的分类预测 - 附代码

基于黑猩猩算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于黑猩猩算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于黑猩猩优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神经网络…

Redis(哈希Hash和发布订阅模式)

哈希是一个字符类型字段和值的映射表。 在Redis中,哈希是一种数据结构,用于存储键值对的集合。哈希可以理解为一个键值对的集合,其中每个键都对应一个值。哈希在Redis中的作用主要有以下几点: 1. 存储对象:哈希可以用…

Linux 进程管理 实时调度类及SMP和NUMA

文章目录 一、 实时调度类分析1.1 实时调度实体sched_rt_entity数据结构1.2 实时调度类rt_sched_class数据结构1.3 实时调度类功能函数 二、SMP和NUMA2.1 SMP(多对称处理器结构,UMA)2.2 NUMA(非一致内存访问结构)2.3 C…