学习笔记: 机器学习经典算法-分类算法模型的评价指标

简介: 机器学习经典算法-个人笔记和学习心得分享

1、分类准确度(accuracy)

分类准确率(ACC,accuracy ): 该指标描述了统计测试集的模型预测结果与真实标签的一致度,是一般情况下在 无倾斜样本总体 的分类评价中最常用的指标,准确率越高,意味着分类模型效果越好。
ACC=TN+TPTN+FP+FN+TP


np.sum( Y_predict ==Test_Y)/len(Test_y)

缺点: 分类准确度评估指标 很大程度上依赖样本集的标签分布,对例如样本集中存在 99.9% 的负 (0)0.1% 正 (1) 样本分布,即使算法模型将所有样本都预测为负 (0) 样本,也有样本的分类准确率也能达到 99.9% 。这样即使分类准确率很高,但该模型却几乎没有识别 正例样本的 的能力。所以对于 极度偏斜的数据总体(Skewed Data),总体中存在发生概率极低的事件(如A事件小于 5%,B事件大于95%),从总体采样用于训练测试的原始数据,使用 分类准确度(accuracy ) 来评估模型准确度的话,哪怕分类模型将所有小概率事件A判断为B,模型的准确度也能达到 95%,意味着训练的分类模型并未对待解决的问题起任何作用,同基于事件的发生概率进行随机预测的结果一样,

2、基于【混淆矩阵 Confusion Matrix】 提出的优化评估方法

混淆矩阵 用以总结分类问题的预测结果。使用计数的方式统计正确和错误预测的样例结果数量,按分类类别进行细分记录在混淆矩阵里面,用以比较分类结果和实际测得值。

基于 混淆矩阵 提出的优化分类评估指标

  • 精准率
    precision=TPTP+FP

精准率 的表达式描述了预测为正例的样本中正确预测的情况。
其主要意义:通常在现实 有偏数据(Skewed Data) 中,自然发生概率极低的事件往往才是关注对象。比如医疗中的疾病患者对象,使用阳性(Positive)标记疾病状态(对应混淆矩阵中的 "1")。所以 精准率 主要用来反映模型对研究关注的事件的预测准确度。

  • 召回率
    recall=TPTP+FN

    召回率 的表达式描述了真实发生的正例事件中,被模型正确预测的情况,也即模型预测中覆盖面的度量。

精准率 和 召回率 的应用场景:
在模型评估中,使用 召回率精准率 作为具体的评价指标需要依应用场景而定。

  • 对更侧重于 未来事件的风险判断 应用中(像股票预测,就会更侧重于模型生成的待买入股票的涨跌预测效果,而不是是这些股票过去的涨跌预测效果),从而使用精准率 作为评价指标。
  • 在医疗领域应用中,通常需要避免犯 FN 的错误,即如果算法没有成功识别阳性患者,就会拖延患者病情延误治疗,而对于模型的 FP 错误造成的影响则没那么严重,因为假阳性的患者通过进一步检查是可以被识别出来的,这样一定程度上能够帮助节省人力资源将所有阳性患者都筛选出来,从而需要使用 召回率 作为主要的评价指标。

对于  **极度偏斜偏数据(Skewed Data)** 来说,结合 **precision ** 和 **recall** 能更准确地对模型效果进行评估

2.1.1 混淆矩阵和 精准率/召回率 的python 实现

import numpy as np
from sklearn import datasets

### 创建二分类预测数据集
digits = datasets.load_digits()
x = digits.data
y = digits.target.copy()
y[digits.target == 9] = 1
y[digits.target != 9] = 0
from sklearn.model_selection import train_test_split
Train_X,Test_X,Train_Y,Test_Y = train_test_split(x,y,random_state=666)

### 应用逻辑回归进行数据二分类
from sklearn.linear_model import LogisticRegression
log_reg = LogisticRegression(solver='lbfgs', max_iter=1000)
log_reg.fit(Train_X,Train_Y)
Test_y_predict = log_reg.predict(Test_X)

### 自实现混淆矩阵
def TN(Y_T,Y_P):
    assert len(Y_T) == len(Y_P)
    return np.sum((Y_T == 0) & (Y_P == 0))
def FP(Y_T,Y_P):
    assert len(Y_T) == len(Y_P)
    return np.sum((Y_T == 0) & (Y_P == 1))
def FN(Y_T,Y_P):
    assert len(Y_T) == len(Y_P)
    return np.sum((Y_T == 1) & (Y_P == 0))
def TP(Y_T,Y_P):
    assert len(Y_T) == len(Y_P)
    return np.sum((Y_T == 1) & (Y_P == 1))
def confusion_matrix(Y_T,Y_P):
    return np.array([
        [TN(Y_T,Y_P),FP(Y_T,Y_P)],
        [FN(Y_T,Y_P),TP(Y_T,Y_P)] 
    ])
confusion_matrix(Test_Y,Test_y_predict)

### 计算精准率和召回率
def precision_score(Y_T,Y_P):
    try:
        return TP(Y_T,Y_P) / (TP(Y_T,Y_P) + FP(Y_T,Y_P))
    except:
        return 0.0
precision_score(Test_Y,Test_y_predict)
def recall_score(Y_T,Y_P):
    try:
        return TP(Y_T,Y_P) / (TP(Y_T,Y_P) + FN(Y_T,Y_P))
    except:
        return 0.0
recall_score(Test_Y,Test_y_predict)
AI 代码解读

2.1.2 scikit-learn中的混淆矩阵,精准率和召回率

from sklearn.metrics import confusion_matrix  ### 混淆矩阵
confusion_matrix(Test_Y,Test_y_predict)
from sklearn.metrics import precision_score   ### 精准率
precision_score(Test_Y,Test_y_predict)
from sklearn.metrics import recall_score      ### 召回率
recall_score(Test_Y,Test_y_predict)
AI 代码解读

2.2 F1 Score

F1 Score 是 精准率(precision)和召回率(recall) 的 调和平均值
1F1=12(1precision+1recall)F1=2precisionrecallprecision+recall

调和平均值的意义:
如果要综合两个评价指标为一个,最简单的处理方式即取连个指标值的 算数平均值indic=12(precision+recall) ; 但是当这两个指标值出现一个值极高,一个值极低的极端分布情况下,就会有综合指标值也会是一个相对较高的结果,对于评价的代表性来说,就会错误度量了模型的效果。使用 调和平均值 的情况下,如果两个指标值极端不平衡,得到的 F1 score 就会非常低,只有两个指标值都非常高时 F1 score 才会非常高,从而使用调和平均值能够较好地综合了 精准率和召回率两种评价指标的结果来度量模型效果。F1 score 适用于需要 精准率和召回率 都是越大越好的评价环境中。

sklearn 下的 F1 score

from sklearn.metrics import f1_score
f1_score(Test_Y,Test_y_predict)
AI 代码解读

3、 Precision-Recall 的矛盾和平衡

在应用二分类模型进行数据分类时,分类的标准依据的是分类器计算的样本得分;如果要求模型的 精准率 更高,只能通过
收窄正例的识别域,也即提高判断为 1 的概率值阈值(如从 50% 提高到 90% 作为识别正例的标准),就会导致更多的低概率值的正例样本变成 FN ,召回率指标变小。同理,要想 召回率指标变大,就会产生更多的 FP 结果,精准率 变小。所以 Precision 和 Recall 两者是一对矛盾负相关的指标,两者不可能同时变大或变小。

Precision-Recall 的矛盾

3.1 Precision-Recall Curve (PR 曲线)

根据 Precision-Recall Curve 曲线,可以简单判断 当精准率和召回率 取值都相对较高的平衡点下对应的分类决策值阈值。

### 应用逻辑回归进行数据预测
from sklearn.linear_model import LogisticRegression
log_reg = LogisticRegression(solver='lbfgs', max_iter=1000)
log_reg.fit(Train_X,Train_Y)
decision_score = log_reg.decision_function(Test_X)  ### 获取决策分数的预测值

### draw PR curve 
from sklearn.metrics import precision_recall_curve
precision,recall,threshold = precision_recall_curve(Test_Y,decision_score)
import matplotlib.pyplot as plt
plt.plot(threshold,precision[:-1])
plt.plot(threshold,recall[:-1])
plt.show()
AI 代码解读

3.2 ROC曲线

ROC曲线(receiver operating characteristic curve) 用以描述 TPRFPR 之间的关系;
TPR=TPTP+FN  ,     FPR=FPTN+FP


TPR 描述的是正例被正确预测的覆盖率,本质为 召回率recall ;
FPR 描述的是负例样本中被错误预测的覆盖率,也即模型犯 FP 错误的概率;

Precision-Recall两指标的矛盾不同,当选取不同的分类决策值时, TPRFPR 两个指标具正相关的一致变化趋势;要使得正例的预测覆盖率(recall)增大,只能降低判断为正例的决策分数,那么此时就会引起许多负例被错误识别为正例,从而 TPRFPR 两个指标呈现正相关变化。

3.2.2 scikit-learn 下绘制ROC曲线

### 应用逻辑回归进行数据预测
from sklearn.linear_model import LogisticRegression
log_reg = LogisticRegression(solver='lbfgs', max_iter=1000)
log_reg.fit(Train_X,Train_Y)
decision_score = log_reg.decision_function(Test_X)

### draw PR curve 
from sklearn.metrics import roc_curve
fprs,tprs,threshold = roc_curve(Test_Y,decision_score)
import matplotlib.pyplot as plt
plt.plot(fprs,tprs)
plt.show()
AI 代码解读

3.2.3 scikit-learn 计算ROC曲线下面积(ROC_AUC_score)

对于使用 ROC曲线 进行分类效果评价时,通常使用 曲线下面积(auc,area under curve) 来度量不同超参数下训练的模型或不同算法的分类模型的分类效果。即如果有分类模型犯FP 错误越少(FPR 值越低)的时候有 TPR (正例覆盖率) 越大,就会将左侧部分的曲线整体拉高,从而使得曲线下面积变大,意味着模型能够在犯更少FP错误的情况下准确预测正例,模型分类效果越好。ROC曲线下面积这一评估指标 对 有偏数据总体 的分类效果评估相比 精准率和召回率 敏感度还要弱,适用面更广。

### 应用逻辑回归进行数据预测
from sklearn.linear_model import LogisticRegression
log_reg = LogisticRegression(solver='lbfgs', max_iter=1000)
log_reg.fit(Train_X,Train_Y)
decision_score = log_reg.decision_function(Test_X)

### draw PR curve 
from sklearn.metrics import roc_auc_score
roc_auc_score(Test_Y,decision_score)
AI 代码解读

4、多分类问题的混淆矩阵

多分类问题混淆矩阵与二分类混淆矩阵的原理一致,行方向依旧是样本的真实的分类排律,列方向则是预测结果:

4.2 混淆矩阵的可视化

混淆矩阵对角线的值是预测与真值一致的结果;通过统计每个类别样本中,分类错误的分布情况,从混淆矩阵可视化能更加直观简单地了解错误的分布。

4.3 scikit-learn 的多分类混淆矩阵与二分类混淆矩阵一致

### 创建二分类预测数据集
digits = datasets.load_digits()
x = digits.data
y = digits.target.copy()
from sklearn.model_selection import train_test_split
Train_X,Test_X,Train_Y,Test_Y = train_test_split(x,y,random_state=666)

### 应用逻辑回归进行数据预测
from sklearn.linear_model import LogisticRegression
log_reg = LogisticRegression(solver='lbfgs', max_iter=1e5)
log_reg.fit(Train_X,Train_Y)
Test_y_predict = log_reg.predict(Test_X)

### Multi-Class classification Confusion Matrix
from sklearn.metrics import confusion_matrix
confusion_matrix(Test_Y,Test_y_predict)
AI 代码解读

4.2 scikit-learn 的多分类问题的评价指标与二分类问题一致

from sklearn.metrics import precision_score   ### 多分类问题的精准率
precision_score(Test_Y,Test_y_predict,average= "micro")
AI 代码解读
目录
打赏
0
0
0
0
186
分享
相关文章
【解决方案】DistilQwen2.5-DS3-0324蒸馏小模型在PAI-ModelGallery的训练、评测、压缩及部署实践
DistilQwen 系列是阿里云人工智能平台 PAI 推出的蒸馏语言模型系列,包括 DistilQwen2、DistilQwen2.5、DistilQwen2.5-R1 等。本文详细介绍DistilQwen2.5-DS3-0324蒸馏小模型在PAI-ModelGallery的训练、评测、压缩及部署实践。
PAI 重磅发布模型权重服务,大幅降低模型推理冷启动与扩容时长
阿里云人工智能平台PAI 平台推出模型权重服务,通过分布式缓存架构、RDMA高速传输、智能分片等技术,显著提升大语言模型部署效率,解决模型加载耗时过长的业界难题。实测显示,Qwen3-32B冷启动时间从953秒降至82秒(降幅91.4%),扩容时间缩短98.2%。
算法及模型合规:刻不容缓的企业行动指南
随着AI技术迅猛发展,算法与模型成为企业数字化转型的核心。然而,国家密集出台多项法规,如《人工智能生成合成内容标识办法》等,并开展“清朗·整治AI技术滥用”专项行动,标志着AI监管进入严格阶段。算法备案从“可选项”变为“必选项”,未合规可能面临罚款甚至刑事责任。同时,多地提供备案奖励政策,合规既是规避风险的需要,也是把握政策红利和市场信任的机遇。企业需系统规划合规工作,从被动应对转向主动引领,以适应AI时代的挑战与机遇。
20分钟掌握机器学习算法指南
在短短20分钟内,从零开始理解主流机器学习算法的工作原理,掌握算法选择策略,并建立对神经网络的直观认识。本文用通俗易懂的语言和生动的比喻,帮助你告别算法选择的困惑,轻松踏入AI的大门。
156 8
【新模型速递】PAI-Model Gallery云上一键部署MiniMax-M1模型
MiniMax公司6月17日推出4560亿参数大模型M1,采用混合专家架构和闪电注意力机制,支持百万级上下文处理,高效的计算特性使其特别适合需要处理长输入和广泛思考的复杂任务。阿里云PAI-ModelGallery现已接入该模型,提供一键部署、API调用等企业级解决方案,简化AI开发流程。
DistilQwen-ThoughtX 蒸馏模型在 PAI-ModelGallery 的训练、评测、压缩及部署实践
通过 PAI-ModelGallery,可一站式零代码完成 DistilQwen-ThoughtX 系列模型的训练、评测、压缩和部署。
阿里云PAI-全模态模型Qwen2.5-Omni-7B推理浅试
阿里云PAI-全模态模型Qwen2.5-Omni-7B推理浅试
380 12
Qwen3 全尺寸模型支持通过阿里云PAI-ModelGallery 一键部署
Qwen3 是 Qwen 系列最新一代的大语言模型,提供了一系列密集(Dense)和混合专家(MOE)模型。目前,PAI 已经支持 Qwen3 全系列模型一键部署,用户可以通过 PAI-Model Gallery 快速开箱!
基于WOA鲸鱼优化的BiLSTM双向长短期记忆网络序列预测算法matlab仿真,对比BiLSTM和LSTM
本项目基于MATLAB 2022a/2024b实现,采用WOA优化的BiLSTM算法进行序列预测。核心代码包含完整中文注释与操作视频,展示从参数优化到模型训练、预测的全流程。BiLSTM通过前向与后向LSTM结合,有效捕捉序列前后文信息,解决传统RNN梯度消失问题。WOA优化超参数(如学习率、隐藏层神经元数),提升模型性能,避免局部最优解。附有运行效果图预览,最终输出预测值与实际值对比,RMSE评估精度。适合研究时序数据分析与深度学习优化的开发者参考。
基于PSO粒子群优化的BiLSTM双向长短期记忆网络序列预测算法matlab仿真,对比BiLSTM和LSTM
本项目基于MATLAB2022a/2024b开发,结合粒子群优化(PSO)算法与双向长短期记忆网络(BiLSTM),用于优化序列预测任务中的模型参数。核心代码包含详细中文注释及操作视频,涵盖遗传算法优化过程、BiLSTM网络构建、训练及预测分析。通过PSO优化BiLSTM的超参数(如学习率、隐藏层神经元数等),显著提升模型捕捉长期依赖关系和上下文信息的能力,适用于气象、交通流量等场景。附有运行效果图预览,展示适应度值、RMSE变化及预测结果对比,验证方法有效性。

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问