confusion matrix
true class \fitted class | 1 | 0 | total |
---|---|---|---|
1 | TP | FN | P |
0 | FP | TN | N |
总体衡量
- accuracy(精度)
T P + T N P + N \frac{TP+TN}{P+N} P+NTP+TN - error rate(误分率)
F P + F N P + N \frac{FP+FN}{P+N} P+NFP+FN
查准率(precision)
T
P
T
P
+
F
P
\frac{TP}{TP+FP}
TP+FPTP
查全率(recall)
T
P
T
P
+
F
N
\frac{TP}{TP+FN}
TP+FNTP
如果希望recall 高,把所有人都预测为坏蛋(会破1)
这里需要阈值度量,阈值越高,查准率越高,阈值越低,查全率越高。
F1度量
希望precision和recall的调和平均
F
1
=
2
P
R
P
+
R
F1=\frac{2PR}{P+R}
F1=P+R2PR
p和r越大,F1越大,查全率升高的时候,查准率会降低
F
β
F_\beta
Fβ度量
F
β
=
(
1
+
β
2
)
P
R
R
+
β
2
p
=
(
1
+
β
2
)
1
P
+
β
2
1
R
F_\beta=\frac{(1+\beta^2)PR}{R+\beta^2 p}=\frac{(1+\beta^2)}{\frac{1}{P}+\beta^2 \frac{1}{R}}
Fβ=R+β2p(1+β2)PR=P1+β2R1(1+β2)
β > 1 \beta>1 β>1,recall比较重要,否则,precision 比较重要
ROC 曲线和 AUC
roc原理:
如果一个分类器,可以把正例的概率预测的比负例的概率高,那么这应该是一个好的分类器
roc曲线
横轴:FPR(假正例率)真正的负例里面的错分率
F
P
R
=
F
P
T
N
+
F
P
=
F
P
N
FPR=\frac{FP}{TN+FP}=\frac{FP}{N}
FPR=TN+FPFP=NFP
纵轴:TPR(真正例率)真正的正例里面分对的概率
T
P
R
=
T
P
T
P
+
F
N
=
T
P
P
TPR=\frac{TP}{TP+FN}=\frac{TP}{P}
TPR=TP+FNTP=PTP
comment
- 如果一个分类器的roc曲线可以将另外一个包裹,证明一致的由于后者
- 一般TPR高的时候,FPR也高,如果我们将阈值设为0,那么TPR=FDR=1
将阈值设为1,那么FPR=TPR=0
AUC: roc曲线包裹的面积
在有限样本下,ROC曲线可以这样绘制
- 将阈值设值成最大,将所有的子例预测为反例,此时 TPR=FPR=0
- 将所有样本预测值从低到高排序,将阈值依次设为预测值
- 设前一个点的标记为 ( x , y ) (x,y) (x,y),如果为真正例,下一个点的坐标, ( x , y + 1 P ) (x,y+\frac{1}{P}) (x,y+P1),否则 ( x + 1 N , y ) (x+\frac{1}{N},y) (x+N1,y)
定义排序损失如下,
m
+
=
p
m^{+}=p
m+=p ,
m
−
=
N
m^{-}=N
m−=N,
D
+
D^+
D+ 为正例的集合,
D
−
D^-
D− 为负例的集合
l
r
a
n
k
=
1
m
+
m
−
∑
x
∈
D
+
∑
x
∈
D
−
(
I
(
f
(
x
+
)
<
f
(
x
−
)
)
+
1
2
I
(
f
(
x
+
)
=
f
(
x
−
)
)
)
l_{rank}=\frac{1}{m^+m^-}\sum_{x\in D^+}\sum_{x\in D^-}(I(f(x^+)<f(x^-))+\frac{1}{2}I(f(x^+)=f(x^-)))
lrank=m+m−1x∈D+∑x∈D−∑(I(f(x+)<f(x−))+21I(f(x+)=f(x−)))
A U C = 1 − l r a n k AUC=1-l_{rank} AUC=1−lrank
成本收益曲线
成本:
T
P
+
F
P
P
+
N
\frac{TP+FP}{P+N}
P+NTP+FP
收益:recall
T
P
P
\frac{TP}{P}
PTP
成本为1的时候,收益也为1
多次度量
k次实验取平均值进行度量
也有可能通过假设检验比较两个分类器的优劣
类别不均衡
设置阈值,若
p
i
1
−
p
i
>
m
+
m
−
\frac{p_i}{1-p_i}>\frac{m_+}{m_-}
1−pipi>m−m+则预测为正例,不再用1作为cutoff
过采样
smote算法,对正例进行插值产生新正例
欠采样
easyensemble,将反例划分为几个子集,分别学习,再用集成学习汇总结果