文章目录
模型评估与选择(评价指标理论)
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(1−m1)m=e1≈0.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=1∑m(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=1∑mⅡ(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=1∑mⅡ(f(xi)=yi)=1−E(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=样例总数+TP−TN2×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+ϵPos∑x−ϵ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=1−lrank
代价敏感错误率与代价曲线
不同错误的后果不同。最小化总体代价。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+(1−p)×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+(1−p)×cost10FNR×p×cost01+FPR×(1−p)×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)
标签:01,cost,TP,times,查全率,数模,frac,打卡,评估
From: https://blog.csdn.net/the_great_crab/article/details/140416510