模型评估与选择 数模打卡

模型评估与选择(评价指标理论)

1. 经验误差与过拟合

错误率,精度,误差。训练(经验)误差,泛化误差。
过拟合,欠拟合。
模型选择。

2. 评估方法

测试集。测试误差->如何分出训练集S和测试集T。

留出法hand-out

将数据集分为两个互斥的集合作S和T。数据分布的一致性,分层采样。
多次随机划分、重复实验评估后去取平均值。

交叉验证法cross validation

k-fold crass validation:k个互斥子集,每次用k-1个训练,余一个测试,重复k次。
k取值。常用10.
随机使用不同的划分重复p次,如10次10折交叉验证。

  • 留一法:每个子集一个样本。

自助法bootstrapping

自主采样:放回随机抽m个样本,重复m次。
某样本始终不被采到的概率极限是 lim ⁡ m − > ∞ ( 1 − 1 m ) m = 1 e ≈ 0.368 \lim_{m->\infty}(1-\frac{1}{m})^{m}=\frac{1}{e}\approx0.368 m>lim(1m1)m=e10.368
采样作为训练,余下作为测试->out-of-bag estimate
数据集较小;集成学习。

调参与最终模型

测试集、验证集。

3. 性能度量

均方误差mean squared error E ( f ; D ) = 1 m ∑ i = 1 m ( f ( x i ) − y i ) 2 E(f;D)=\frac{1}{m}\sum_{i=1}^{m}(f(x_{i})-y_{i})^{2} E(f;D)=m1i=1m(f(xi)yi)2数据分布D和概率密度函数p(·) E ( f ; D ) = ∫ x   D ( f ( x ) − y ) 2 p ( x ) d x E(f;D)=\int_{x~D}(f(x)-y)^{2}p(x)dx E(f;D)=x D(f(x)y)2p(x)dx

错误率与精度

错误率:分类错误的样本比例。 E ( f : D ) = 1 m ∑ i = 1 m Ⅱ ( f ( x i ) ≠ y i ) E(f:D)=\frac{1}{m}\sum_{i=1}^{m}Ⅱ(f(x_{i})\ne y_{i}) E(f:D)=m1i=1m(f(xi)=yi)
精度:分类正确的样本数比例。 E ( f : D ) = 1 m ∑ i = 1 m Ⅱ ( f ( x i ) = y i ) = 1 − E ( f ; D ) E(f:D)=\frac{1}{m}\sum_{i=1}^{m}Ⅱ(f(x_{i})= y_{i})=1-E(f;D) E(f:D)=m1i=1m(f(xi)=yi)=1E(f;D)
对应可写出连续形式。

查准率、查全率与F1

真正例TP,假正例FP,真反例TN,假反例FN。

  • 查准率(准确率)预测真的有多少是真 P = T P T P + F P P=\frac{TP}{TP+FP} P=TP+FPTP
  • 查全率(召回率)真的当中多少预测为真 R = T P T P + F N R=\frac{TP}{TP+FN} R=TP+FNTP
  • P-R曲线:如果一个学习器的P-R曲线被另一个完全“包住”,则可断言后者优于前者。如果发货时那个交叉则难以比较,通常还可以用P-R曲线下的面积大小,以及以下度量。
  • 平衡点Break-Event Point:P=R的取值。
  • F1度量:查准率和查全率的调和平均: F 1 = 2 × P × R P + R = 2 × T P 样例总数 + T P − T N F1=\frac{2\times P\times R}{P+R}=\frac{2\times TP}{样例总数+TP-TN} F1=P+R2×P×R=样例总数+TPTN2×TP
  • Fβ度量:加权调和平均,β>1查全率更重要,<1查准率更重要: F β = ( 1 + β 2 ) × P × R ( β 2 × P ) + R F_{\beta}=\frac{(1+\beta^{2})\times P\times R}{(\beta^{2}\times P)+R} Fβ=(β2×P)+R(1+β2)×P×R
    在n个二分类混淆矩阵上综合考察查准率和查全率:
  • 先在各混淆矩阵上分别计算查准、查全,然后计算平均值得到宏查准率和宏查全率,以及macro-F1。
    还可将个混淆矩阵的对应元素平均,得到平均TP,FP,TN,FN,计算微查准率、微查全率、微F1.

ROC与AUC

  • 分类阈值threshold,将预测值与之比较,大于为P,小于为N。截断点cut point,排序本身的好坏体现了综合考虑学习器在不同任务下“期望泛化性能”的好坏。
  • ROC:Receiver Operating Characteristic。根据测试结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,每次计算出两个重要的值,分别以它们为横纵坐标作图,得到ROC曲线。
  • 纵轴TPR(真正例率,R),横轴FPR(假正例率) T P R = T P T P + F N TPR=\frac{TP}{TP+FN} TPR=TP+FNTP F P R = F P T N + F P FPR=\frac{FP}{TN+FP} FPR=TN+FPFP
    (0,1)为理想模型,对角线为随机猜测模型。
  • 操作方式:给定m个正例、n个反例,设置分类阈值为0得到(0,0),此后将分类阈值依次设为每个样例的预测值,即依次将每个样例划分为正例。若为TP,则对应标记点的坐标为(x,y+1/m);若为FP,则为(x+1/n,y),然后用线段连接相邻点即得。
  • 若一个学习器的ROC被另一个ROC曲线包住,则后者的性能更优。若有交叉,比较面积(AUC)。
  • 排序损失loss定义为 l r a n k = 1 m × n ∑ x + ϵ P o s ∑ x − ϵ N e g ( Ⅱ ( f ( x + ) < f ( x − ) ) + 1 2 Ⅱ ( f ( x + ) = f ( x − ) ) ) l_{rank}=\frac{1}{m\times n}\sum_{x+\epsilon Pos}\sum_{x-\epsilon Neg}(Ⅱ(f(x+)<f(x-))+\frac{1}{2}Ⅱ(f(x+)=f(x-))) lrank=m×n1x+ϵPosxϵNeg((f(x+)<f(x))+21(f(x+)=f(x)))它对应的是ROC曲线之上的面积,即假正例率,即 A U C = 1 − l r a n k AUC=1-l_{rank} AUC=1lrank

代价敏感错误率与代价曲线

不同错误的后果不同。最小化总体代价。Pos与Neg分别代表样例集D的正例子集合反例子集,则代价敏感错误率为 E ( f ; D ; c o s t ) = 1 m ( ∑ x i ϵ P o s Ⅱ ( f ( x i ) ≠ y i ) × c o s t 01 + ∑ x i ϵ N e g Ⅱ ( f ( x i ) ≠ y i ) × c o s t 10 ) E(f;D;cost)=\frac{1}{m}(\sum_{x_{i}\epsilon Pos}Ⅱ(f(x_{i})\ne y_{i})\times cost_{01}+\sum_{x_{i}\epsilon Neg}Ⅱ(f(x_{i})\ne y_{i})\times cost_{10}) E(f;D;cost)=m1(xiϵPos(f(xi)=yi)×cost01+xiϵNeg(f(xi)=yi)×cost10)类似可以定义基于分布的代价敏感错误率。不止于0、1可以定义出多分类任务的代价敏感性能度量。

  • 代价曲线cost curve,p为正例概率,横轴是 P ( + ) c o s t = p × c o s t 01 p × c o s t 01 + ( 1 − p ) × c o s t 01 P(+)cost=\frac{p\times cost_{01}}{p\times cost_{01}+(1-p)\times cost_{01}} P(+)cost=p×cost01+(1p)×cost01p×cost01纵轴是(FPR是假正例率,FNR=1-TPR是假反例率) c o s t n o r m = F N R × p × c o s t 01 + F P R × ( 1 − p ) × c o s t 10 p × c o s t 01 + ( 1 − p ) × c o s t 10 cost_{norm}=\frac{FNR\times p\times cost_{01}+FPR\times (1-p)\times cost_{10}}{p\times cost_{01}+(1-p)\times cost_{10}} costnorm=p×cost01+(1p)×cost10FNR×p×cost01+FPR×(1p)×cost10
  • 期望总体代价:ROC曲线上的坐标(TPR,FPR)计算出相应的FNR,然后在代价平面上绘制(0,FPR)到(1,FNR)的线段,包络面积即是。
    在这里插入图片描述
    代码及运行结果(参考https://blog.csdn.net/m0_72195508/article/details/140409460)
from sklearn.metrics import precision_score, recall_score, accuracy_score, f1_score

y_true = [3, 0, 2, 1, 0, 0]
y_pred = [1, 0, 1, 1, 0, 1]

# 计算精确度
precision = precision_score(y_true, y_pred, average='macro', zero_division=1)
print("Precision (macro-average):", precision)

# 计算召回率
recall = recall_score(y_true, y_pred, average='macro', zero_division=1)
print("Recall (macro-average):", recall)

# 计算准确率
accuracy = accuracy_score(y_true, y_pred)
print("Accuracy:", accuracy)

# 计算F1分数
f1 = f1_score(y_true, y_pred, average='macro', zero_division=1)
print("F1 Score (macro-average):", f1)

在这里插入图片描述

  • 16
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值