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

目录

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

精确率(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

相关推荐
地平线开发者4 小时前
J6B vio scenario sample
算法
冬奇Lab7 小时前
Workflow 系列(04):Multi-Agent 协调——编排器边界、并发控制与上下文隔离
人工智能·工作流引擎
冬奇Lab7 小时前
每日一个开源项目(第147篇):HyperGraphRAG - 用超图表示 N 元关系,RAG 的第三代范式
人工智能·开源·graphql
甲维斯7 小时前
Github + 阿里云oss实现类似codex的自动更新!
人工智能
阿里云大数据AI技术9 小时前
光轮智能 × 阿里云:共建 Physical AI 云上数据、评测与持续学习基础设施
人工智能·机器学习
机器之心9 小时前
实锤了:Claude Code偷查用户,时区、中国AI实验室全是关键词
人工智能·openai
网易云信9 小时前
Cursor点燃个人开发者,企业级AI为何频频受挫?Agent工厂从提效工具到AI员工的跃迁
人工智能·开源
网易云信9 小时前
解锁触手可及的温暖:网易智企 x Wander Puffs AI 云游泡芙
人工智能