数据评估
基本数值
acc(准确率)
顾名思义,$\frac{正确的}{总数}$
precision(查准率)与recall(召回率)
混淆矩阵
实际值 | 预测结果(正在预测,得出如下结果[正、反]) | ||
---|---|---|---|
正例 | 反例 | 召回率R | |
正例 | TP(true positive真正例)【对】 | FN(false negative假反例)【错】 | $TP\over{TP+FN}$ |
反例 | FP(false positive假正例)【错】 | TN(false negative真反例)【对】 | $FP\over{FP+TN}$ |
查准率P | $TP\over{TP+FP}$ | $TN\over{FN+TN}$ |
上面是2*2的混淆矩阵
TP、FP、FN、TN定义如上
查准率就是我猜是这个东西,在猜这个东西的情况下猜对的概率—->对某东西的命中率
召回率就是我在猜的时候对某一类的偏好概率(比如在判断天上飞的是导弹还是鸟的时候,会要求导弹的召回率大—->另可错杀100,也不放过1个)
F1-score
F1-score是基于查准率和找回率的调和平均定义的
${1\over F1}=\frac{1}{2}*(\frac{1}{P}+\frac{1}{R})$
简化
$F1=\frac{2PR}{P+R}$
像上面说的导弹和鸟的问题,我们可以给R加权
${1\over F1}=\frac{1}{1+\beta^2}*(\frac{1}{P}+\frac{\beta^2}{R})$
可用来度量两个分类器的优秀程度
多个结果的统合
macro(P,R,F1)
直接把所有的数值求均值
$宏查准率macro_P={1\over n}\sum_{i=1}^n P_i$
$宏召回率macro_R={1\over n}\sum_{i=1}^n R_i$
$宏F1macro_F1=\frac{2macro_Pmacor_R}{macro_P+macro_R}$
micro(P,R,F1)
还有一种想法就是先得到TP,TN,FP,FN的均值,然后在计算这三个
叫做微查准率,微召回率,微F1
ROC曲线与AUC
TPR与FPR
${TPR(真正例的召回率)=}{TP\over{TP+FN}}$
${FPR(假正例的召回率)=}{FP\over{FP+TN}}$
对正例来说,我们当然希望TPR趋近于1,FPR趋近于0
阈值与流程
ROC曲线,首先有个很重要的东西,就是需要treshVal(阈值)。
对于二分类问题,阈值是相对于正例的。
- 1、我们对于测试集的一个样本x在学习到的模型中得到一个[0,1]的分类值,将相当于逻辑回归sigmoid之后的值
- 2、然后我们用这个值与阈值比较,来判断这个测试集样本的类别
- 3、得到的这个类别与真实的类别比较更新TP,FP,TN,FN
- 4、用得到东西计算TPR和FPR
- 5、每个ROC曲线上的点就是(FPR,TPR)
举个例子:
有8个导弹和2只鸟,导弹未正例。
所有士兵判断预测导弹的方法一样(怎么预测的你就不用管了)
当阈值为0.9的时候,我预测了9个导弹一个鸟,TPR=1,FPR=0.5
但是有些士兵心中的阈值不一样可能是1.0,可能是0.8,0.7,0.6,0.55,…..
所以我们把所有的阈值对应的情况画出一个曲线ROC,来估计这些士兵方法的好坏
一般的,如果一个ROC可以几乎完全包含另一个ROC,则前一个好
AUC
AUC是一个值,它等于ROC下面的面积(积分)
由于我们用的东西都是一个个点放在一起的,所以我们只用求很多个梯形的面积就好了
1 | for i in range(roc.shape[0]-1): |
图
下面是knn与logistic的ROC
knn怎么ROC???我们把k中正例的比例来和阈值判断
!!!下面哪行东西不要理会,那是鼠标移到的位置
下面的是knn的三种划分方法的比较