机器学习 —— 逻辑回归(混淆矩阵)

目录

模型的预测结果与实际标签的对比情况

精确率(Precision)

召回率(Recall)

F1-score

具体案例:

已知:样本有10个,有6个恶性肿瘤样本,4个良性肿瘤样本。假设恶性肿瘤为正例

模型A,预测对了3个恶性,4个良性。计算TP、FN、FP、TN

分析->

模型B,预测对了6个恶性,1个良性。计算TP、FN、FP、TN

分析->

[代码 - > 混淆矩阵模型](#代码 - > 混淆矩阵模型)

1.导包

2.真实数据

[3.模型A 模型B 预测值](#3.模型A 模型B 预测值)

4.构建混淆矩阵

5.优化混淆矩阵

6.模型评估

总结


模型的预测结果与实际标签的对比情况

1.真实值是正例,预测值为正例 ------ 真正例 TP (True Positive)

2.真实值是正例,预测值为假例 ------ 伪反例 FN (False Positive)

3.真实值是假例,预测值为正例 ------ 真反例 FP (False Positive)

4.真实值是假例,预测值为假例 ------ 真反例 TN (False Negative)

精确率(Precision)

查准率,对正例样本的预测准确率。

计算方法

召回率(Recall)

查全率,指的是预测为真正例样本占所有真正正例样本的比重

计算方法

F1-score

若对模型的精确率、召回率都有要求,评估模型在这两个评估方向的综合预测能力。

计算方法

具体案例:

已知:样本有10个,有6个恶性肿瘤样本,4个良性肿瘤样本。假设恶性肿瘤为正例

模型A,预测对了3个恶性,4个良性。计算TP、FN、FP、TN

精确率P = TP / (TP + FP) = 3 / (3 + 0) = 100%

召回率P = TP/ (TP + FN) = 3 / (3 + 3) = 50%

F1 - score = 2 * 精确率P * 召回率P / (精确率P + 召回率P)

= 2* 1 * 0.5 / (1.5)

= 67%

分析->

对了7个,样本有10个,剩余3个预测错了。

样本6个恶心,预测3个良性

样本4个良性,预测4个良性。

所以剩下3个良性

代码数据为

python 复制代码
y_predict_A = ['恶性','恶性','恶性','良性','良性','良性','良性','良性','良性','良性']
模型B,预测对了6个恶性,1个良性。计算TP、FN、FP、TN

精确率P = TP / (TP + FP) = 6 / (6 + 3) = 67%

召回率P = TP/ (TP + FN) = 6 / (6 + 0) = 100%

F1 - score = 2 * 精确率P * 召回率P / (精确率P + 召回率P)

= 2* (6/9) * 1 / (1+6/9)

= 80%

分析->

对了7个,样本有10个,剩余3个预测错了。

样本6个恶性,预测6个恶性

样本4个良性,预测1个良性。

所以剩下3个恶性

代码数据为

python 复制代码
y_predict_B = ['恶性','恶性','恶性','恶性','恶性','恶性','恶性','恶性','恶性','良性']

代码 - > 混淆矩阵模型

1.导包

python 复制代码
import pandas as pd
from sklearn.metrics import confusion_matrix  #混淆矩阵
from sklearn.metrics import (
    accuracy_score,   # 准确率
    recall_score,     # 召回率
    precision_score,  # 精确率
    f1_score          # F1分数
)

2.真实数据

python 复制代码
y_train = ['恶性','恶性','恶性','恶性','恶性','恶性','良性','良性','良性','良性']

3.模型A 模型B 预测值

python 复制代码
y_predict_A = ['恶性','恶性','恶性','良性','良性','良性','良性','良性','良性','良性']
y_predict_B = ['恶性','恶性','恶性','恶性','恶性','恶性','恶性','恶性','恶性','良性']

4.构建混淆矩阵

python 复制代码
label = ['恶性','良性']  #标签1 代表(正例)
cm_A = confusion_matrix(y_train, y_predict_A,labels=label)
cm_B = confusion_matrix(y_train, y_predict_B,labels=label)

5.优化混淆矩阵

python 复制代码
df_label = ['恶性(正例)','良性(反例)']
df_A = pd.DataFrame(cm_A,index=df_label,columns=df_label)
df_b = pd.DataFrame(cm_B,index=df_label,columns=df_label)
print(f'混淆矩阵模型A:\n {df_A}')
print(f'混淆矩阵模型B:\n {df_b}')

6.模型评估

python 复制代码
print("=============   模型A ================")
print(f'准确率:{accuracy_score(y_train,y_predict_A):.2f}')
print(f'精确率:{precision_score(y_train,y_predict_A,pos_label="恶性"):.2f}')
print(f'召回率:{recall_score(y_train,y_predict_A,pos_label="恶性"):.2f}')
print(f'F1-sore:{f1_score(y_train,y_predict_A,pos_label="恶性"):.2f}')

print("=============   模型B ================")
print(f'准确率:{accuracy_score(y_train,y_predict_B):.2f}')
print(f'精确率:{precision_score(y_train,y_predict_B,pos_label="恶性"):.2f}')
print(f'召回率:{recall_score(y_train,y_predict_B,pos_label="恶性"):.2f}')
print(f'F1-sore:{f1_score(y_train,y_predict_B,pos_label="恶性"):.2f}')

总结

分类模型评估指标 准确率、精确率、召回率、F1-score

回归模型评估指标 MAE、MSE、RMSE

相关推荐
Shockang1 小时前
llama.cpp 本地运行 9B 模型:部署、工具调用与微调数据
人工智能
Shockang1 小时前
n8n 智能体工作流实战:触发、工具、记忆与发布护栏
人工智能
冬奇Lab3 小时前
开源项目第241期:YuE2 —— 用符号乐谱当“白盒“接口的开源音乐生成模型,SongBench 超越 Suno v5/v6
人工智能
鶴哥只手遮天4 小时前
Spring AI 2.0.1 深度解析-第 14 章 MCP 服务端(上):注解式实现与工具来源
java·人工智能·开源
鶴哥只手遮天4 小时前
Spring AI 2.0.1 深度解析-第 15 章 MCP 服务端(下):三种协议形态、Streamable 传输与状态管理
java·人工智能·开源
鶴哥只手遮天4 小时前
Spring AI 2.0.1 深度解析-第 16 章 向量存储(上):`VectorStore` 接口体系、`BatchingStrategy`
java·人工智能·开源
鶴哥只手遮天4 小时前
Spring AI 2.0.1 深度解析-第 12 章 工具循环的流式形态、Usage 累加与扩展体系
java·人工智能·开源
鶴哥只手遮天4 小时前
Spring AI 2.0.1 深度解析-第 23 章 模型供应商实现:从 `OpenAiSetup` 到 Bedrock
java·人工智能·开源
鶴哥只手遮天4 小时前
Spring AI 2.0.1 深度解析-第 06 章 内置 Advisor 全景:13 个实现逐个剖到源码级
java·人工智能·开源