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

目录

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

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

相关推荐
磊 子2 小时前
八大排序之插入排序+希尔排序
数据结构·算法·排序算法
帐篷Li2 小时前
AI Token中转站盈利模式深度解析:定价、获客与成本控制
人工智能·github
AI视觉网奇2 小时前
copilot-api 部署笔记
人工智能·深度学习
淮北4942 小时前
claude +obsidian 建立自己的AI知识库,基于 karpathy
人工智能·claude·知识库·obsidian·chrom
TechMasterPlus2 小时前
agent-browser 技术深度解析:Vercel 推出的 AI 时代浏览器自动化利器
运维·人工智能·自动化
摘星编程2 小时前
当AI学会分工合作:用MCP和A2A协议搭一套多智能体系统,跑了跑真实业务流程
人工智能
W23035765732 小时前
经典算法:打家劫舍(动态规划 + 回溯求最优解)C++ 超详细解析
c++·算法·动态规划
Dev7z2 小时前
基于改进小波阈值的sEMG信号降噪与手势识别系统设计与实现
算法·手势识别·改进小波阈值·semg·信号降噪
灵感__idea9 小时前
Hello 算法:贪心的世界
前端·javascript·算法