二、正负样本不平衡处理方法总结( 五 )


二、正负样本不平衡处理方法总结

文章插图
查准率-查全率曲线,即“P-R曲线”,进行比较学习器的性能 。若一个学习器的P-R曲线完全被另一个学习器的曲线包住,则可断言后者的性能优于前者(A>C) 。当两个曲线发生交叉时,通过“平衡点”(break even point),即查准率 == 查全率时的取值(A>B) 。
更常用的是F1度量,基于查准率和查全率的调和平均定义 。
F1的一般形式为:
其中β>0度量了查全率对查准率的想对重要性 。β = 1时为标准的F1 。β>1时查全率有更大影响;β
mport numpy as npy_true = np.array([0, 1, 1, 0, 1, 0])y_pred = np.array([1, 1, 1, 0, 0, 1])# True PositiveTP = np.sum(np.multiply(y_true,y_pred))print(TP)# output:2# false positiveFP = np.sum(np.logical_and(np.equal(y_true, 0), np.equal(y_pred, 1))) # 逻辑与print(FP)# output:2# false negativeFN = np.sum(np.logical_and(np.equal(y_true, 1), np.equal(y_pred, 0)))print(FN)# output:1# true negativeTN = np.sum(np.logical_and(np.equal(y_true, 0), np.equal(y_pred, 0)))print(TN) #output:1## sklearn 实现from sklearn importmetricsy_true = [0, 1, 1, 0, 1, 0]y_pred = [1, 1, 1, 0, 0, 1]p = metrics.precision_score(y_true, y_pred, average='binary')r = metrics.recall_score(y_true, y_pred, average='binary')f1score = metrics.f1_score(y_true, y_pred, average='binary')print(p) #output:0.5print(r) # output:0.67print(f1score)#output:0.57## tensorflow 实现import tensorflow as tfsess = tf.Session()y_true = tf.constant([0, 1, 1, 0, 1, 0])y_pred = tf.constant([1, 1, 1, 0, 0, 1])# true positiveTP = tf.reduce_sum(tf.multiply(y_true, y_pred))print(sess.run(TP))# false positiveFP = tf.reduce_sum(tf.cast(tf.logical_and(tf.equal(y_true, 0), tf.equal(y_pred, 1)), tf.int32))print(sess.run(FP))# false negativeFN = tf.reduce_sum(tf.cast(tf.logical_and(tf.equal(y_true, 1), tf.equal(y_pred, 0)), tf.int32))print(sess.run(FN))# true negativeTN = tf.reduce_sum(tf.cast(tf.logical_and(tf.equal(y_true, 0), tf.equal(y_pred, 0)), tf.int32))print(sess.run(TN))
2、ROC与AUC
ROC全称是“受试者工作特征”()曲线,与上节中的P-R曲线相似,我们根据学习器的预测结果进行排序,按此顺序逐个把样本作为正例进行预测,每次计算两个重要量的值,分别以他们为横、纵坐标作图,就得到ROC曲线,与P-R曲线采用查准率、查全率为纵、横轴不同,ROC曲线的纵轴是“真正例率” (TrueRate, TPR),横轴是“假正例率”(FalseRate, FPR),公式为:
TPR = TP / (TP + FN);
FPR = FP / (FP + TN)
二、正负样本不平衡处理方法总结

文章插图
在一个二分类模型中,假设采用逻辑回归分类器,其给出针对每个实例为正类的概率,那么通过设定一个阈值如0.6,概率大于等于0.6的为正类,小于0.6的为负类 。对应的就可以算出一组(FPR,TPR),在平面中得到对应坐标点 。随着阈值的逐渐减小,越来越多的实例被划分为正类,但是这些正类中同样也掺杂着真正的负实例,即TPR和FPR会同时增大 。阈值最大时,对应坐标点为(0,0),阈值最小时,对应坐标点(1,1) 。
AUC值是一个概率值,当你随机挑选一个正样本以及一个负样本,当前的分类算法根据计算得到的Score值将这个正样本排在负样本前面的概率就是AUC值 。当然,AUC值越大,当前的分类算法越有可能将正样本排在负样本前面,即能够更好的分类 。
从AUC判断分类器(预测模型)优劣的标准:
PRC与ROC的比较:
AUC是ROC的积分(曲线下面积),是一个数值,一般认为越大越好,数值相对于曲线而言更容易当做调参的参照 。
PR曲线会面临一个问题,当需要获得更高时,model需要输出更多的样本,可能会伴随出现下降/不变/升高,得到的曲线会出现浮动差异(出现锯齿),无法像ROC一样保证单调性 。